diff options
author | Matthias Sohn <matthias.sohn@sap.com> | 2015-02-10 18:23:14 +0100 |
---|---|---|
committer | Matthias Sohn <matthias.sohn@sap.com> | 2015-02-17 14:13:22 +0100 |
commit | 57644f23a1481cb6be0e3e9515b62ff1be028f78 (patch) | |
tree | 14712e0c78516dcedfe05d0b4ef3c208f8f540f8 | |
parent | a8743df19c2574bc3481fa5f811499b5960951a8 (diff) | |
download | jgit-57644f23a1481cb6be0e3e9515b62ff1be028f78.tar.gz jgit-57644f23a1481cb6be0e3e9515b62ff1be028f78.zip |
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>
8 files changed, 25 insertions, 14 deletions
diff --git a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/ProtocolErrorTest.java b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/ProtocolErrorTest.java index 2823b34b1f..68c5a3a439 100644 --- a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/ProtocolErrorTest.java +++ b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/ProtocolErrorTest.java @@ -162,7 +162,7 @@ public class ProtocolErrorTest extends HttpTestCase { try { PacketLineIn pckin = new PacketLineIn(rawin); assertEquals("unpack error " - + JGitText.get().packfileIsTruncated, + + JGitText.get().packfileIsTruncatedNoParam, pckin.readString()); assertEquals("ng refs/objects/A n/a (unpacker error)", pckin.readString()); diff --git a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties index efe61052b0..66b14bb7a3 100644 --- a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties +++ b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties @@ -146,7 +146,7 @@ couldNotRenameTemporaryIndexFileToIndex=Could not rename temporary index file to couldNotURLEncodeToUTF8=Could not URL encode to UTF-8 couldNotWriteFile=Could not write file {0} 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 createBranchUnexpectedResult=Create branch returned unexpected result {0} createNewFileFailed=Could not create new file {0} @@ -381,14 +381,15 @@ openFilesMustBeAtLeast1=Open files must be >= 1 openingConnection=Opening connection operationCanceled=Operation {0} was canceled 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 packDoesNotMatchIndex=Pack {0} does not match index packetSizeMustBeAtLeast=packet size {0} must be >= {1} packetSizeMustBeAtMost=packet size {0} must be <= {1} packfileCorruptionDetected=Packfile corruption detected: {0} packFileInvalid=Pack file invalid: {0} -packfileIsTruncated=Packfile is truncated. +packfileIsTruncated=Packfile {0} is truncated. +packfileIsTruncatedNoParam=Packfile is truncated. packHasUnresolvedDeltas=pack has unresolved deltas packingCancelledDuringObjectsWriting=Packing cancelled during objects writing packObjectCountMismatch=Pack object count mismatch: pack {0} index {1}: {2} diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java index 8c81c95134..0300af197f 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java @@ -448,6 +448,7 @@ public class JGitText extends TranslationBundle { /***/ public String packfileCorruptionDetected; /***/ public String packFileInvalid; /***/ public String packfileIsTruncated; + /***/ public String packfileIsTruncatedNoParam; /***/ public String packHasUnresolvedDeltas; /***/ public String packingCancelledDuringObjectsWriting; /***/ public String packObjectCountMismatch; diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFile.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFile.java index 7c4776ea06..d5e1a582ce 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFile.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFile.java @@ -199,7 +199,7 @@ public final class DfsPackFile { return key.cachedSize.get(); } - private String getPackName() { + String getPackName() { return packDesc.getFileName(PACK); } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReader.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReader.java index 37dbc7ea7e..4cf7cbefce 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReader.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReader.java @@ -556,7 +556,8 @@ public final class DfsReader extends ObjectReader implements ObjectReuseAsIs { pin(pack, 0); if (block.copy(0, buf, 0, 12) != 12) { pack.setInvalid(); - throw new IOException(JGitText.get().packfileIsTruncated); + throw new IOException(MessageFormat.format( + JGitText.get().packfileIsTruncated, pack.getPackName())); } md.update(buf, 0, 12); } @@ -580,7 +581,8 @@ public final class DfsReader extends ObjectReader implements ObjectReuseAsIs { pin(pack, position); if (block.copy(position, buf, 0, 20) != 20) { pack.setInvalid(); - throw new IOException(JGitText.get().packfileIsTruncated); + throw new IOException(MessageFormat.format( + JGitText.get().packfileIsTruncated, pack.getPackName())); } if (!Arrays.equals(actHash, buf)) { pack.setInvalid(); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackFile.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackFile.java index 306a0d3896..eb2293874f 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackFile.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackFile.java @@ -169,11 +169,13 @@ public class PackFile implements Iterable<PackIndex.MutableEntry> { try { final PackIndex idx = PackIndex.open(extFile(INDEX)); - if (packChecksum == null) + if (packChecksum == null) { packChecksum = idx.packChecksum; - else if (!Arrays.equals(packChecksum, idx.packChecksum)) - throw new PackMismatchException(JGitText.get().packChecksumMismatch); - + } else if (!Arrays.equals(packChecksum, idx.packChecksum)) { + throw new PackMismatchException(MessageFormat.format( + JGitText.get().packChecksumMismatch, + packFile.getPath())); + } loadedIdx = idx; } catch (IOException e) { invalid = true; diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/WindowCursor.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/WindowCursor.java index a0a4c952fc..85c3c74255 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/WindowCursor.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/WindowCursor.java @@ -246,7 +246,9 @@ final class WindowCursor extends ObjectReader implements ObjectReuseAsIs { pin(pack, 0); if (window.copy(0, buf, 0, 12) != 12) { pack.setInvalid(); - throw new IOException(JGitText.get().packfileIsTruncated); + throw new IOException(MessageFormat.format( + JGitText.get().packfileIsTruncated, pack.getPackFile() + .getPath())); } md.update(buf, 0, 12); } @@ -270,7 +272,9 @@ final class WindowCursor extends ObjectReader implements ObjectReuseAsIs { pin(pack, position); if (window.copy(position, buf, 0, 20) != 20) { pack.setInvalid(); - throw new IOException(JGitText.get().packfileIsTruncated); + throw new IOException(MessageFormat.format( + JGitText.get().packfileIsTruncated, pack.getPackFile() + .getPath())); } if (!Arrays.equals(actHash, buf)) { pack.setInvalid(); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PackParser.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PackParser.java index 633554a96f..5b54891cd1 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PackParser.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PackParser.java @@ -1135,7 +1135,8 @@ public abstract class PackParser { break; } if (next <= 0) - throw new EOFException(JGitText.get().packfileIsTruncated); + throw new EOFException( + JGitText.get().packfileIsTruncatedNoParam); bAvail += next; } return bOffset; |