James Moger
2014-09-11 0625197d132c54e08896447299f7aaea580da537
Preserve refs in commits, tree, & docs navbar links
3 files modified
42 ■■■■■ changed files
src/main/java/com/gitblit/wicket/GitBlitWebApp.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/DocsPage.java 16 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/RepositoryPage.java 24 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/GitBlitWebApp.java
@@ -208,7 +208,7 @@
        mount("/mytickets", MyTicketsPage.class, "r", "h");
        // setup the markup document urls
        mount("/docs", DocsPage.class, "r");
        mount("/docs", DocsPage.class, "r", "h");
        mount("/doc", DocPage.class, "r", "h", "f");
        // federation urls
src/main/java/com/gitblit/wicket/pages/DocsPage.java
@@ -49,11 +49,14 @@
    public DocsPage(PageParameters params) {
        super(params);
        String objectId = WicketUtils.getObject(params);
        MarkupProcessor processor = new MarkupProcessor(app().settings(), app().xssFilter());
        Repository r = getRepository();
        RevCommit head = JGitUtils.getCommit(r, null);
        RevCommit head = JGitUtils.getCommit(r, objectId);
        final String commitId = getBestCommitId(head);
        List<String> extensions = processor.getAllExtensions();
        List<PathModel> paths = JGitUtils.getDocuments(r, extensions);
@@ -127,7 +130,6 @@
        }
        // document list
        final String id = getBestCommitId(head);
        final ByteFormat byteFormat = new ByteFormat();
        Fragment docs = new Fragment("documents", "documentsFragment", this);
        ListDataProvider<PathModel> pathsDp = new ListDataProvider<PathModel>(paths);
@@ -141,17 +143,17 @@
                item.add(WicketUtils.newImage("docIcon", "file_world_16x16.png"));
                item.add(new Label("docSize", byteFormat.format(entry.size)));
                item.add(new LinkPanel("docName", "list", StringUtils.stripFileExtension(entry.name),
                        DocPage.class, WicketUtils.newPathParameter(repositoryName, id, entry.path)));
                        DocPage.class, WicketUtils.newPathParameter(repositoryName, commitId, entry.path)));
                // links
                item.add(new BookmarkablePageLink<Void>("view", DocPage.class, WicketUtils
                        .newPathParameter(repositoryName, id, entry.path)));
                String rawUrl = RawServlet.asLink(getContextUrl(), repositoryName, id, entry.path);
                        .newPathParameter(repositoryName, commitId, entry.path)));
                String rawUrl = RawServlet.asLink(getContextUrl(), repositoryName, commitId, entry.path);
                item.add(new ExternalLink("raw", rawUrl));
                item.add(new BookmarkablePageLink<Void>("blame", BlamePage.class, WicketUtils
                        .newPathParameter(repositoryName, id, entry.path)));
                        .newPathParameter(repositoryName, commitId, entry.path)));
                item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class, WicketUtils
                        .newPathParameter(repositoryName, id, entry.path)));
                        .newPathParameter(repositoryName, commitId, entry.path)));
                WicketUtils.setAlternatingBackground(item, counter);
                counter++;
            }
src/main/java/com/gitblit/wicket/pages/RepositoryPage.java
@@ -191,14 +191,26 @@
    }
    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 (!StringUtils.isEmpty(objectId)) {
                RevCommit commit = JGitUtils.getCommit(r, objectId);
                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 +225,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));
        }
@@ -453,7 +465,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());
            }
        }