@ -4,6 +4,7 @@
* Copyright ( C ) 2006 - 2010 , Robin Rosenberg < robin . rosenberg @dewire.com >
* Copyright ( C ) 2006 - 2010 , Robin Rosenberg < robin . rosenberg @dewire.com >
* Copyright ( C ) 2006 - 2012 , Shawn O . Pearce < spearce @spearce.org >
* Copyright ( C ) 2006 - 2012 , Shawn O . Pearce < spearce @spearce.org >
* Copyright ( C ) 2012 , Daniel Megert < daniel_megert @ch.ibm.com >
* 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 .
* and other copyright owners as documented in the project ' s IP log .
*
*
* This program and the accompanying materials are made available
* This program and the accompanying materials are made available
@ -1887,4 +1888,40 @@ public abstract class Repository implements AutoCloseable {
public void autoGC ( ProgressMonitor monitor ) {
public void autoGC ( ProgressMonitor monitor ) {
// default does nothing
// 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$
}
}
}