]> source.dussan.org Git - jgit.git/commitdiff
Make InMemoryRepository pack names globally unique 32/6532/1
authorDave Borowitz <dborowitz@google.com>
Wed, 27 Jun 2012 20:55:25 +0000 (13:55 -0700)
committerDave Borowitz <dborowitz@google.com>
Wed, 27 Jun 2012 20:55:25 +0000 (13:55 -0700)
It was easy to create multiple packs with exactly the same name and
same DfsRepositoryDescription in a test, which can poison the
DfsBlockCache. The javadoc for DfsObjDatabase.newPack() explicitly
says pack names should be unique within an entire DFS, so do this by
making the packId AtomicInteger static.

Arguably, test writers shouldn't be doing things like putting
'new DfsRepositoryDescription("test")' in a setUp() method, but that's
a natural thing to do, and we don't document this restriction
anywhere.

Change-Id: I9477413ab3950d83b7d17e173fbc0a3e064896e3

org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/InMemoryRepository.java

index fb62acedf21607b06c8bcd93f073f6a6841153e0..270f23faec4d03c69b93d531eddbd30694976d0b 100644 (file)
@@ -26,6 +26,8 @@ import org.eclipse.jgit.util.RefList;
  * is garbage collected. Closing the repository has no impact on its memory.
  */
 public class InMemoryRepository extends DfsRepository {
+       private static final AtomicInteger packId = new AtomicInteger();
+
        private final DfsObjDatabase objdb;
 
        private final DfsRefDatabase refdb;
@@ -60,7 +62,6 @@ public class InMemoryRepository extends DfsRepository {
        }
 
        private class MemObjDatabase extends DfsObjDatabase {
-               private final AtomicInteger packId = new AtomicInteger();
                private List<DfsPackDescription> packs = new ArrayList<DfsPackDescription>();
 
                MemObjDatabase(DfsRepository repo) {