From 06eb51f13d9dcd4e4e5d9d7bb0db4cf18a67b23e Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 05 Mar 2014 11:42:34 -0500
Subject: [PATCH] Allow integration (mergeTo) branch to be changed in edit ticket

---
 src/main/java/com/gitblit/wicket/pages/EditTicketPage.java |   30 +++++++++++++++++++++++++++++-
 1 files changed, 29 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/gitblit/wicket/pages/EditTicketPage.java b/src/main/java/com/gitblit/wicket/pages/EditTicketPage.java
index 5446dde..aad1d6f 100644
--- a/src/main/java/com/gitblit/wicket/pages/EditTicketPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/EditTicketPage.java
@@ -31,7 +31,9 @@
 import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
+import org.eclipse.jgit.lib.Repository;
 
+import com.gitblit.Constants;
 import com.gitblit.Constants.AccessPermission;
 import com.gitblit.models.RegistrantAccessPermission;
 import com.gitblit.models.TicketModel;
@@ -67,6 +69,8 @@
 	private MarkdownTextArea descriptionEditor;
 
 	private IModel<String> topicModel;
+
+	private IModel<String> mergeToModel;
 
 	private IModel<TicketResponsible> responsibleModel;
 
@@ -105,6 +109,7 @@
 		topicModel = Model.of(ticket.topic == null ? "" : ticket.topic);
 		responsibleModel = Model.of();
 		milestoneModel = Model.of();
+		mergeToModel = Model.of(ticket.mergeTo == null ? "" : ticket.mergeTo);
 
 		setStatelessHint(false);
 		setOutputMarkupId(true);
@@ -172,6 +177,13 @@
 					} else {
 						change.setField(Field.milestone, milestone.name);
 					}
+				}
+
+				String mergeTo = mergeToModel.getObject();
+				if ((StringUtils.isEmpty(ticket.mergeTo) && !StringUtils.isEmpty(mergeTo))
+						|| (!StringUtils.isEmpty(mergeTo) && !mergeTo.equals(ticket.mergeTo))) {
+					// integration branch change
+					change.setField(Field.mergeTo, mergeTo);
 				}
 
 				if (change.hasFieldChanges()) {
@@ -258,10 +270,27 @@
 
 			milestone.add(new DropDownChoice<TicketMilestone>("milestone", milestoneModel, milestones));
 			form.add(milestone.setVisible(!milestones.isEmpty()));
+
+			// mergeTo (integration branch)
+			List<String> branches = new ArrayList<String>();
+			for (String branch : getRepositoryModel().getLocalBranches()) {
+				// exclude ticket branches
+				if (!branch.startsWith(Constants.R_TICKET)) {
+					branches.add(Repository.shortenRefName(branch));
+				}
+			}
+			branches.remove(Repository.shortenRefName(getRepositoryModel().HEAD));
+			branches.add(0, Repository.shortenRefName(getRepositoryModel().HEAD));
+
+			Fragment mergeto = new Fragment("mergeto", "mergeToFragment", this);
+			mergeto.add(new DropDownChoice<String>("mergeto", mergeToModel, branches));
+			form.add(mergeto.setVisible(!branches.isEmpty()));
+
 		} else {
 			// user does not have permission to assign milestone or responsible
 			form.add(new Label("responsible").setVisible(false));
 			form.add(new Label("milestone").setVisible(false));
+			form.add(new Label("mergeto").setVisible(false));
 		}
 
 		form.add(new Button("update"));
@@ -275,7 +304,6 @@
 		};
 		cancel.setDefaultFormProcessing(false);
 		form.add(cancel);
-
 	}
 
 	@Override

--
Gitblit v1.9.1