aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Strapetz2010-11-26 05:07:04 (EST)
committerMarc Strapetz2010-11-29 11:14:07 (EST)
commite147fbcd6646f1746073d4d6b8f07ab1ee41b08c (patch)
tree7caaa07e90c8b324161e7e4a2fcbf1bee1af2733
parent7e298c9ed538dd8d5207adce3497b4a1df701dc5 (diff)
downloadjgit-e147fbcd6646f1746073d4d6b8f07ab1ee41b08c.zip
jgit-e147fbcd6646f1746073d4d6b8f07ab1ee41b08c.tar.gz
jgit-e147fbcd6646f1746073d4d6b8f07ab1ee41b08c.tar.bz2
Fix DiffConfig to understand "copy" resp. "copies" for diff.renames property.refs/changes/48/1948/3
Rename detection should be considered enabled if diff.renames config property is set to "copy" or "copies", instead of throwing IllegalArgumentException. Change-Id: If55d955e37235d4d00f5b0febd6aa10c0e27814e
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffConfig.java49
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java49
2 files changed, 79 insertions, 19 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffConfig.java
index 4b86f55..436e606 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/diff/DiffConfig.java
+++ b/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;
+ }
+ }
}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java
index 3759a12..59f3d83 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java
@@ -121,6 +121,28 @@ public final class StringUtils {
}
/**
+ * 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>
* The terms {@code yes}, {@code true}, {@code 1}, {@code on} can all be
@@ -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;
}
/**