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.util.Collections;
51 import java.util.Date;
52
53 import org.eclipse.jgit.junit.TestRepository.BranchBuilder;
54 import org.eclipse.jgit.lib.ObjectId;
55 import org.eclipse.jgit.revwalk.RevBlob;
56 import org.eclipse.jgit.revwalk.RevCommit;
57 import org.eclipse.jgit.revwalk.RevTree;
58 import org.junit.Test;
59
60 public class GcPruneNonReferencedTest extends GcTestCase {
61 @Test
62 public void nonReferencedNonExpiredObject_notPruned() throws Exception {
63 RevBlob a = tr.blob("a");
64 gc.setExpire(new Date(lastModified(a)));
65 gc.prune(Collections.<ObjectId> emptySet());
66 assertTrue(repo.hasObject(a));
67 }
68
69 @Test
70 public void nonReferencedExpiredObject_pruned() throws Exception {
71 RevBlob a = tr.blob("a");
72 gc.setExpireAgeMillis(0);
73 fsTick();
74 gc.prune(Collections.<ObjectId> emptySet());
75 assertFalse(repo.hasObject(a));
76 }
77
78 @Test
79 public void nonReferencedExpiredObjectTree_pruned() throws Exception {
80 RevBlob a = tr.blob("a");
81 RevTree t = tr.tree(tr.file("a", a));
82 gc.setExpireAgeMillis(0);
83 fsTick();
84 gc.prune(Collections.<ObjectId> emptySet());
85 assertFalse(repo.hasObject(t));
86 assertFalse(repo.hasObject(a));
87 }
88
89 @Test
90 public void nonReferencedObjects_onlyExpiredPruned() throws Exception {
91 RevBlob a = tr.blob("a");
92 gc.setExpire(new Date(lastModified(a) + 1));
93
94 fsTick();
95 RevBlob b = tr.blob("b");
96
97 gc.prune(Collections.<ObjectId> emptySet());
98 assertFalse(repo.hasObject(a));
99 assertTrue(repo.hasObject(b));
100 }
101
102 @Test
103 public void testPackCommitsAndLooseOneWithPruneNow() throws Exception {
104 BranchBuilder bb = tr.branch("refs/heads/master");
105 RevCommit first = bb.commit().add("A", "A").add("B", "B").create();
106 bb.commit().add("A", "A2").add("B", "B2").create();
107 tr.update("refs/heads/master", first);
108
109 stats = gc.getStatistics();
110 assertEquals(8, stats.numberOfLooseObjects);
111 assertEquals(0, stats.numberOfPackedObjects);
112 gc.setExpireAgeMillis(0);
113 fsTick();
114 gc.gc();
115 stats = gc.getStatistics();
116 assertEquals(0, stats.numberOfLooseObjects);
117 assertEquals(8, stats.numberOfPackedObjects);
118 assertEquals(2, stats.numberOfPackFiles);
119 }
120 }