You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

GcBranchPrunedTest.java 2.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * Copyright (C) 2012, Christian Halstrick <christian.halstrick@sap.com> and others
  3. *
  4. * This program and the accompanying materials are made available under the
  5. * terms of the Eclipse Distribution License v. 1.0 which is available at
  6. * https://www.eclipse.org/org/documents/edl-v10.php.
  7. *
  8. * SPDX-License-Identifier: BSD-3-Clause
  9. */
  10. package org.eclipse.jgit.internal.storage.file;
  11. import static org.junit.Assert.assertTrue;
  12. import java.util.Collections;
  13. import org.eclipse.jgit.junit.TestRepository.CommitBuilder;
  14. import org.eclipse.jgit.lib.ObjectId;
  15. import org.eclipse.jgit.lib.RefUpdate;
  16. import org.eclipse.jgit.merge.MergeStrategy;
  17. import org.eclipse.jgit.merge.Merger;
  18. import org.eclipse.jgit.revwalk.RevCommit;
  19. import org.eclipse.jgit.revwalk.RevTree;
  20. import org.junit.Test;
  21. public class GcBranchPrunedTest extends GcTestCase {
  22. @Test
  23. public void branch_historyNotPruned() throws Exception {
  24. RevCommit tip = commitChain(10);
  25. tr.branch("b").update(tip);
  26. gc.setExpireAgeMillis(0);
  27. fsTick();
  28. gc.prune(Collections.<ObjectId> emptySet());
  29. do {
  30. assertTrue(repo.getObjectDatabase().has(tip));
  31. tr.parseBody(tip);
  32. RevTree t = tip.getTree();
  33. assertTrue(repo.getObjectDatabase().has(t));
  34. assertTrue(repo.getObjectDatabase().has(tr.get(t, "a")));
  35. tip = tip.getParentCount() > 0 ? tip.getParent(0) : null;
  36. } while (tip != null);
  37. }
  38. @Test
  39. public void deleteBranch_historyPruned() throws Exception {
  40. RevCommit tip = commitChain(10);
  41. tr.branch("b").update(tip);
  42. RefUpdate update = repo.updateRef("refs/heads/b");
  43. update.setForceUpdate(true);
  44. update.delete();
  45. gc.setExpireAgeMillis(0);
  46. fsTick();
  47. gc.prune(Collections.<ObjectId> emptySet());
  48. assertTrue(gc.getStatistics().numberOfLooseObjects == 0);
  49. }
  50. @Test
  51. public void deleteMergedBranch_historyNotPruned() throws Exception {
  52. RevCommit parent = tr.commit().create();
  53. RevCommit b1Tip = tr.branch("b1").commit().parent(parent).add("x", "x")
  54. .create();
  55. RevCommit b2Tip = tr.branch("b2").commit().parent(parent).add("y", "y")
  56. .create();
  57. // merge b1Tip and b2Tip and update refs/heads/b1 to the merge commit
  58. Merger merger = MergeStrategy.SIMPLE_TWO_WAY_IN_CORE.newMerger(repo);
  59. merger.merge(b1Tip, b2Tip);
  60. CommitBuilder cb = tr.commit();
  61. cb.parent(b1Tip).parent(b2Tip);
  62. cb.setTopLevelTree(merger.getResultTreeId());
  63. RevCommit mergeCommit = cb.create();
  64. RefUpdate u = repo.updateRef("refs/heads/b1");
  65. u.setNewObjectId(mergeCommit);
  66. u.update();
  67. RefUpdate update = repo.updateRef("refs/heads/b2");
  68. update.setForceUpdate(true);
  69. update.delete();
  70. gc.setExpireAgeMillis(0);
  71. fsTick();
  72. gc.prune(Collections.<ObjectId> emptySet());
  73. assertTrue(repo.getObjectDatabase().has(b2Tip));
  74. }
  75. }