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 String packFileName = singlePack.getPackFile().getPath();
77 String keepFileName = packFileName.substring(0,
78 packFileName.lastIndexOf('.')) + ".keep";
79 File keepFile = new File(keepFileName);
80 assertFalse(keepFile.exists());
81 assertTrue(keepFile.createNewFile());
82 bb.commit().add("A", "A2").add("B", "B2").create();
83 stats = gc.getStatistics();
84 assertEquals(4, stats.numberOfLooseObjects);
85 assertEquals(4, stats.numberOfPackedObjects);
86 assertEquals(1, stats.numberOfPackFiles);
87 gc.gc();
88 stats = gc.getStatistics();
89 assertEquals(0, stats.numberOfLooseObjects);
90 assertEquals(8, stats.numberOfPackedObjects);
91 assertEquals(2, stats.numberOfPackFiles);
92
93
94 Iterator<PackFile> packs = repo.getObjectDatabase().getPacks()
95 .iterator();
96 PackIndex ind1 = packs.next().getIndex();
97 assertEquals(4, ind1.getObjectCount());
98 PackIndex ind2 = packs.next().getIndex();
99 assertEquals(4, ind2.getObjectCount());
100 for (MutableEntry e: ind1)
101 if (ind2.hasObject(e.toObjectId()))
102 assertFalse(
103 "the following object is in both packfiles: "
104 + e.toObjectId(),
105 ind2.hasObject(e.toObjectId()));
106 }
107 }