Provide more details in exceptions thrown when packfile is invalid
Mention packfile path in exceptions thrown when we detect that a packfile is invalid and make excplicit that corrupt packs are removed from the pack list. Change-Id: I454ada5f8e69307d3f34d1c1b8f3cb87607ddf35 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This commit is contained in:
parent
a8743df19c
commit
57644f23a1
|
@ -162,7 +162,7 @@ public void testPush_UnpackError_TruncatedPack() throws Exception {
|
||||||
try {
|
try {
|
||||||
PacketLineIn pckin = new PacketLineIn(rawin);
|
PacketLineIn pckin = new PacketLineIn(rawin);
|
||||||
assertEquals("unpack error "
|
assertEquals("unpack error "
|
||||||
+ JGitText.get().packfileIsTruncated,
|
+ JGitText.get().packfileIsTruncatedNoParam,
|
||||||
pckin.readString());
|
pckin.readString());
|
||||||
assertEquals("ng refs/objects/A n/a (unpacker error)",
|
assertEquals("ng refs/objects/A n/a (unpacker error)",
|
||||||
pckin.readString());
|
pckin.readString());
|
||||||
|
|
|
@ -146,7 +146,7 @@ couldNotRenameTemporaryIndexFileToIndex=Could not rename temporary index file to
|
||||||
couldNotURLEncodeToUTF8=Could not URL encode to UTF-8
|
couldNotURLEncodeToUTF8=Could not URL encode to UTF-8
|
||||||
couldNotWriteFile=Could not write file {0}
|
couldNotWriteFile=Could not write file {0}
|
||||||
countingObjects=Counting objects
|
countingObjects=Counting objects
|
||||||
corruptPack=Pack file {0} is corrupt
|
corruptPack=Pack file {0} is corrupt, removing it from pack list
|
||||||
createBranchFailedUnknownReason=Create branch failed for unknown reason
|
createBranchFailedUnknownReason=Create branch failed for unknown reason
|
||||||
createBranchUnexpectedResult=Create branch returned unexpected result {0}
|
createBranchUnexpectedResult=Create branch returned unexpected result {0}
|
||||||
createNewFileFailed=Could not create new file {0}
|
createNewFileFailed=Could not create new file {0}
|
||||||
|
@ -381,14 +381,15 @@ openFilesMustBeAtLeast1=Open files must be >= 1
|
||||||
openingConnection=Opening connection
|
openingConnection=Opening connection
|
||||||
operationCanceled=Operation {0} was canceled
|
operationCanceled=Operation {0} was canceled
|
||||||
outputHasAlreadyBeenStarted=Output has already been started.
|
outputHasAlreadyBeenStarted=Output has already been started.
|
||||||
packChecksumMismatch=Pack checksum mismatch
|
packChecksumMismatch=Pack checksum mismatch detected for pack file {0}
|
||||||
packCorruptedWhileWritingToFilesystem=Pack corrupted while writing to filesystem
|
packCorruptedWhileWritingToFilesystem=Pack corrupted while writing to filesystem
|
||||||
packDoesNotMatchIndex=Pack {0} does not match index
|
packDoesNotMatchIndex=Pack {0} does not match index
|
||||||
packetSizeMustBeAtLeast=packet size {0} must be >= {1}
|
packetSizeMustBeAtLeast=packet size {0} must be >= {1}
|
||||||
packetSizeMustBeAtMost=packet size {0} must be <= {1}
|
packetSizeMustBeAtMost=packet size {0} must be <= {1}
|
||||||
packfileCorruptionDetected=Packfile corruption detected: {0}
|
packfileCorruptionDetected=Packfile corruption detected: {0}
|
||||||
packFileInvalid=Pack file invalid: {0}
|
packFileInvalid=Pack file invalid: {0}
|
||||||
packfileIsTruncated=Packfile is truncated.
|
packfileIsTruncated=Packfile {0} is truncated.
|
||||||
|
packfileIsTruncatedNoParam=Packfile is truncated.
|
||||||
packHasUnresolvedDeltas=pack has unresolved deltas
|
packHasUnresolvedDeltas=pack has unresolved deltas
|
||||||
packingCancelledDuringObjectsWriting=Packing cancelled during objects writing
|
packingCancelledDuringObjectsWriting=Packing cancelled during objects writing
|
||||||
packObjectCountMismatch=Pack object count mismatch: pack {0} index {1}: {2}
|
packObjectCountMismatch=Pack object count mismatch: pack {0} index {1}: {2}
|
||||||
|
|
|
@ -448,6 +448,7 @@ public static JGitText get() {
|
||||||
/***/ public String packfileCorruptionDetected;
|
/***/ public String packfileCorruptionDetected;
|
||||||
/***/ public String packFileInvalid;
|
/***/ public String packFileInvalid;
|
||||||
/***/ public String packfileIsTruncated;
|
/***/ public String packfileIsTruncated;
|
||||||
|
/***/ public String packfileIsTruncatedNoParam;
|
||||||
/***/ public String packHasUnresolvedDeltas;
|
/***/ public String packHasUnresolvedDeltas;
|
||||||
/***/ public String packingCancelledDuringObjectsWriting;
|
/***/ public String packingCancelledDuringObjectsWriting;
|
||||||
/***/ public String packObjectCountMismatch;
|
/***/ public String packObjectCountMismatch;
|
||||||
|
|
|
@ -199,7 +199,7 @@ public long getCachedSize() {
|
||||||
return key.cachedSize.get();
|
return key.cachedSize.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getPackName() {
|
String getPackName() {
|
||||||
return packDesc.getFileName(PACK);
|
return packDesc.getFileName(PACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -556,7 +556,8 @@ void copyPackAsIs(DfsPackFile pack, long length, boolean validate,
|
||||||
pin(pack, 0);
|
pin(pack, 0);
|
||||||
if (block.copy(0, buf, 0, 12) != 12) {
|
if (block.copy(0, buf, 0, 12) != 12) {
|
||||||
pack.setInvalid();
|
pack.setInvalid();
|
||||||
throw new IOException(JGitText.get().packfileIsTruncated);
|
throw new IOException(MessageFormat.format(
|
||||||
|
JGitText.get().packfileIsTruncated, pack.getPackName()));
|
||||||
}
|
}
|
||||||
md.update(buf, 0, 12);
|
md.update(buf, 0, 12);
|
||||||
}
|
}
|
||||||
|
@ -580,7 +581,8 @@ void copyPackAsIs(DfsPackFile pack, long length, boolean validate,
|
||||||
pin(pack, position);
|
pin(pack, position);
|
||||||
if (block.copy(position, buf, 0, 20) != 20) {
|
if (block.copy(position, buf, 0, 20) != 20) {
|
||||||
pack.setInvalid();
|
pack.setInvalid();
|
||||||
throw new IOException(JGitText.get().packfileIsTruncated);
|
throw new IOException(MessageFormat.format(
|
||||||
|
JGitText.get().packfileIsTruncated, pack.getPackName()));
|
||||||
}
|
}
|
||||||
if (!Arrays.equals(actHash, buf)) {
|
if (!Arrays.equals(actHash, buf)) {
|
||||||
pack.setInvalid();
|
pack.setInvalid();
|
||||||
|
|
|
@ -169,11 +169,13 @@ private synchronized PackIndex idx() throws IOException {
|
||||||
try {
|
try {
|
||||||
final PackIndex idx = PackIndex.open(extFile(INDEX));
|
final PackIndex idx = PackIndex.open(extFile(INDEX));
|
||||||
|
|
||||||
if (packChecksum == null)
|
if (packChecksum == null) {
|
||||||
packChecksum = idx.packChecksum;
|
packChecksum = idx.packChecksum;
|
||||||
else if (!Arrays.equals(packChecksum, idx.packChecksum))
|
} else if (!Arrays.equals(packChecksum, idx.packChecksum)) {
|
||||||
throw new PackMismatchException(JGitText.get().packChecksumMismatch);
|
throw new PackMismatchException(MessageFormat.format(
|
||||||
|
JGitText.get().packChecksumMismatch,
|
||||||
|
packFile.getPath()));
|
||||||
|
}
|
||||||
loadedIdx = idx;
|
loadedIdx = idx;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
invalid = true;
|
invalid = true;
|
||||||
|
|
|
@ -246,7 +246,9 @@ void copyPackAsIs(final PackFile pack, final long length, boolean validate,
|
||||||
pin(pack, 0);
|
pin(pack, 0);
|
||||||
if (window.copy(0, buf, 0, 12) != 12) {
|
if (window.copy(0, buf, 0, 12) != 12) {
|
||||||
pack.setInvalid();
|
pack.setInvalid();
|
||||||
throw new IOException(JGitText.get().packfileIsTruncated);
|
throw new IOException(MessageFormat.format(
|
||||||
|
JGitText.get().packfileIsTruncated, pack.getPackFile()
|
||||||
|
.getPath()));
|
||||||
}
|
}
|
||||||
md.update(buf, 0, 12);
|
md.update(buf, 0, 12);
|
||||||
}
|
}
|
||||||
|
@ -270,7 +272,9 @@ void copyPackAsIs(final PackFile pack, final long length, boolean validate,
|
||||||
pin(pack, position);
|
pin(pack, position);
|
||||||
if (window.copy(position, buf, 0, 20) != 20) {
|
if (window.copy(position, buf, 0, 20) != 20) {
|
||||||
pack.setInvalid();
|
pack.setInvalid();
|
||||||
throw new IOException(JGitText.get().packfileIsTruncated);
|
throw new IOException(MessageFormat.format(
|
||||||
|
JGitText.get().packfileIsTruncated, pack.getPackFile()
|
||||||
|
.getPath()));
|
||||||
}
|
}
|
||||||
if (!Arrays.equals(actHash, buf)) {
|
if (!Arrays.equals(actHash, buf)) {
|
||||||
pack.setInvalid();
|
pack.setInvalid();
|
||||||
|
|
|
@ -1135,7 +1135,8 @@ private int fill(final Source src, final int need) throws IOException {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (next <= 0)
|
if (next <= 0)
|
||||||
throw new EOFException(JGitText.get().packfileIsTruncated);
|
throw new EOFException(
|
||||||
|
JGitText.get().packfileIsTruncatedNoParam);
|
||||||
bAvail += next;
|
bAvail += next;
|
||||||
}
|
}
|
||||||
return bOffset;
|
return bOffset;
|
||||||
|
|
Loading…
Reference in New Issue