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