Browse Source

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

Rename detection should be considered enabled if
diff.renames config property is set to "copy" or "copies", instead of
throwing IllegalArgumentException.

Change-Id: If55d955e37235d4d00f5b0febd6aa10c0e27814e
stable-0.10
Marc Strapetz 14 years ago
parent
commit
e147fbcd66
  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; 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;
import org.eclipse.jgit.lib.Config.SectionParser; import org.eclipse.jgit.lib.Config.SectionParser;
import org.eclipse.jgit.util.StringUtils;
/** Keeps track of diff related configuration options. */ /** Keeps track of diff related configuration options. */
public class DiffConfig { 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 noPrefix;
private final boolean renames; private final RenameDetectionType renameDetectionType;
private final int renameLimit; private final int renameLimit;
private DiffConfig(final Config rc) { private DiffConfig(final Config rc) {
noPrefix = rc.getBoolean("diff", "noprefix", false); 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); renameLimit = rc.getInt("diff", "renamelimit", 200);
} }
@ -74,11 +91,37 @@ public class DiffConfig {
/** @return true if rename detection is enabled by default. */ /** @return true if rename detection is enabled by default. */
public boolean isRenameDetectionEnabled() { 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. */ /** @return limit on number of paths to perform inexact rename detection. */
public int getRenameLimit() { public int getRenameLimit() {
return renameLimit; 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; 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. * Parse a string as a standard Git boolean value.
* <p> * <p>
@ -133,30 +155,25 @@ public final class StringUtils {
* *
* @param stringValue * @param stringValue
* the string to parse. * the string to parse.
* @return the boolean interpretation of {@code value}. * @return the boolean interpretation of {@code value} or null in case the
* @throws IllegalArgumentException * string does not represent a boolean value
* if {@code value} is not recognized as one of the standard
* boolean names.
*/ */
public static boolean toBoolean(final String stringValue) { public static Boolean toBooleanOrNull(final String stringValue) {
if (stringValue == null) if (stringValue == null)
throw new NullPointerException(JGitText.get().expectedBooleanStringValue); return null;
if (equalsIgnoreCase("yes", stringValue) if (equalsIgnoreCase("yes", stringValue)
|| equalsIgnoreCase("true", stringValue) || equalsIgnoreCase("true", stringValue)
|| equalsIgnoreCase("1", stringValue) || equalsIgnoreCase("1", stringValue)
|| equalsIgnoreCase("on", stringValue)) { || equalsIgnoreCase("on", stringValue))
return true; return Boolean.TRUE;
else if (equalsIgnoreCase("no", stringValue)
} else if (equalsIgnoreCase("no", stringValue)
|| equalsIgnoreCase("false", stringValue) || equalsIgnoreCase("false", stringValue)
|| equalsIgnoreCase("0", stringValue) || equalsIgnoreCase("0", stringValue)
|| equalsIgnoreCase("off", stringValue)) { || equalsIgnoreCase("off", stringValue))
return false; return Boolean.FALSE;
else
} else { return null;
throw new IllegalArgumentException(MessageFormat.format(JGitText.get().notABoolean, stringValue));
}
} }
/** /**

Loading…
Cancel
Save