From 1c261bd5fbe8f4750f17678f85f98cf101439b71 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Mon, 05 Oct 2015 08:04:34 -0400
Subject: [PATCH] Merge branch 'topic/pr-935' into develop

---
 src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.html |    1 +
 src/main/java/com/gitblit/wicket/GitBlitWebApp.properties    |    3 ++-
 src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.java |   34 +++++++++++++++++++++++-----------
 3 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/gitblit/wicket/GitBlitWebApp.properties b/src/main/java/com/gitblit/wicket/GitBlitWebApp.properties
index d037420..d802754 100644
--- a/src/main/java/com/gitblit/wicket/GitBlitWebApp.properties
+++ b/src/main/java/com/gitblit/wicket/GitBlitWebApp.properties
@@ -763,4 +763,5 @@
 gb.deleteRepositoryHeader = Delete Repository
 gb.deleteRepositoryDescription = Deleted repositories will be unrecoverable.
 gb.show_whitespace = show whitespace
-gb.ignore_whitespace = ignore whitespace
\ No newline at end of file
+gb.ignore_whitespace = ignore whitespace
+gb.allRepositories = All Repositories
\ No newline at end of file
diff --git a/src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.html b/src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.html
index 91a6ef4..d62b7b2 100644
--- a/src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.html
+++ b/src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.html
@@ -24,6 +24,7 @@
 			<div class="span3">
 				<h3><wicket:message key="gb.repositories"></wicket:message></h3>
 				<select wicket:id="repositories" ></select>
+				<label><input type="checkbox" wicket:id="allrepos" /> <span><wicket:message key="gb.allRepositories"></wicket:message></span></label>
 			</div>
 			<div class="span9" style="margin-left:10px">
 				<div>
diff --git a/src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.java b/src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.java
index 4d4545a..b2fd903 100644
--- a/src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.java
@@ -17,11 +17,14 @@
 
 import java.text.MessageFormat;
 import java.util.ArrayList;
+import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Set;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
 import org.apache.wicket.markup.html.form.ListMultipleChoice;
 import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.markup.html.panel.Fragment;
@@ -66,6 +69,15 @@
 		int page = 1;
 		int pageSize = app().settings().getInteger(Keys.web.itemsPerPage, 50);
 
+		// display user-accessible selections
+		UserModel user = GitBlitWebSession.get().getUser();
+		List<String> availableRepositories = new ArrayList<String>();
+		for (RepositoryModel model : app().repositories().getRepositoryModels(user)) {
+			if (model.hasCommits && !ArrayUtils.isEmpty(model.indexedBranches)) {
+				availableRepositories.add(model.name);
+			}
+		}
+
 		if (params != null) {
 			String repository = WicketUtils.getRepositoryName(params);
 			if (!StringUtils.isEmpty(repository)) {
@@ -78,6 +90,10 @@
 				String value = params.getString("repositories", "");
 				List<String> list = StringUtils.getStringsFromValue(value);
 				repositories.addAll(list);
+			}
+
+			if (params.containsKey("allrepos")) {
+				repositories.addAll(availableRepositories);
 			}
 
 			if (params.containsKey("query")) {
@@ -96,14 +112,6 @@
 			}
 		}
 
-		// display user-accessible selections
-		UserModel user = GitBlitWebSession.get().getUser();
-		List<String> availableRepositories = new ArrayList<String>();
-		for (RepositoryModel model : app().repositories().getRepositoryModels(user)) {
-			if (model.hasCommits && !ArrayUtils.isEmpty(model.indexedBranches)) {
-				availableRepositories.add(model.name);
-			}
-		}
 		boolean luceneEnabled = app().settings().getBoolean(Keys.web.allowLuceneIndexing, true);
 		if (luceneEnabled) {
 			if (availableRepositories.size() == 0) {
@@ -114,16 +122,18 @@
 		}
 
 		// enforce user-accessible repository selections
-		ArrayList<String> searchRepositories = new ArrayList<String>();
+		Set<String> uniqueRepositories = new LinkedHashSet<String>();
 		for (String selectedRepository : repositories) {
 			if (availableRepositories.contains(selectedRepository)) {
-				searchRepositories.add(selectedRepository);
+				uniqueRepositories.add(selectedRepository);
 			}
 		}
+		ArrayList<String> searchRepositories = new ArrayList<String>(uniqueRepositories);
 
 		// search form
 		final Model<String> queryModel = new Model<String>(query);
 		final Model<ArrayList<String>> repositoriesModel = new Model<ArrayList<String>>(searchRepositories);
+		final Model<Boolean> allreposModel = new Model<Boolean>(params != null && params.containsKey("allrepos"));
 		SessionlessForm<Void> form = new SessionlessForm<Void>("searchForm", getClass()) {
 
 			private static final long serialVersionUID = 1L;
@@ -135,13 +145,14 @@
 					error(getString("gb.undefinedQueryWarning"));
 					return;
 				}
-				if (repositoriesModel.getObject().size() == 0) {
+				if (repositoriesModel.getObject().size() == 0 && !allreposModel.getObject()) {
 					error(getString("gb.noSelectedRepositoriesWarning"));
 					return;
 				}
 				PageParameters params = new PageParameters();
 				params.put("repositories", StringUtils.flattenStrings(repositoriesModel.getObject()));
 				params.put("query", queryModel.getObject());
+				params.put("allrepos", allreposModel.getObject());
 				LuceneSearchPage page = new LuceneSearchPage(params);
 				setResponsePage(page);
 			}
@@ -152,6 +163,7 @@
 		selections.setMaxRows(8);
 		form.add(selections.setEnabled(luceneEnabled));
 		form.add(new TextField<String>("query", queryModel).setEnabled(luceneEnabled));
+		form.add(new CheckBox("allrepos", allreposModel));
 		add(form.setEnabled(luceneEnabled));
 
 		// execute search

--
Gitblit v1.9.1