From cc1c3ffa7d261d2e8bcdc600253528e8d09e1d06 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Sat, 08 Mar 2014 11:53:01 -0500
Subject: [PATCH] Allow selection of integration branch in new ticket page

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

diff --git a/src/main/java/com/gitblit/wicket/pages/NewTicketPage.java b/src/main/java/com/gitblit/wicket/pages/NewTicketPage.java
index 17ad1d1..25fe48f 100644
--- a/src/main/java/com/gitblit/wicket/pages/NewTicketPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/NewTicketPage.java
@@ -29,7 +29,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;
@@ -61,6 +63,8 @@
 
 	private IModel<String> topicModel;
 
+	private IModel<String> mergeToModel;
+
 	private IModel<TicketResponsible> responsibleModel;
 
 	private IModel<TicketMilestone> milestoneModel;
@@ -83,6 +87,7 @@
 		typeModel = Model.of(TicketModel.Type.defaultType);
 		titleModel = Model.of();
 		topicModel = Model.of();
+		mergeToModel = Model.of(Repository.shortenRefName(getRepositoryModel().HEAD));
 		responsibleModel = Model.of();
 		milestoneModel = Model.of();
 
@@ -123,6 +128,12 @@
 					change.setField(Field.milestone, milestone.name);
 				}
 
+				// integration branch
+				String mergeTo = mergeToModel.getObject();
+				if (!StringUtils.isEmpty(mergeTo)) {
+					change.setField(Field.mergeTo, mergeTo);
+				}
+
 				TicketModel ticket = app().tickets().createTicket(getRepositoryModel(), 0L, change);
 				if (ticket != null) {
 					TicketNotifier notifier = app().tickets().createNotifier();
@@ -149,7 +160,7 @@
 		descriptionEditor.setRepository(repositoryName);
 		form.add(descriptionEditor);
 
-		if (currentUser != null && currentUser.isAuthenticated && currentUser.canPush(getRepositoryModel())) {
+		if (currentUser.canAdmin(null, getRepositoryModel())) {
 			// responsible
 			List<TicketResponsible> responsibles = new ArrayList<TicketResponsible>();
 			for (RegistrantAccessPermission rp : app().repositories().getUserAccessPermissions(getRepositoryModel())) {
@@ -170,10 +181,26 @@
 			Fragment milestone = new Fragment("milestone", "milestoneFragment", this);
 			milestone.add(new DropDownChoice<TicketMilestone>("milestone", milestoneModel, milestones));
 			form.add(milestone.setVisible(!milestones.isEmpty()));
+
+			// 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
+			// user does not have permission to assign milestone, responsible, or mergeto
 			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("create"));

--
Gitblit v1.9.1