James Moger
2015-03-07 d40a44c8c8df8f6bd81c93e72314224f85656f18
src/main/java/com/gitblit/wicket/pages/RepositoryPage.java
@@ -73,6 +73,7 @@
import com.gitblit.wicket.panels.LinkPanel;
import com.gitblit.wicket.panels.NavigationPanel;
import com.gitblit.wicket.panels.RefsPanel;
import com.google.common.base.Optional;
public abstract class RepositoryPage extends RootPage {
@@ -191,14 +192,28 @@
   }
   private List<NavLink> registerNavLinks() {
      Repository r = getRepository();
      RepositoryModel model = getRepositoryModel();
      PageParameters params = null;
      PageParameters objectParams = null;
      if (!StringUtils.isEmpty(repositoryName)) {
         params = WicketUtils.newRepositoryParameter(getRepositoryName());
         objectParams = params;
         // preserve the objectid iff the objectid directly (or indirectly) refers to a ref
         if (isCommitPage() && !StringUtils.isEmpty(objectId)) {
            RevCommit commit = JGitUtils.getCommit(r, objectId);
            if (commit != null) {
               String bestId = getBestCommitId(commit);
               if (!commit.getName().equals(bestId)) {
                  objectParams = WicketUtils.newObjectParameter(getRepositoryName(), bestId);
               }
            }
         }
      }
      List<NavLink> navLinks = new ArrayList<NavLink>();
      Repository r = getRepository();
      RepositoryModel model = getRepositoryModel();
      // standard links
      if (RefLogUtils.getRefLogBranch(r) == null) {
@@ -213,13 +228,13 @@
         return navLinks;
      }
      navLinks.add(new PageNavLink("gb.commits", LogPage.class, params));
      navLinks.add(new PageNavLink("gb.tree", TreePage.class, params));
      navLinks.add(new PageNavLink("gb.commits", LogPage.class, objectParams));
      navLinks.add(new PageNavLink("gb.tree", TreePage.class, objectParams));
      if (app().tickets().isReady() && (app().tickets().isAcceptingNewTickets(model) || app().tickets().hasTickets(model))) {
         PageParameters tParams = WicketUtils.newOpenTicketsParameter(getRepositoryName());
         navLinks.add(new PageNavLink("gb.tickets", TicketsPage.class, tParams));
      }
      navLinks.add(new PageNavLink("gb.docs", DocsPage.class, params, true));
      navLinks.add(new PageNavLink("gb.docs", DocsPage.class, objectParams, true));
      if (app().settings().getBoolean(Keys.web.allowForking, true)) {
         navLinks.add(new PageNavLink("gb.forks", ForksPage.class, params, true));
      }
@@ -281,25 +296,38 @@
      RepositoryModel model = getRepositoryModel();
      if (StringUtils.isEmpty(model.originRepository)) {
         if (model.isMirror) {
            add(new Fragment("repoIcon", "mirrorIconFragment", this));
            Fragment mirrorFrag = new Fragment("originRepository", "mirrorFragment", this);
            Label lbl = new Label("originRepository", MessageFormat.format(getString("gb.mirrorOf"), "<b>" + model.origin + "</b>"));
            mirrorFrag.add(lbl.setEscapeModelStrings(false));
            add(mirrorFrag);
         } else {
            add(new Label("originRepository").setVisible(false));
            if (model.isBare) {
               add(new Fragment("repoIcon", "repoIconFragment", this));
            } else {
               add(new Fragment("repoIcon", "cloneIconFragment", this));
            }
            add(new Label("originRepository", Optional.of(model.description).or("")));
         }
      } else {
         RepositoryModel origin = app().repositories().getRepositoryModel(model.originRepository);
         if (origin == null) {
            // no origin repository
            add(new Label("originRepository").setVisible(false));
            // no origin repository, show description if available
            if (model.isBare) {
               add(new Fragment("repoIcon", "repoIconFragment", this));
            } else {
               add(new Fragment("repoIcon", "cloneIconFragment", this));
            }
            add(new Label("originRepository", Optional.of(model.description).or("")));
         } else if (!user.canView(origin)) {
            // show origin repository without link
            add(new Fragment("repoIcon", "forkIconFragment", this));
            Fragment forkFrag = new Fragment("originRepository", "originFragment", this);
            forkFrag.add(new Label("originRepository", StringUtils.stripDotGit(model.originRepository)));
            add(forkFrag);
         } else {
            // link to origin repository
            add(new Fragment("repoIcon", "forkIconFragment", this));
            Fragment forkFrag = new Fragment("originRepository", "originFragment", this);
            forkFrag.add(new LinkPanel("originRepository", null, StringUtils.stripDotGit(model.originRepository),
                  SummaryPage.class, WicketUtils.newRepositoryParameter(model.originRepository)));
@@ -453,7 +481,7 @@
      // find first branch match
      for (RefModel ref : JGitUtils.getLocalBranches(r, false, -1)) {
         if (ref.getObjectId().getName().equals(id)) {
            return ref.getName();
            return Repository.shortenRefName(ref.getName());
         }
      }
@@ -562,6 +590,10 @@
   protected abstract String getPageName();
   protected boolean isCommitPage() {
      return false;
   }
   protected Component createPersonPanel(String wicketId, PersonIdent identity,
         Constants.SearchType searchType) {
      String name = identity == null ? "" : identity.getName();