Add dependency to the lucene index, and display reverse dependant tickets for pages
diff --git a/src/main/java/com/gitblit/tickets/QueryResult.java b/src/main/java/com/gitblit/tickets/QueryResult.java
index f8d6d12..14698c3 100644
--- a/src/main/java/com/gitblit/tickets/QueryResult.java
+++ b/src/main/java/com/gitblit/tickets/QueryResult.java
@@ -60,6 +60,7 @@
 	public List<String> participants;
 	public List<String> watchedby;
 	public List<String> mentions;
+	public List<String> dependencies;
 	public Patchset patchset;
 	public int commentsCount;
 	public int votesCount;
diff --git a/src/main/java/com/gitblit/tickets/TicketIndexer.java b/src/main/java/com/gitblit/tickets/TicketIndexer.java
index e2d53af..5db5590 100644
--- a/src/main/java/com/gitblit/tickets/TicketIndexer.java
+++ b/src/main/java/com/gitblit/tickets/TicketIndexer.java
@@ -20,6 +20,7 @@
 import java.text.MessageFormat;
 import java.text.ParseException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
 import java.util.LinkedHashSet;
@@ -106,7 +107,8 @@
 		votes(Type.INT),
 		//NOTE: Indexing on the underlying value to allow flexibility on naming
 		priority(Type.INT),
-		severity(Type.INT);
+		severity(Type.INT),
+		dependencies(Type.STRING);
 
 		final Type fieldType;
 
@@ -521,6 +523,9 @@
 		toDocField(doc, Lucene.participants, StringUtils.flattenStrings(ticket.getParticipants(), ";").toLowerCase());
 		toDocField(doc, Lucene.watchedby, StringUtils.flattenStrings(ticket.getWatchers(), ";").toLowerCase());
 		toDocField(doc, Lucene.mentions, StringUtils.flattenStrings(ticket.getMentions(), ";").toLowerCase());
+		for (String dep : ticket.getDependencies()) {
+			toDocField(doc, Lucene.dependencies, dep);
+		}
 		toDocField(doc, Lucene.votes, ticket.getVoters().size());
 		toDocField(doc, Lucene.priority, ticket.priority.getValue());
 		toDocField(doc, Lucene.severity, ticket.severity.getValue());
@@ -607,6 +612,7 @@
 		result.mentions = unpackStrings(doc, Lucene.mentions);
 		result.priority = TicketModel.Priority.fromObject(unpackInt(doc, Lucene.priority), TicketModel.Priority.defaultPriority);
 		result.severity = TicketModel.Severity.fromObject(unpackInt(doc, Lucene.severity), TicketModel.Severity.defaultSeverity);
+		result.dependencies = convertList(doc, Lucene.dependencies);
 
 		if (!StringUtils.isEmpty(doc.get(Lucene.patchset.name()))) {
 			// unpack most recent patchset
@@ -625,6 +631,10 @@
 		return result;
 	}
 
+	private List<String> convertList(Document doc, Lucene lucene) {
+		return Arrays.asList(doc.getValues(lucene.name()));
+	}
+
 	private String unpackString(Document doc, Lucene lucene) {
 		return doc.get(lucene.name());
 	}
diff --git a/src/main/java/com/gitblit/wicket/GitBlitWebApp.properties b/src/main/java/com/gitblit/wicket/GitBlitWebApp.properties
index 10bfe00..98b619a 100644
--- a/src/main/java/com/gitblit/wicket/GitBlitWebApp.properties
+++ b/src/main/java/com/gitblit/wicket/GitBlitWebApp.properties
@@ -516,6 +516,8 @@
 gb.dependency = dependency
 gb.dependencies = dependencies
 gb.remove = remove
+gb.dependant = dependant
+gb.showDependant = show dependant
 gb.createdThisTicket = created this ticket
 gb.proposedThisChange = proposed this change
 gb.uploadedPatchsetN = uploaded patchset {0}
diff --git a/src/main/java/com/gitblit/wicket/pages/TicketPage.html b/src/main/java/com/gitblit/wicket/pages/TicketPage.html
index e3d143d..26f3f03 100644
--- a/src/main/java/com/gitblit/wicket/pages/TicketPage.html
+++ b/src/main/java/com/gitblit/wicket/pages/TicketPage.html
@@ -73,6 +73,7 @@
 						<tr><th><wicket:message key="gb.responsible"></wicket:message></th><td><span wicket:id="responsible">[responsible]</span></td></tr>

 						<tr><th><wicket:message key="gb.milestone"></wicket:message></th><td><span wicket:id="milestone">[milestone]</span></td></tr>

 						<tr><th><wicket:message key="gb.dependencies"></wicket:message></th><td><span wicket:id="dependencies"><a wicket:id="dependencyLink">[link]</a></span></td></tr>

+						<tr><th><wicket:message key="gb.dependant"></wicket:message></th><td><a wicket:id="dependOnLink"><wicket:message key="gb.showDependant"></wicket:message></a></td></tr>

 						<tr><th><wicket:message key="gb.votes"></wicket:message></th><td><span wicket:id="votes" class="badge">1</span> <a style="padding-left:5px" wicket:id="voteLink" href="#">vote</a></td></tr>

 						<tr><th><wicket:message key="gb.watchers"></wicket:message></th><td><span wicket:id="watchers" class="badge">1</span> <a style="padding-left:5px" wicket:id="watchLink" href="#">watch</a></td></tr>

 						<tr><th><wicket:message key="gb.export"></wicket:message></th><td><a rel="nofollow" target="_blank" wicket:id="exportJson"></a></td></tr>

diff --git a/src/main/java/com/gitblit/wicket/pages/TicketPage.java b/src/main/java/com/gitblit/wicket/pages/TicketPage.java
index 74484b0..ae48196 100644
--- a/src/main/java/com/gitblit/wicket/pages/TicketPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/TicketPage.java
@@ -307,6 +307,8 @@
 			}

 		});

 

+		add(new BookmarkablePageLink<Void>("dependOnLink", TicketsPage.class, queryDependsOn(ticket.number)));

+

 		/*

 		 * PARTICIPANTS (DISCUSSION TAB)

 		 */

@@ -997,6 +999,12 @@
 		add(revisionHistory);

 	}

 

+	private PageParameters queryDependsOn(long number) {

+		PageParameters params = WicketUtils.newRepositoryParameter(repositoryName);

+		params.add("q", Lucene.dependencies.name() + ':' + number);

+		return params;

+	}

+

 	protected void addUserAttributions(MarkupContainer container, Change entry, int avatarSize) {

 		UserModel commenter = app().users().getUserModel(entry.author);

 		if (commenter == null) {