]> source.dussan.org Git - jgit.git/commitdiff
MergedReftable to skip shadowed refs in same reftable 74/117074/1
authorMinh Thai <mthai@google.com>
Fri, 9 Feb 2018 17:49:24 +0000 (09:49 -0800)
committerMinh Thai <mthai@google.com>
Fri, 9 Feb 2018 17:49:24 +0000 (09:49 -0800)
This would allow compact and GC process to clean up duplicate ref names in the reftables.

Change-Id: I2b9df0bf72dba63cc3525e374982e60559a776c2
Signed-off-by: Minh Thai <mthai@google.com>
org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/MergedReftableTest.java
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/MergedReftable.java

index adba048e6569b7a83cf9781e0347bcdd65131167..ec60bd91376fefcd9fd869d3f87012a189be4b2b 100644 (file)
@@ -217,6 +217,27 @@ public class MergedReftableTest {
                }
        }
 
+       @Test
+       public void scanDuplicates() throws IOException {
+               List<Ref> delta1 = Arrays.asList(
+                               ref("refs/heads/apple", 1),
+                               ref("refs/heads/banana", 2));
+               List<Ref> delta2 = Arrays.asList(
+                               ref("refs/heads/apple", 3),
+                               ref("refs/heads/apple", 4));
+
+               MergedReftable mr = merge(write(delta1, 1000), write(delta2, 2000));
+               try (RefCursor rc = mr.allRefs()) {
+                       assertTrue(rc.next());
+                       assertEquals("refs/heads/apple", rc.getRef().getName());
+                       assertEquals(id(3), rc.getRef().getObjectId());
+                       assertTrue(rc.next());
+                       assertEquals("refs/heads/banana", rc.getRef().getName());
+                       assertEquals(id(2), rc.getRef().getObjectId());
+                       assertFalse(rc.next());
+               }
+       }
+
        @Test
        public void scanIncludeDeletes() throws IOException {
                List<Ref> delta1 = Arrays.asList(ref("refs/heads/next", 4));
index baebde2b48dad0a22b7e6a6498e3a6e7a0a0e052..ef686a300828241c1c39c3d526a4e58626f5d814 100644 (file)
@@ -198,8 +198,8 @@ public class MergedReftable extends Reftable {
                                ref = t.rc.getRef();
                                updateIndex = t.rc.getUpdateIndex();
                                boolean include = includeDeletes || !t.rc.wasDeleted();
-                               skipShadowedRefs(ref.getName());
                                add(t);
+                               skipShadowedRefs(ref.getName());
                                if (include) {
                                        return true;
                                }