Normalizer creating a valid branch name from a string
Generic normalization method for a possible invalid branch name. The method compresses dividers between spaces, then replaces spaces and non word characters with underscores. This method is needed in preparation for subsequent EGit changes. Bug: 509878 Change-Id: Ic0d12f098f90f912a45bcc5693d6accf751d4e58 Signed-off-by: Wim Jongman <wim.jongman@remainsoftware.com>
This commit is contained in:
parent
8a46b60371
commit
b667c182cb
|
@ -247,4 +247,86 @@ public void testWindowsReservedNames() {
|
|||
assertValid(true, "refs/heads/conx");
|
||||
assertValid(true, "refs/heads/xcon");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNormalizeBranchName() {
|
||||
|
||||
assertEquals(true, Repository.normalizeBranchName("").equals(""));
|
||||
|
||||
assertEquals(true,
|
||||
Repository.normalizeBranchName("__@#$@#$@$____ _")
|
||||
.equals(""));
|
||||
|
||||
assertEquals(true,
|
||||
Repository.normalizeBranchName("~`!@#$%^&*()_+}]{[|\\\";?>.<,/")
|
||||
.equals(""));
|
||||
|
||||
assertEquals(true,
|
||||
Repository.normalizeBranchName("Bug 12345 :::: Hello World")
|
||||
.equals("Bug_12345-Hello_World"));
|
||||
|
||||
assertEquals(true,
|
||||
Repository.normalizeBranchName("Bug 12345 :::: Hello::: World")
|
||||
.equals("Bug_12345-Hello-_World"));
|
||||
|
||||
assertEquals(true,
|
||||
Repository.normalizeBranchName(":::Bug 12345 - Hello World")
|
||||
.equals("Bug_12345-Hello_World"));
|
||||
|
||||
assertEquals(true,
|
||||
Repository.normalizeBranchName("---Bug 12345 - Hello World")
|
||||
.equals("Bug_12345-Hello_World"));
|
||||
|
||||
assertEquals(true,
|
||||
Repository.normalizeBranchName("Bug 12345 ---- Hello --- World")
|
||||
.equals("Bug_12345-Hello-World"));
|
||||
|
||||
assertEquals(true, Repository.normalizeBranchName(null) == null);
|
||||
|
||||
assertEquals(true,
|
||||
Repository.normalizeBranchName("Bug 12345 - Hello World!")
|
||||
.equals("Bug_12345-Hello_World"));
|
||||
|
||||
assertEquals(true,
|
||||
Repository.normalizeBranchName("Bug 12345 : Hello World!")
|
||||
.equals("Bug_12345-Hello_World"));
|
||||
|
||||
assertEquals(true,
|
||||
Repository.normalizeBranchName("Bug 12345 _ Hello World!")
|
||||
.equals("Bug_12345_Hello_World"));
|
||||
|
||||
assertEquals(true,
|
||||
Repository
|
||||
.normalizeBranchName("Bug 12345 - Hello World!")
|
||||
.equals("Bug_12345-Hello_World"));
|
||||
|
||||
assertEquals(true,
|
||||
Repository.normalizeBranchName(" Bug 12345 - Hello World! ")
|
||||
.equals("Bug_12345-Hello_World"));
|
||||
|
||||
assertEquals(true,
|
||||
Repository
|
||||
.normalizeBranchName(" Bug 12345 - Hello World! ")
|
||||
.equals("Bug_12345-Hello_World"));
|
||||
|
||||
assertEquals(true,
|
||||
Repository
|
||||
.normalizeBranchName(
|
||||
"Bug 12345 - Hello______ World!")
|
||||
.equals("Bug_12345-Hello_World"));
|
||||
|
||||
assertEquals(true,
|
||||
Repository.normalizeBranchName("_Bug 12345 - Hello World!")
|
||||
.equals("Bug_12345-Hello_World"));
|
||||
|
||||
assertEquals(true,
|
||||
Repository
|
||||
.normalizeBranchName(
|
||||
"Bug 12345 - Hello Wo!@#$%^&*(rld {@")
|
||||
.equals("Bug_12345-Hello_World_"));
|
||||
|
||||
assertEquals(true,
|
||||
Repository.normalizeBranchName("Bug 1#$ 2345 - Hello World")
|
||||
.equals("Bug_12345-Hello_World"));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
* Copyright (C) 2006-2010, Robin Rosenberg <robin.rosenberg@dewire.com>
|
||||
* Copyright (C) 2006-2012, Shawn O. Pearce <spearce@spearce.org>
|
||||
* Copyright (C) 2012, Daniel Megert <daniel_megert@ch.ibm.com>
|
||||
* Copyright (C) 2017, Wim Jongman <wim.jongman@remainsoftware.com>
|
||||
* and other copyright owners as documented in the project's IP log.
|
||||
*
|
||||
* This program and the accompanying materials are made available
|
||||
|
@ -1887,4 +1888,40 @@ public Set<String> getRemoteNames() {
|
|||
public void autoGC(ProgressMonitor monitor) {
|
||||
// default does nothing
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes the passed branch name into a possible valid branch name. The
|
||||
* validity of the returned name should be checked by a subsequent call to
|
||||
* {@link #isValidRefName(String)}.
|
||||
* <p/>
|
||||
* 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.
|
||||
*
|
||||
* @param name
|
||||
* The name to normalize.
|
||||
*
|
||||
* @return The normalized String or null if null was passed.
|
||||
* @since 4.7
|
||||
* @see #isValidRefName(String)
|
||||
*/
|
||||
public static String normalizeBranchName(String name) {
|
||||
if (name == null || name.length() == 0) {
|
||||
return name;
|
||||
}
|
||||
String result = name.trim();
|
||||
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$
|
||||
.replaceAll("_{2,}", "_") //$NON-NLS-1$//$NON-NLS-2$
|
||||
.replaceAll("-{2,}", "-") //$NON-NLS-1$//$NON-NLS-2$
|
||||
.replaceAll("[^\\w-]", "") //$NON-NLS-1$ //$NON-NLS-2$
|
||||
.replaceAll("^_+", "") //$NON-NLS-1$//$NON-NLS-2$
|
||||
.replaceAll("^-+", ""); //$NON-NLS-1$//$NON-NLS-2$
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue