From ab1e1148ba6ec2a0e53ff54398173204febc9a4a Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 25 Oct 2013 07:58:23 -0400
Subject: [PATCH] Determine best commit id for the commit and use that in links

---
 src/main/java/com/gitblit/wicket/pages/RepositoryPage.java |   24 ++++++++++++++++++++++++
 src/main/java/com/gitblit/wicket/pages/TreePage.java       |   22 +++++++++++-----------
 releases.moxie                                             |    1 +
 3 files changed, 36 insertions(+), 11 deletions(-)

diff --git a/releases.moxie b/releases.moxie
index df1ecce..b2968a1 100644
--- a/releases.moxie
+++ b/releases.moxie
@@ -25,6 +25,7 @@
 	- Removed internal Gitblit ref exclusions in the upload pack
 	- Removed "show readme" setting in favor of automatic detection
 	- Support plain text "readme" files
+	- Determine best commit id (e.g. "master") for the tree and docs pages and use that in links
     additions:
 	- Added branch graph image servlet based on EGit's branch graph renderer (issue-194)
 	- Added option to render Markdown commit messages (issue-203)
diff --git a/src/main/java/com/gitblit/wicket/pages/RepositoryPage.java b/src/main/java/com/gitblit/wicket/pages/RepositoryPage.java
index b31bc3b..2df0a0e 100644
--- a/src/main/java/com/gitblit/wicket/pages/RepositoryPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/RepositoryPage.java
@@ -399,6 +399,30 @@
 		return commit;
 	}
 
+	protected String getBestCommitId(RevCommit commit) {
+		String head = null;
+		try {
+			head = r.resolve(getRepositoryModel().HEAD).getName();
+		} catch (Exception e) {
+		}
+
+		String id = commit.getName();
+		if (!StringUtils.isEmpty(head) && head.equals(id)) {
+			// match default branch
+			return Repository.shortenRefName(getRepositoryModel().HEAD);
+		}
+
+		// find first branch match
+		for (RefModel ref : JGitUtils.getLocalBranches(r, false, -1)) {
+			if (ref.getObjectId().getName().equals(id)) {
+				return ref.getName();
+			}
+		}
+
+		// return sha
+		return id;
+	}
+
 	protected Map<String, SubmoduleModel> getSubmodules(RevCommit commit) {
 		if (submodules == null) {
 			submodules = new HashMap<String, SubmoduleModel>();
diff --git a/src/main/java/com/gitblit/wicket/pages/TreePage.java b/src/main/java/com/gitblit/wicket/pages/TreePage.java
index 870b75d..df6507f 100644
--- a/src/main/java/com/gitblit/wicket/pages/TreePage.java
+++ b/src/main/java/com/gitblit/wicket/pages/TreePage.java
@@ -76,8 +76,8 @@
 			paths.add(0, model);
 		}
 
+		final String id = getBestCommitId(commit);
 		final ByteFormat byteFormat = new ByteFormat();
-
 		final String baseUrl = WicketUtils.getGitblitURL(getRequest());
 
 		// changed paths list
@@ -96,7 +96,7 @@
 					item.add(new Label("pathSize", ""));
 					item.add(new LinkPanel("pathName", null, entry.name, TreePage.class,
 							WicketUtils
-									.newPathParameter(repositoryName, entry.commitId, entry.path)));
+									.newPathParameter(repositoryName, id, entry.path)));
 					item.add(new Label("pathLinks", ""));
 				} else {
 					if (entry.isTree()) {
@@ -104,16 +104,16 @@
 						item.add(WicketUtils.newImage("pathIcon", "folder_16x16.png"));
 						item.add(new Label("pathSize", ""));
 						item.add(new LinkPanel("pathName", "list", entry.name, TreePage.class,
-								WicketUtils.newPathParameter(repositoryName, entry.commitId,
+								WicketUtils.newPathParameter(repositoryName, id,
 										entry.path)));
 
 						// links
 						Fragment links = new Fragment("pathLinks", "treeLinks", this);
 						links.add(new BookmarkablePageLink<Void>("tree", TreePage.class,
-								WicketUtils.newPathParameter(repositoryName, entry.commitId,
+								WicketUtils.newPathParameter(repositoryName, id,
 										entry.path)));
 						links.add(new BookmarkablePageLink<Void>("history", HistoryPage.class,
-								WicketUtils.newPathParameter(repositoryName, entry.commitId,
+								WicketUtils.newPathParameter(repositoryName, id,
 										entry.path)));
 						links.add(new CompressedDownloadsPanel("compressedLinks", baseUrl,
 								repositoryName, objectId, entry.path));
@@ -141,7 +141,7 @@
 								WicketUtils.newPathParameter(submodulePath, submoduleId,
 										"")).setEnabled(hasSubmodule));
 						links.add(new BookmarkablePageLink<Void>("history", HistoryPage.class,
-								WicketUtils.newPathParameter(repositoryName, entry.commitId,
+								WicketUtils.newPathParameter(repositoryName, id,
 										entry.path)));
 						links.add(new CompressedDownloadsPanel("compressedLinks", baseUrl,
 								submodulePath, submoduleId, "").setEnabled(hasSubmodule));
@@ -157,21 +157,21 @@
 						item.add(WicketUtils.getFileImage("pathIcon", entry.name));
 						item.add(new Label("pathSize", byteFormat.format(entry.size)));
 						item.add(new LinkPanel("pathName", "list", displayPath, BlobPage.class,
-								WicketUtils.newPathParameter(repositoryName, entry.commitId,
+								WicketUtils.newPathParameter(repositoryName, id,
 										path)));
 
 						// links
 						Fragment links = new Fragment("pathLinks", "blobLinks", this);
 						links.add(new BookmarkablePageLink<Void>("view", BlobPage.class,
-								WicketUtils.newPathParameter(repositoryName, entry.commitId,
+								WicketUtils.newPathParameter(repositoryName, id,
 										path)));
 						links.add(new BookmarkablePageLink<Void>("raw", RawPage.class, WicketUtils
-								.newPathParameter(repositoryName, entry.commitId, path)));
+								.newPathParameter(repositoryName, id, path)));
 						links.add(new BookmarkablePageLink<Void>("blame", BlamePage.class,
-								WicketUtils.newPathParameter(repositoryName, entry.commitId,
+								WicketUtils.newPathParameter(repositoryName, id,
 										path)));
 						links.add(new BookmarkablePageLink<Void>("history", HistoryPage.class,
-								WicketUtils.newPathParameter(repositoryName, entry.commitId,
+								WicketUtils.newPathParameter(repositoryName, id,
 										path)));
 						item.add(links);
 					}

--
Gitblit v1.9.1