Revision: Allow @-sign in ref names
git-check-ref-format(1) explains:
Git imposes the following rules on how references are named:
8. They cannot contain a sequence @{.
9. They cannot be the single character @.
An @-sign in the middle of a ref name is fine and unambiguous,
so allow it.
Noticed in the chromium/chromium/src repo:
https://chromium.googlesource.com/chromium/src/+/refs/experimental/aarontag@chromium.org/cookie_dev_test
produces
Cannot parse URL as a Gitiles URL
instead of showing that ref.
Bug: https://crbug.com/979850
Change-Id: Ie88daf76550e47f2da4e97acaa8081ef15e11831
diff --git a/java/com/google/gitiles/RevisionParser.java b/java/com/google/gitiles/RevisionParser.java
index d530cdd..b736f7f 100644
--- a/java/com/google/gitiles/RevisionParser.java
+++ b/java/com/google/gitiles/RevisionParser.java
@@ -212,7 +212,10 @@
private static boolean isValidRevision(String revision) {
// Disallow some uncommon but valid revision expressions that either we
// don't support or we represent differently in our URLs.
- return !revision.contains(":") && !revision.contains("^{") && !revision.contains("@");
+ return !revision.contains(":")
+ && !revision.contains("^{")
+ && !revision.contains("@{")
+ && !revision.equals("@");
}
private boolean isVisible(RevWalk walk, Result result) throws IOException {
diff --git a/javatests/com/google/gitiles/RevisionParserTest.java b/javatests/com/google/gitiles/RevisionParserTest.java
index a204b61..80781aa 100644
--- a/javatests/com/google/gitiles/RevisionParserTest.java
+++ b/javatests/com/google/gitiles/RevisionParserTest.java
@@ -256,6 +256,14 @@
}
@Test
+ public void parseEmailInRevision() throws Exception {
+ RevCommit c = repo.commit().create();
+ RevCommit experimental = repo.update("refs/experimental/author@example.com/foo", c);
+ assertThat(parser.parse("refs/experimental/author@example.com/foo"))
+ .isEqualTo(new Result(Revision.peeled("refs/experimental/author@example.com/foo", c)));
+ }
+
+ @Test
public void parseMissingSha() throws Exception {
assertThat(parser.parse("deadbeef")).isNull();
assertThat(parser.parse("deadbeefdeadbeefdeadbeefdeadbeefdeadbeef")).isNull();