Paul Martin
2016-04-30 a502d96a860456ec5e8c96761db70f7cabb74751
src/main/java/com/gitblit/wicket/panels/BranchesPanel.java
@@ -37,11 +37,11 @@
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;
import com.gitblit.models.UserModel;
import com.gitblit.servlet.RawServlet;
import com.gitblit.servlet.SyndicationServlet;
import com.gitblit.utils.CommitCache;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.RefLogUtils;
@@ -101,23 +101,26 @@
         // 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;
         int counter;
         @Override
         public void populateItem(final Item<RefModel> item) {
            final RefModel entry = item.getModelObject();
            PageParameters shortUniqRef = WicketUtils.newObjectParameter(model.name,
                  Repository.shortenRefName(entry.getName()));
            item.add(WicketUtils.createDateLabel("branchDate", entry.getDate(), getTimeZone(), getTimeUtils()));
            item.add(new LinkPanel("branchName", "list name", StringUtils.trimString(
                  entry.displayName, 28), LogPage.class, WicketUtils.newObjectParameter(
                  model.name, entry.getName())));
                  entry.displayName, 28), LogPage.class, shortUniqRef));
            String author = entry.getAuthorIdent().getName();
            LinkPanel authorLink = new LinkPanel("branchAuthor", "list", author,
@@ -130,34 +133,32 @@
            String shortMessage = entry.getShortMessage();
            String trimmedMessage = StringUtils.trimString(shortMessage, Constants.LEN_SHORTLOG);
            LinkPanel shortlog = new LinkPanel("branchLog", "list subject", trimmedMessage,
                  CommitPage.class, WicketUtils.newObjectParameter(model.name,
                        entry.getName()));
                  CommitPage.class, shortUniqRef);
            if (!shortMessage.equals(trimmedMessage)) {
               WicketUtils.setHtmlTooltip(shortlog, shortMessage);
               shortlog.setTooltip(shortMessage);
            }
            item.add(shortlog);
            if (maxCount <= 0) {
               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
                     .newObjectParameter(model.name, entry.getName())));
               fragment.add(new BookmarkablePageLink<Void>("metrics", MetricsPage.class,
                     WicketUtils.newObjectParameter(model.name, entry.getName())));
               fragment.add(new BookmarkablePageLink<Void>("log", LogPage.class, shortUniqRef));
               fragment.add(new BookmarkablePageLink<Void>("tree", TreePage.class, shortUniqRef));
               String rawUrl = RawServlet.asLink(getContextUrl(), model.name, Repository.shortenRefName(entry.getName()), null);
               fragment.add(new ExternalLink("raw", rawUrl));
               fragment.add(new BookmarkablePageLink<Void>("metrics", MetricsPage.class, shortUniqRef));
               fragment.add(new ExternalLink("syndication", SyndicationServlet.asLink(
                     getRequest().getRelativePathPrefixToContextRoot(), model.name,
                     entry.getName(), 0)));
                     Repository.shortenRefName(entry.getName()), 0)));
               if (showDelete) {
                  fragment.add(createDeleteBranchLink(model, entry));
               }
               item.add(fragment);
            } else {
               Fragment fragment = new Fragment("branchLinks", "branchPanelLinks", this);
               fragment.add(new BookmarkablePageLink<Void>("log", LogPage.class, WicketUtils
                     .newObjectParameter(model.name, entry.getName())));
               fragment.add(new BookmarkablePageLink<Void>("tree", TreePage.class, WicketUtils
                     .newObjectParameter(model.name, entry.getName())));
               fragment.add(new BookmarkablePageLink<Void>("log", LogPage.class, shortUniqRef));
               fragment.add(new BookmarkablePageLink<Void>("tree", TreePage.class, shortUniqRef));
               String rawUrl = RawServlet.asLink(getContextUrl(), model.name, Repository.shortenRefName(entry.getName()), null);
               fragment.add(new ExternalLink("raw",  rawUrl));
               item.add(fragment);
            }
            WicketUtils.setAlternatingBackground(item, counter);
@@ -189,9 +190,9 @@
         @Override
         public void onClick() {
            Repository r = GitBlit.self().getRepository(repositoryModel.name);
            Repository r = app().repositories().getRepository(repositoryModel.name);
            if (r == null) {
               if (GitBlit.self().isCollectingGarbage(repositoryModel.name)) {
               if (app().repositories().isCollectingGarbage(repositoryModel.name)) {
                  error(MessageFormat.format(getString("gb.busyCollectingGarbage"), repositoryModel.name));
               } else {
                  error(MessageFormat.format("Failed to find repository {0}", repositoryModel.name));
@@ -199,29 +200,35 @@
               return;
            }
            final String branch = entry.getName();
            boolean success = JGitUtils.deleteBranchRef(r, branch);
            if (success) {
               // clear commit cache
               CommitCache.instance().clear(repositoryModel.name, branch);
               // optionally update reflog
               if (RefLogUtils.hasRefLogBranch(r)) {
                  UserModel user = GitBlitWebSession.get().getUser();
                  success = RefLogUtils.deleteRef(user, r, branch);
            Ref ref = null;
            try {
               ref = r.getRef(branch);
               if (ref == null && !branch.startsWith(Constants.R_HEADS)) {
                  ref = r.getRef(Constants.R_HEADS + branch);
               }
            } catch (IOException e) {
            }
            if (ref != null) {
               boolean success = JGitUtils.deleteBranchRef(r, ref.getName());
               if (success) {
                  // clear commit cache
                  CommitCache.instance().clear(repositoryModel.name, branch);
                  // optionally update reflog
                  if (RefLogUtils.hasRefLogBranch(r)) {
                     UserModel user = GitBlitWebSession.get().getUser();
                     RefLogUtils.deleteRef(user, r, ref);
                  }
               }
               if (success) {
                  info(MessageFormat.format("Branch \"{0}\" deleted", branch));
               } else {
                  error(MessageFormat.format("Failed to delete branch \"{0}\"", branch));
               }
            }
            r.close();
            if (success) {
               info(MessageFormat.format("Branch \"{0}\" deleted", branch));
               // redirect to the owning page
               setResponsePage(getPage().getClass(), WicketUtils.newRepositoryParameter(repositoryModel.name));
            }
            else {
               error(MessageFormat.format("Failed to delete branch \"{0}\"", branch));
            }
            // redirect to the owning page
            PageParameters params = WicketUtils.newRepositoryParameter(repositoryModel.name);
            String relativeUrl = urlFor(getPage().getClass(), params).toString();
@@ -229,7 +236,7 @@
            getRequestCycle().setRequestTarget(new RedirectRequestTarget(absoluteUrl));
         }
      };
      deleteLink.add(new JavascriptEventConfirmation("onclick", MessageFormat.format(
            "Delete branch \"{0}\"?", entry.displayName )));
      return deleteLink;