summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Sohn <matthias.sohn@sap.com>2017-02-07 00:22:57 +0100
committerMatthias Sohn <matthias.sohn@sap.com>2017-02-07 00:24:39 +0100
commitf8d232213cb502214dc7d490b1bc612f88f0635f (patch)
tree18a163c99d625d5b9a788f9f6dd540de90a967c3
parentd4bd09b78daa733933a15733bc6ebbaa0a0485f1 (diff)
downloadjgit-f8d232213cb502214dc7d490b1bc612f88f0635f.tar.gz
jgit-f8d232213cb502214dc7d490b1bc612f88f0635f.zip
Branch normalizer should not normalize already valid branch names
Change-Id: Ib746655e32a37c4ad323f1d12ac0817de8fa56cf Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ValidRefNameTest.java14
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java16
2 files changed, 25 insertions, 5 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ValidRefNameTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ValidRefNameTest.java
index 9c85fbe1ea..f069b65f66 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ValidRefNameTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ValidRefNameTest.java
@@ -329,4 +329,18 @@ public class ValidRefNameTest {
Repository.normalizeBranchName("Bug 1#$ 2345 - Hello World")
.equals("Bug_12345-Hello_World"));
}
+
+ @Test
+ public void testNormalizeAlreadyValidRefName() {
+ assertEquals(true,
+ Repository.normalizeBranchName("refs/heads/m.a.s.t.e.r")
+ .equals("refs/heads/m.a.s.t.e.r"));
+ }
+
+ @Test
+ public void testNormalizeTrimmedUnicodeAlreadyValidRefName() {
+ assertEquals(true,
+ Repository.normalizeBranchName(" \u00e5ngstr\u00f6m\t")
+ .equals("\u00e5ngstr\u00f6m"));
+ }
}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java
index 6be97ffda6..c59224e3ae 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java
@@ -1898,11 +1898,12 @@ public abstract class Repository implements AutoCloseable {
* Future implementations of this method could be more restrictive or more
* lenient about the validity of specific characters in the returned name.
* <p/>
- * The current implementation returns a trimmed string only containing word
- * characters ([a-zA-Z_0-9]) and hyphens ('-'). Colons are replaced by
- * hyphens. Repeating underscores and hyphens are replaced by a single
- * occurrence. Underscores and hyphens at the beginning of the string are
- * removed.
+ * The current implementation returns the trimmed input string if this is
+ * already a valid branch name. Otherwise it returns a trimmed string only
+ * containing word characters ([a-zA-Z_0-9]) and hyphens ('-'). Colons are
+ * replaced by hyphens. Repeating underscores and hyphens are replaced by a
+ * single occurrence. Underscores and hyphens at the beginning of the string
+ * are removed.
*
* @param name
* The name to normalize.
@@ -1916,6 +1917,11 @@ public abstract class Repository implements AutoCloseable {
return name;
}
String result = name.trim();
+ String fullName = result.startsWith(Constants.R_HEADS) ? result
+ : Constants.R_HEADS + result;
+ if (isValidRefName(fullName)) {
+ return result;
+ }
return result.replaceAll("\\s+([_:-])*?\\s+", "$1") //$NON-NLS-1$//$NON-NLS-2$
.replaceAll(":", "-") //$NON-NLS-1$//$NON-NLS-2$
.replaceAll("\\s+", "_") //$NON-NLS-1$//$NON-NLS-2$