Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Sohn2014-12-22 14:08:15 +0000
committerMatthias Sohn2015-01-15 16:23:24 +0000
commit9b86ebb4f605619d4af14d6260a338c38496b492 (patch)
tree2eb98f65e3981da47590cb6447d78d24a55c0b1a
parent741ebca8b71f5ca37de61349019fe66d5e7cfc85 (diff)
downloadjgit-9b86ebb4f605619d4af14d6260a338c38496b492.tar.gz
jgit-9b86ebb4f605619d4af14d6260a338c38496b492.tar.xz
jgit-9b86ebb4f605619d4af14d6260a338c38496b492.zip
Log reason for ignoring pack when IOException occurred
This should help to identify the root cause of the problem discussed on the Gerrit list [1]. [1] https://groups.google.com/forum/#!topic/repo-discuss/Qdmbl-YZ4NU Change-Id: I871f70e4bb1227952e1544b789013583b14e2b96 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
-rw-r--r--org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties1
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java1
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java20
3 files changed, 20 insertions, 2 deletions
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 a753188e88..b0ce1582d4 100644
--- a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
+++ b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
@@ -207,6 +207,7 @@ exceptionCaughtDuringExecutionOfRmCommand=Exception caught during execution of r
exceptionCaughtDuringExecutionOfTagCommand=Exception caught during execution of tag command
exceptionOccurredDuringAddingOfOptionToALogCommand=Exception occurred during adding of {0} as option to a Log command
exceptionOccurredDuringReadingOfGIT_DIR=Exception occurred during reading of $GIT_DIR/{0}. {1}
+exceptionWhileReadingPack=ERROR: Exception caught while accessing pack file {0}, the pack file might be corrupt
expectedACKNAKFoundEOF=Expected ACK/NAK, found EOF
expectedACKNAKGot=Expected ACK/NAK, got: {0}
expectedBooleanStringValue=Expected boolean string value
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 65272fb0bd..5f42e81893 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
@@ -266,6 +266,7 @@ public class JGitText extends TranslationBundle {
/***/ public String exceptionCaughtDuringExecutionOfTagCommand;
/***/ public String exceptionOccurredDuringAddingOfOptionToALogCommand;
/***/ public String exceptionOccurredDuringReadingOfGIT_DIR;
+ /***/ public String exceptionWhileReadingPack;
/***/ public String expectedACKNAKFoundEOF;
/***/ public String expectedACKNAKGot;
/***/ public String expectedBooleanStringValue;
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java
index 58276051ea..0b83efa62a 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java
@@ -52,6 +52,8 @@ import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
@@ -329,7 +331,7 @@ public class ObjectDirectory extends FileObjectDatabase {
p.resolve(matches, id, RESOLVE_ABBREV_LIMIT);
} catch (IOException e) {
// Assume the pack is corrupted.
- //
+ logCorruptPackError(e, p);
removePack(p);
}
if (matches.size() > RESOLVE_ABBREV_LIMIT)
@@ -418,6 +420,7 @@ public class ObjectDirectory extends FileObjectDatabase {
continue SEARCH;
} catch (IOException e) {
// Assume the pack is corrupted.
+ logCorruptPackError(e, p);
removePack(p);
}
}
@@ -499,6 +502,7 @@ public class ObjectDirectory extends FileObjectDatabase {
continue SEARCH;
} catch (IOException e) {
// Assume the pack is corrupted.
+ logCorruptPackError(e, p);
removePack(p);
}
}
@@ -541,7 +545,7 @@ public class ObjectDirectory extends FileObjectDatabase {
continue SEARCH;
} catch (IOException e) {
// Assume the pack is corrupted.
- //
+ logCorruptPackError(e, p);
removePack(p);
}
}
@@ -552,6 +556,18 @@ public class ObjectDirectory extends FileObjectDatabase {
h.db.selectObjectRepresentation(packer, otp, curs);
}
+ private static void logCorruptPackError(IOException e, PackFile p) {
+ StringBuilder buf = new StringBuilder(MessageFormat.format(
+ JGitText.get().exceptionWhileReadingPack,
+ p.getPackFile().getAbsolutePath()));
+ StringWriter sw = new StringWriter();
+ e.printStackTrace(new PrintWriter(sw));
+ buf.append('\n');
+ buf.append(sw.toString());
+ // TODO instead of syserr we should use a logging framework
+ System.err.println(buf.toString());
+ }
+
@Override
InsertLooseObjectResult insertUnpackedObject(File tmp, ObjectId id,
boolean createDuplicate) throws IOException {

Back to the top