Browse Source

Branch normalizer should not normalize already valid branch names

Change-Id: Ib746655e32a37c4ad323f1d12ac0817de8fa56cf
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
stable-4.7
Matthias Sohn 8 years ago
parent
commit
f8d232213c
  1. 14
      org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ValidRefNameTest.java
  2. 16
      org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java

14
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"));
}
}

16
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$

Loading…
Cancel
Save