1
2
3
4
5
6
7
8
9
10
11 package org.eclipse.jgit.internal.storage.file;
12
13 import static org.junit.Assert.assertTrue;
14
15 import java.util.Collections;
16
17 import org.eclipse.jgit.junit.TestRepository.CommitBuilder;
18 import org.eclipse.jgit.lib.ObjectId;
19 import org.eclipse.jgit.lib.RefUpdate;
20 import org.eclipse.jgit.merge.MergeStrategy;
21 import org.eclipse.jgit.merge.Merger;
22 import org.eclipse.jgit.revwalk.RevCommit;
23 import org.eclipse.jgit.revwalk.RevTree;
24 import org.junit.Test;
25
26 public class GcBranchPrunedTest extends GcTestCase {
27
28 @Test
29 public void branch_historyNotPruned() throws Exception {
30 RevCommit tip = commitChain(10);
31 tr.branch("b").update(tip);
32 gc.setExpireAgeMillis(0);
33 fsTick();
34 gc.prune(Collections.<ObjectId> emptySet());
35 do {
36 assertTrue(repo.getObjectDatabase().has(tip));
37 tr.parseBody(tip);
38 RevTree t = tip.getTree();
39 assertTrue(repo.getObjectDatabase().has(t));
40 assertTrue(repo.getObjectDatabase().has(tr.get(t, "a")));
41 tip = tip.getParentCount() > 0 ? tip.getParent(0) : null;
42 } while (tip != null);
43 }
44
45 @Test
46 public void deleteBranch_historyPruned() throws Exception {
47 RevCommit tip = commitChain(10);
48 tr.branch("b").update(tip);
49 RefUpdate update = repo.updateRef("refs/heads/b");
50 update.setForceUpdate(true);
51 update.delete();
52 gc.setExpireAgeMillis(0);
53 fsTick();
54 gc.prune(Collections.<ObjectId> emptySet());
55 assertTrue(gc.getStatistics().numberOfLooseObjects == 0);
56 }
57
58 @Test
59 public void deleteMergedBranch_historyNotPruned() throws Exception {
60 RevCommit parent = tr.commit().create();
61 RevCommit b1Tip = tr.branch("b1").commit().parent(parent).add("x", "x")
62 .create();
63 RevCommit b2Tip = tr.branch("b2").commit().parent(parent).add("y", "y")
64 .create();
65
66
67 Merger merger = MergeStrategy.SIMPLE_TWO_WAY_IN_CORE.newMerger(repo);
68 merger.merge(b1Tip, b2Tip);
69 CommitBuilder cb = tr.commit();
70 cb.parent(b1Tip).parent(b2Tip);
71 cb.setTopLevelTree(merger.getResultTreeId());
72 RevCommit mergeCommit = cb.create();
73 RefUpdate u = repo.updateRef("refs/heads/b1");
74 u.setNewObjectId(mergeCommit);
75 u.update();
76
77 RefUpdate update = repo.updateRef("refs/heads/b2");
78 update.setForceUpdate(true);
79 update.delete();
80
81 gc.setExpireAgeMillis(0);
82 fsTick();
83 gc.prune(Collections.<ObjectId> emptySet());
84 assertTrue(repo.getObjectDatabase().has(b2Tip));
85 }
86 }