DirCache: Replace isValidPath with DirCacheCheckout.checkValidPath
isValidPath is an older simple form of the validation performed by checkValidPath. Use the latter as it more consistently matches git-core's validation rules. By running the same validation as fsck, callers creating an entry for the DirCache are more likely to learn early they are trying to build trees that will fail fsck. Change-Id: Ibf5ac116097156aa05c18e231bc65c0854932eb1
This commit is contained in:
parent
d8eaf5a395
commit
d547d0c44b
|
@ -49,7 +49,6 @@
|
|||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import org.eclipse.jgit.lib.Constants;
|
||||
import org.eclipse.jgit.lib.FileMode;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
import org.junit.Test;
|
||||
|
@ -71,7 +70,12 @@ public void testIsValidPath() {
|
|||
}
|
||||
|
||||
private static boolean isValidPath(final String path) {
|
||||
return DirCacheEntry.isValidPath(Constants.encode(path));
|
||||
try {
|
||||
DirCacheCheckout.checkValidPath(path);
|
||||
return true;
|
||||
} catch (InvalidPathException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -1274,7 +1274,9 @@ public static void checkValidPath(String path) throws InvalidPathException {
|
|||
}
|
||||
chk.checkPathSegment(bytes, segmentStart, bytes.length);
|
||||
} catch (CorruptObjectException e) {
|
||||
throw new InvalidPathException(e.getMessage());
|
||||
InvalidPathException p = new InvalidPathException(path);
|
||||
p.initCause(e);
|
||||
throw p;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -64,7 +64,6 @@
|
|||
import org.eclipse.jgit.util.IO;
|
||||
import org.eclipse.jgit.util.MutableInteger;
|
||||
import org.eclipse.jgit.util.NB;
|
||||
import org.eclipse.jgit.util.SystemReader;
|
||||
|
||||
/**
|
||||
* A single file (or stage of a file) in a {@link DirCache}.
|
||||
|
@ -265,8 +264,7 @@ public DirCacheEntry(final byte[] newPath) {
|
|||
*/
|
||||
@SuppressWarnings("boxing")
|
||||
public DirCacheEntry(final byte[] newPath, final int stage) {
|
||||
if (!isValidPath(newPath))
|
||||
throw new InvalidPathException(toString(newPath));
|
||||
DirCacheCheckout.checkValidPath(toString(newPath));
|
||||
if (stage < 0 || 3 < stage)
|
||||
throw new IllegalArgumentException(MessageFormat.format(
|
||||
JGitText.get().invalidStageForPath,
|
||||
|
@ -725,36 +723,6 @@ private static String toString(final byte[] path) {
|
|||
return Constants.CHARSET.decode(ByteBuffer.wrap(path)).toString();
|
||||
}
|
||||
|
||||
static boolean isValidPath(final byte[] path) {
|
||||
if (path.length == 0)
|
||||
return false; // empty path is not permitted.
|
||||
|
||||
boolean componentHasChars = false;
|
||||
for (final byte c : path) {
|
||||
switch (c) {
|
||||
case 0:
|
||||
return false; // NUL is never allowed within the path.
|
||||
|
||||
case '/':
|
||||
if (componentHasChars)
|
||||
componentHasChars = false;
|
||||
else
|
||||
return false;
|
||||
break;
|
||||
case '\\':
|
||||
case ':':
|
||||
// Tree's never have a backslash in them, not even on Windows
|
||||
// but even there we regard it as an invalid path
|
||||
if (SystemReader.getInstance().isWindows())
|
||||
return false;
|
||||
//$FALL-THROUGH$
|
||||
default:
|
||||
componentHasChars = true;
|
||||
}
|
||||
}
|
||||
return componentHasChars;
|
||||
}
|
||||
|
||||
static int getMaximumInfoLength(boolean extended) {
|
||||
return extended ? INFO_LEN_EXTENDED : INFO_LEN;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue