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 }