Merge "Fix DiffConfig to understand "copy" resp. "copies" for diff.renames property."
This commit is contained in:
commit
f968cbabcf
|
@ -43,8 +43,12 @@
|
|||
|
||||
package org.eclipse.jgit.diff;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
|
||||
import org.eclipse.jgit.JGitText;
|
||||
import org.eclipse.jgit.lib.Config;
|
||||
import org.eclipse.jgit.lib.Config.SectionParser;
|
||||
import org.eclipse.jgit.util.StringUtils;
|
||||
|
||||
/** Keeps track of diff related configuration options. */
|
||||
public class DiffConfig {
|
||||
|
@ -55,15 +59,28 @@ public DiffConfig parse(final Config cfg) {
|
|||
}
|
||||
};
|
||||
|
||||
/** Permissible values for {@code diff.renames}. */
|
||||
public static enum RenameDetectionType {
|
||||
/** Rename detection is disabled. */
|
||||
FALSE,
|
||||
|
||||
/** Rename detection is enabled. */
|
||||
TRUE,
|
||||
|
||||
/** Copies should be detected too. */
|
||||
COPY
|
||||
}
|
||||
|
||||
private final boolean noPrefix;
|
||||
|
||||
private final boolean renames;
|
||||
private final RenameDetectionType renameDetectionType;
|
||||
|
||||
private final int renameLimit;
|
||||
|
||||
private DiffConfig(final Config rc) {
|
||||
noPrefix = rc.getBoolean("diff", "noprefix", false);
|
||||
renames = rc.getBoolean("diff", "renames", false);
|
||||
renameDetectionType = parseRenameDetectionType(rc.getString("diff",
|
||||
null, "renames"));
|
||||
renameLimit = rc.getInt("diff", "renamelimit", 200);
|
||||
}
|
||||
|
||||
|
@ -74,11 +91,37 @@ public boolean isNoPrefix() {
|
|||
|
||||
/** @return true if rename detection is enabled by default. */
|
||||
public boolean isRenameDetectionEnabled() {
|
||||
return renames;
|
||||
return renameDetectionType != RenameDetectionType.FALSE;
|
||||
}
|
||||
|
||||
/** @return type of rename detection to perform. */
|
||||
public RenameDetectionType getRenameDetectionType() {
|
||||
return renameDetectionType;
|
||||
}
|
||||
|
||||
/** @return limit on number of paths to perform inexact rename detection. */
|
||||
public int getRenameLimit() {
|
||||
return renameLimit;
|
||||
}
|
||||
|
||||
private static RenameDetectionType parseRenameDetectionType(
|
||||
final String renameString) {
|
||||
if (renameString == null)
|
||||
return RenameDetectionType.FALSE;
|
||||
else if (StringUtils.equalsIgnoreCase("copy", renameString)
|
||||
|| StringUtils.equalsIgnoreCase("copies", renameString))
|
||||
return RenameDetectionType.COPY;
|
||||
else {
|
||||
final Boolean renameBoolean = StringUtils
|
||||
.toBooleanOrNull(renameString);
|
||||
if (renameBoolean == null)
|
||||
throw new IllegalArgumentException(MessageFormat.format(
|
||||
JGitText.get().enumValueNotSupported2, "diff",
|
||||
"renames", renameString));
|
||||
else if (renameBoolean.booleanValue())
|
||||
return RenameDetectionType.TRUE;
|
||||
else
|
||||
return RenameDetectionType.FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -121,15 +121,8 @@ public static boolean equalsIgnoreCase(final String a, final String b) {
|
|||
}
|
||||
|
||||
/**
|
||||
* Parse a string as a standard Git boolean value.
|
||||
* <p>
|
||||
* The terms {@code yes}, {@code true}, {@code 1}, {@code on} can all be
|
||||
* used to mean {@code true}.
|
||||
* <p>
|
||||
* The terms {@code no}, {@code false}, {@code 0}, {@code off} can all be
|
||||
* used to mean {@code false}.
|
||||
* <p>
|
||||
* Comparisons ignore case, via {@link #equalsIgnoreCase(String, String)}.
|
||||
* Parse a string as a standard Git boolean value. See
|
||||
* {@link #toBooleanOrNull(String)}.
|
||||
*
|
||||
* @param stringValue
|
||||
* the string to parse.
|
||||
|
@ -142,21 +135,45 @@ public static boolean toBoolean(final String stringValue) {
|
|||
if (stringValue == null)
|
||||
throw new NullPointerException(JGitText.get().expectedBooleanStringValue);
|
||||
|
||||
final Boolean bool = toBooleanOrNull(stringValue);
|
||||
if (bool == null)
|
||||
throw new IllegalArgumentException(MessageFormat.format(JGitText.get().notABoolean, stringValue));
|
||||
|
||||
return bool.booleanValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a string as a standard Git boolean value.
|
||||
* <p>
|
||||
* The terms {@code yes}, {@code true}, {@code 1}, {@code on} can all be
|
||||
* used to mean {@code true}.
|
||||
* <p>
|
||||
* The terms {@code no}, {@code false}, {@code 0}, {@code off} can all be
|
||||
* used to mean {@code false}.
|
||||
* <p>
|
||||
* Comparisons ignore case, via {@link #equalsIgnoreCase(String, String)}.
|
||||
*
|
||||
* @param stringValue
|
||||
* the string to parse.
|
||||
* @return the boolean interpretation of {@code value} or null in case the
|
||||
* string does not represent a boolean value
|
||||
*/
|
||||
public static Boolean toBooleanOrNull(final String stringValue) {
|
||||
if (stringValue == null)
|
||||
return null;
|
||||
|
||||
if (equalsIgnoreCase("yes", stringValue)
|
||||
|| equalsIgnoreCase("true", stringValue)
|
||||
|| equalsIgnoreCase("1", stringValue)
|
||||
|| equalsIgnoreCase("on", stringValue)) {
|
||||
return true;
|
||||
|
||||
} else if (equalsIgnoreCase("no", stringValue)
|
||||
|| equalsIgnoreCase("on", stringValue))
|
||||
return Boolean.TRUE;
|
||||
else if (equalsIgnoreCase("no", stringValue)
|
||||
|| equalsIgnoreCase("false", stringValue)
|
||||
|| equalsIgnoreCase("0", stringValue)
|
||||
|| equalsIgnoreCase("off", stringValue)) {
|
||||
return false;
|
||||
|
||||
} else {
|
||||
throw new IllegalArgumentException(MessageFormat.format(JGitText.get().notABoolean, stringValue));
|
||||
}
|
||||
|| equalsIgnoreCase("off", stringValue))
|
||||
return Boolean.FALSE;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue