Browse Source

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

stable-0.10
Shawn Pearce 14 years ago committed by Code Review
parent
commit
f968cbabcf
  1. 49
      org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffConfig.java
  2. 49
      org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java

49
org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffConfig.java

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

49
org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java

@ -120,6 +120,28 @@ public final class StringUtils {
return true;
}
/**
* Parse a string as a standard Git boolean value. See
* {@link #toBooleanOrNull(String)}.
*
* @param stringValue
* the string to parse.
* @return the boolean interpretation of {@code value}.
* @throws IllegalArgumentException
* if {@code value} is not recognized as one of the standard
* boolean names.
*/
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>
@ -133,30 +155,25 @@ public final class StringUtils {
*
* @param stringValue
* the string to parse.
* @return the boolean interpretation of {@code value}.
* @throws IllegalArgumentException
* if {@code value} is not recognized as one of the standard
* boolean names.
* @return the boolean interpretation of {@code value} or null in case the
* string does not represent a boolean value
*/
public static boolean toBoolean(final String stringValue) {
public static Boolean toBooleanOrNull(final String stringValue) {
if (stringValue == null)
throw new NullPointerException(JGitText.get().expectedBooleanStringValue);
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…
Cancel
Save