]> source.dussan.org Git - jgit.git/commitdiff
Branch normalizer should not normalize already valid branch names 74/90474/2
authorMatthias Sohn <matthias.sohn@sap.com>
Mon, 6 Feb 2017 23:22:57 +0000 (00:22 +0100)
committerMatthias Sohn <matthias.sohn@sap.com>
Mon, 6 Feb 2017 23:24:39 +0000 (00:24 +0100)
Change-Id: Ib746655e32a37c4ad323f1d12ac0817de8fa56cf
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ValidRefNameTest.java
org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java

index 9c85fbe1ea921dcd9ec61f1d5c5b51dece61367a..f069b65f66ccc89d51debc981d758454bda9b65b 100644 (file)
@@ -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"));
+       }
 }
index 6be97ffda6f1dd40ea0e4c3593c4993806ffb6dd..c59224e3aeb701cb378999dce777a777aa4d2c8d 100644 (file)
@@ -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$