diff options
author | Matthias Sohn <matthias.sohn@sap.com> | 2014-12-22 15:08:15 +0100 |
---|---|---|
committer | Matthias Sohn <matthias.sohn@sap.com> | 2015-01-15 17:23:24 +0100 |
commit | 9b86ebb4f605619d4af14d6260a338c38496b492 (patch) | |
tree | 2eb98f65e3981da47590cb6447d78d24a55c0b1a | |
parent | 741ebca8b71f5ca37de61349019fe66d5e7cfc85 (diff) | |
download | jgit-9b86ebb4f605619d4af14d6260a338c38496b492.tar.gz 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>
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 { |