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"));
+ }
}
* 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
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$
+ }
}