1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 package org.eclipse.jgit.internal.storage.file;
45
46 import static org.junit.Assert.assertEquals;
47 import static org.junit.Assert.assertFalse;
48 import static org.junit.Assert.assertTrue;
49
50 import java.io.File;
51 import java.util.Iterator;
52
53 import org.eclipse.jgit.internal.storage.file.PackIndex.MutableEntry;
54 import org.eclipse.jgit.junit.TestRepository.BranchBuilder;
55 import org.junit.Test;
56
57 public class GcKeepFilesTest extends GcTestCase {
58 @Test
59 public void testKeepFiles() throws Exception {
60 BranchBuilder bb = tr.branch("refs/heads/master");
61 bb.commit().add("A", "A").add("B", "B").create();
62 stats = gc.getStatistics();
63 assertEquals(4, stats.numberOfLooseObjects);
64 assertEquals(0, stats.numberOfPackedObjects);
65 assertEquals(0, stats.numberOfPackFiles);
66 gc.gc();
67 stats = gc.getStatistics();
68 assertEquals(0, stats.numberOfLooseObjects);
69 assertEquals(4, stats.numberOfPackedObjects);
70 assertEquals(1, stats.numberOfPackFiles);
71
72 Iterator<PackFile> packIt = repo.getObjectDatabase().getPacks()
73 .iterator();
74 PackFile singlePack = packIt.next();
75 assertFalse(packIt.hasNext());
76 File keepFile = new File(singlePack.getPackFile().getPath() + ".keep");
77 assertFalse(keepFile.exists());
78 assertTrue(keepFile.createNewFile());
79 bb.commit().add("A", "A2").add("B", "B2").create();
80 stats = gc.getStatistics();
81 assertEquals(4, stats.numberOfLooseObjects);
82 assertEquals(4, stats.numberOfPackedObjects);
83 assertEquals(1, stats.numberOfPackFiles);
84 gc.gc();
85 stats = gc.getStatistics();
86 assertEquals(0, stats.numberOfLooseObjects);
87 assertEquals(8, stats.numberOfPackedObjects);
88 assertEquals(2, stats.numberOfPackFiles);
89
90
91 Iterator<PackFile> packs = repo.getObjectDatabase().getPacks()
92 .iterator();
93 PackIndex ind1 = packs.next().getIndex();
94 assertEquals(4, ind1.getObjectCount());
95 PackIndex ind2 = packs.next().getIndex();
96 assertEquals(4, ind2.getObjectCount());
97 for (MutableEntry e: ind1)
98 if (ind2.hasObject(e.toObjectId()))
99 assertFalse(
100 "the following object is in both packfiles: "
101 + e.toObjectId(),
102 ind2.hasObject(e.toObjectId()));
103 }
104 }