Merge "Fix DiffConfig to understand "copy" resp. "copies" for diff.renames property."

This commit is contained in:
Shawn Pearce 2010-11-29 17:59:15 -05:00 committed by Code Review
commit f968cbabcf
2 changed files with 82 additions and 22 deletions

View File

@ -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;
}
}
}

View File

@ -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;
}
/**