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