This series tries to address issue 79[1] and GERRIT-81[2] by detecting when packs have been overwritten on disk, or when new packs have appeared and old packs have disappeared. The first 5 patches are quite trivial and are just things I found while working on the real issue. Patch 6 is rather intrusive. It starts a refactoring I have always wanted to do, which is to split the object database out of the Repository class, and also start to divorce it from the local filesystem. The library is in the same state after patch 5 as it was before patch 5; that is issue 79 is still an issue, but everything else is fine. Patch 7 and 8 fix issue 79. Patch 9 is a rewritten version of your 1/3 posted Sun 19 Apr, providing test cases for issue 79 / GERRIT-81. Patch 10 is a broken test case. Basically as I explain in the commit message of 7, PackWriter can still crash randomly. With 1-9 applied, issue 79 can be marked fixed, but GERRIT-81 is still a problem, as any concurrent PackWriter thread may randomly crash during a repack. [1] http://code.google.com/p/egit/issues/detail?id=79 [2] http://jira.source.android.com/jira/browse/GERRIT-81 Shawn O. Pearce (10): Safely handle closing an already closed WindowedFile Change empty tree test case to use a temporary repository Replace hand-coded read fully loop with NB.readFully Clear the reverse index when closing a PackFile Introduce a new exception type for an in-place pack modification Refactor object database access with new abstraction Rescan packs if a pack is modified in-place (part 1) Scan for new packs if GIT_DIR/objects/pack has been modified Add test cases for loading new (or replaced) pack files BROKEN TEST: ObjectLoader stays valid across repacks .../org/spearce/jgit/lib/ConcurrentRepackTest.java | 252 +++++++++++ .../org/spearce/jgit/lib/RepositoryTestCase.java | 2 - .../tst/org/spearce/jgit/lib/T0003_Basic.java | 11 +- .../tst/org/spearce/jgit/lib/T0004_PackReader.java | 1 - .../spearce/jgit/errors/PackMismatchException.java | 55 +++ .../src/org/spearce/jgit/lib/ObjectDatabase.java | 367 ++++++++++++++++ .../src/org/spearce/jgit/lib/ObjectDirectory.java | 438 ++++++++++++++++++++ .../src/org/spearce/jgit/lib/PackFile.java | 36 ++- .../src/org/spearce/jgit/lib/Repository.java | 174 +-------- .../org/spearce/jgit/lib/UnpackedObjectLoader.java | 34 +- .../src/org/spearce/jgit/lib/WindowedFile.java | 16 +- 11 files changed, 1183 insertions(+), 203 deletions(-) create mode 100644 org.spearce.jgit.test/tst/org/spearce/jgit/lib/ConcurrentRepackTest.java create mode 100644 org.spearce.jgit/src/org/spearce/jgit/errors/PackMismatchException.java create mode 100644 org.spearce.jgit/src/org/spearce/jgit/lib/ObjectDatabase.java create mode 100644 org.spearce.jgit/src/org/spearce/jgit/lib/ObjectDirectory.java -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html