Fix missing reference name in JSON output After I088ef448, the name of the ref was transmitted as an empty string via JSON when the exact path of a reference was specified. Fix this regression by not removing the path prefix for exactly matched refs and add a test for it. This fix only tries to establish the behavior prior to I088ef448. Even previously, it was a bit peculiar: Branch names are truncated in the JSON output when multiple refs are found for a given ref name. This doesn't happen when text output is chosen or only a single ref is found. Change-Id: I82ac61e4eb6812404566a393dd6e60c829d5cd97
diff --git a/java/com/google/gitiles/RefServlet.java b/java/com/google/gitiles/RefServlet.java index 8434c86..8a199a6 100644 --- a/java/com/google/gitiles/RefServlet.java +++ b/java/com/google/gitiles/RefServlet.java
@@ -212,7 +212,7 @@ path = Constants.R_REFS + path; Ref singleRef = refdb.exactRef(path); if (singleRef != null) { - return new RefsResult(path, ImmutableList.of(singleRef)); + return new RefsResult("", ImmutableList.of(singleRef)); } path = path + '/'; return new RefsResult(path, refdb.getRefsByPrefix(path));
diff --git a/javatests/com/google/gitiles/RefServletTest.java b/javatests/com/google/gitiles/RefServletTest.java index daaa52e..b0c0929 100644 --- a/javatests/com/google/gitiles/RefServletTest.java +++ b/javatests/com/google/gitiles/RefServletTest.java
@@ -146,6 +146,18 @@ } @Test + public void singleHeadJson() throws Exception { + setUpSimpleRefs(); + Map<String, RefJsonData> result = buildRefJson("/repo/+refs/heads/master"); + + assertThat(result.keySet()).containsExactly("refs/heads/master"); + RefJsonData master = result.get("refs/heads/master"); + assertThat(master.value).isEqualTo(id("refs/heads/master")); + assertThat(master.peeled).isNull(); + assertThat(master.target).isNull(); + } + + @Test public void singlePeeledTagText() throws Exception { setUpSimpleRefs(); FakeHttpServletResponse res = buildText("/repo/+refs/tags/atag");