Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFile.java')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFile.java19
1 files changed, 14 insertions, 5 deletions
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 4eabb03163..f845453ec4 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
@@ -135,6 +135,9 @@ public final class DfsPackFile {
/** True once corruption has been detected that cannot be worked around. */
private volatile boolean invalid;
+ /** Exception that caused the packfile to be flagged as invalid */
+ private volatile Exception invalidatingCause;
+
/**
* Lock for initialization of {@link #index} and {@link #corruptObjects}.
* <p>
@@ -236,8 +239,9 @@ public final class DfsPackFile {
return idx;
}
- if (invalid)
- throw new PackInvalidException(getPackName());
+ if (invalid) {
+ throw new PackInvalidException(getPackName(), invalidatingCause);
+ }
Repository.getGlobalListenerList()
.dispatch(new BeforeDfsPackIndexLoadedEvent(this));
@@ -268,6 +272,7 @@ public final class DfsPackFile {
}
} catch (EOFException e) {
invalid = true;
+ invalidatingCause = e;
IOException e2 = new IOException(MessageFormat.format(
DfsText.get().shortReadOfIndex,
packDesc.getFileName(INDEX)));
@@ -275,6 +280,7 @@ public final class DfsPackFile {
throw e2;
} catch (IOException e) {
invalid = true;
+ invalidatingCause = e;
IOException e2 = new IOException(MessageFormat.format(
DfsText.get().cannotReadIndex,
packDesc.getFileName(INDEX)));
@@ -743,8 +749,10 @@ public final class DfsPackFile {
private IOException packfileIsTruncated() {
invalid = true;
- return new IOException(MessageFormat.format(
+ IOException exc = new IOException(MessageFormat.format(
JGitText.get().packfileIsTruncated, getPackName()));
+ invalidatingCause = exc;
+ return exc;
}
private void readFully(long position, byte[] dstbuf, int dstoff, int cnt,
@@ -766,8 +774,9 @@ public final class DfsPackFile {
DfsBlock readOneBlock(long pos, DfsReader ctx)
throws IOException {
- if (invalid)
- throw new PackInvalidException(getPackName());
+ if (invalid) {
+ throw new PackInvalidException(getPackName(), invalidatingCause);
+ }
ReadableChannel rc = ctx.db.openFile(packDesc, PACK);
try {

Back to the top