From c93aca84c5bda483ebf03a72f814336e27f0198f Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 28 Nov 2012 17:54:53 -0500
Subject: [PATCH] Show a confirmation prompt on first startup of GCA if Unlimited Strength is unavailable

---
 src/com/gitblit/wicket/panels/BranchesPanel.java |   36 +++++++++++++++++++++++++-----------
 1 files changed, 25 insertions(+), 11 deletions(-)

diff --git a/src/com/gitblit/wicket/panels/BranchesPanel.java b/src/com/gitblit/wicket/panels/BranchesPanel.java
index 2512653..cfe9f5f 100644
--- a/src/com/gitblit/wicket/panels/BranchesPanel.java
+++ b/src/com/gitblit/wicket/panels/BranchesPanel.java
@@ -32,6 +32,7 @@
 import org.eclipse.jgit.lib.Repository;
 
 import com.gitblit.Constants;
+import com.gitblit.GitBlit;
 import com.gitblit.SyndicationServlet;
 import com.gitblit.models.RefModel;
 import com.gitblit.models.RepositoryModel;
@@ -51,7 +52,7 @@
 
 	private final boolean hasBranches;
 
-	public BranchesPanel(String wicketId, final RepositoryModel model, final Repository r,
+	public BranchesPanel(String wicketId, final RepositoryModel model, Repository r,
 			final int maxCount, final boolean showAdmin) {
 		super(wicketId);
 
@@ -76,7 +77,10 @@
 			// branches page
 			add(new Label("branches", new StringResourceModel("gb.branches", this, null)));
 		}
-
+		
+		// only allow delete if we have multiple branches
+		final boolean showDelete = showAdmin && branches.size() > 1;
+		
 		ListDataProvider<RefModel> branchesDp = new ListDataProvider<RefModel>(branches);
 		DataView<RefModel> branchesView = new DataView<RefModel>("branch", branchesDp) {
 			private static final long serialVersionUID = 1L;
@@ -110,7 +114,7 @@
 				item.add(shortlog);
 				
 				if (maxCount <= 0) {
-					Fragment fragment = new Fragment("branchLinks", "branchPageLinks", this);
+					Fragment fragment = new Fragment("branchLinks", showDelete? "branchPageAdminLinks" : "branchPageLinks", this);
 					fragment.add(new BookmarkablePageLink<Void>("log", LogPage.class, WicketUtils
 							.newObjectParameter(model.name, entry.getName())));
 					fragment.add(new BookmarkablePageLink<Void>("tree", TreePage.class, WicketUtils
@@ -120,9 +124,9 @@
 					fragment.add(new ExternalLink("syndication", SyndicationServlet.asLink(
 							getRequest().getRelativePathPrefixToContextRoot(), model.name,
 							entry.getName(), 0)));
-					
-					fragment.add(createDeleteBranchLink(r, entry, showAdmin));
-					
+					if (showDelete) {
+						fragment.add(createDeleteBranchLink(model, entry));
+					}
 					item.add(fragment);
 				} else {
 					Fragment fragment = new Fragment("branchLinks", "branchPanelLinks", this);
@@ -154,15 +158,28 @@
 		return this;
 	}
 
-	private Link<Void> createDeleteBranchLink(final Repository r, final RefModel entry, final boolean showAdmin)
+	private Link<Void> createDeleteBranchLink(final RepositoryModel repositoryModel, final RefModel entry)
 	{
 		Link<Void> deleteLink = new Link<Void>("deleteBranch") {
 			private static final long serialVersionUID = 1L;
 
 			@Override
 			public void onClick() {
-				if( showAdmin && JGitUtils.deleteBranchRef(r, entry.getName()) ) {
+				Repository r = GitBlit.self().getRepository(repositoryModel.name);
+				if (r == null) {
+					if (GitBlit.self().isCollectingGarbage(repositoryModel.name)) {
+						error(MessageFormat.format(getString("gb.busyCollectingGarbage"), repositoryModel.name));
+					} else {
+						error(MessageFormat.format("Failed to find repository {0}", repositoryModel.name));
+					}
+					return;
+				}
+				boolean success = JGitUtils.deleteBranchRef(r, entry.getName());
+				r.close();
+				if (success) {
 					info(MessageFormat.format("Branch \"{0}\" deleted", entry.displayName));
+					// redirect to the owning page
+					setResponsePage(getPage().getClass(), WicketUtils.newRepositoryParameter(repositoryModel.name));
 				}
 				else {
 					error(MessageFormat.format("Failed to delete branch \"{0}\"", entry.displayName));
@@ -172,9 +189,6 @@
 		
 		deleteLink.add(new JavascriptEventConfirmation("onclick", MessageFormat.format(
 				"Delete branch \"{0}\"?", entry.displayName )));
-		
-		deleteLink.setVisible(showAdmin);
-		
 		return deleteLink;
 	}
 }

--
Gitblit v1.9.1