| author | Marc Strapetz | 2010-11-26 05:07:04 (EST) |
|---|---|---|
| committer | Marc Strapetz | 2010-11-29 11:14:07 (EST) |
| commit | e147fbcd6646f1746073d4d6b8f07ab1ee41b08c (patch) (side-by-side diff) | |
| tree | 7caaa07e90c8b324161e7e4a2fcbf1bee1af2733 | |
| parent | 7e298c9ed538dd8d5207adce3497b4a1df701dc5 (diff) | |
| download | jgit-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.java | 49 | ||||
| -rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/util/StringUtils.java | 49 |
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; } /** |

