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.

StashDropCommandTest.java 9.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. /*
  2. * Copyright (C) 2012, GitHub Inc. 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.api;
  11. import static org.junit.Assert.assertEquals;
  12. import static org.junit.Assert.assertNotNull;
  13. import static org.junit.Assert.assertNull;
  14. import static org.junit.Assert.assertTrue;
  15. import static org.junit.Assert.fail;
  16. import java.io.File;
  17. import java.util.List;
  18. import org.eclipse.jgit.api.errors.JGitInternalException;
  19. import org.eclipse.jgit.junit.RepositoryTestCase;
  20. import org.eclipse.jgit.lib.Constants;
  21. import org.eclipse.jgit.lib.ObjectId;
  22. import org.eclipse.jgit.lib.Ref;
  23. import org.eclipse.jgit.lib.ReflogEntry;
  24. import org.eclipse.jgit.lib.ReflogReader;
  25. import org.eclipse.jgit.revwalk.RevCommit;
  26. import org.junit.Before;
  27. import org.junit.Test;
  28. /**
  29. * Unit tests of {@link StashCreateCommand}
  30. */
  31. public class StashDropCommandTest extends RepositoryTestCase {
  32. private RevCommit head;
  33. private Git git;
  34. private File committedFile;
  35. @Override
  36. @Before
  37. public void setUp() throws Exception {
  38. super.setUp();
  39. git = Git.wrap(db);
  40. committedFile = writeTrashFile("file.txt", "content");
  41. git.add().addFilepattern("file.txt").call();
  42. head = git.commit().setMessage("add file").call();
  43. assertNotNull(head);
  44. }
  45. @Test(expected = IllegalArgumentException.class)
  46. public void dropNegativeRef() {
  47. git.stashDrop().setStashRef(-1);
  48. }
  49. @Test
  50. public void dropWithNoStashedCommits() throws Exception {
  51. assertNull(git.stashDrop().call());
  52. }
  53. @Test
  54. public void dropWithInvalidLogIndex() throws Exception {
  55. write(committedFile, "content2");
  56. Ref stashRef = git.getRepository().exactRef(Constants.R_STASH);
  57. assertNull(stashRef);
  58. RevCommit stashed = git.stashCreate().call();
  59. assertNotNull(stashed);
  60. stashRef = git.getRepository().exactRef(Constants.R_STASH);
  61. assertEquals(stashed,
  62. git.getRepository().exactRef(Constants.R_STASH).getObjectId());
  63. try {
  64. assertNull(git.stashDrop().setStashRef(100).call());
  65. fail("Exception not thrown");
  66. } catch (JGitInternalException e) {
  67. assertNotNull(e.getMessage());
  68. assertTrue(e.getMessage().length() > 0);
  69. }
  70. }
  71. @Test
  72. public void dropSingleStashedCommit() throws Exception {
  73. write(committedFile, "content2");
  74. Ref stashRef = git.getRepository().exactRef(Constants.R_STASH);
  75. assertNull(stashRef);
  76. RevCommit stashed = git.stashCreate().call();
  77. assertNotNull(stashed);
  78. stashRef = git.getRepository().exactRef(Constants.R_STASH);
  79. assertEquals(stashed,
  80. git.getRepository().exactRef(Constants.R_STASH).getObjectId());
  81. assertNull(git.stashDrop().call());
  82. stashRef = git.getRepository().exactRef(Constants.R_STASH);
  83. assertNull(stashRef);
  84. ReflogReader reader = git.getRepository().getReflogReader(
  85. Constants.R_STASH);
  86. assertNull(reader);
  87. }
  88. @Test
  89. public void dropAll() throws Exception {
  90. write(committedFile, "content2");
  91. Ref stashRef = git.getRepository().exactRef(Constants.R_STASH);
  92. assertNull(stashRef);
  93. RevCommit firstStash = git.stashCreate().call();
  94. assertNotNull(firstStash);
  95. stashRef = git.getRepository().exactRef(Constants.R_STASH);
  96. assertNotNull(stashRef);
  97. assertEquals(firstStash,
  98. git.getRepository().exactRef(Constants.R_STASH).getObjectId());
  99. write(committedFile, "content3");
  100. RevCommit secondStash = git.stashCreate().call();
  101. assertNotNull(secondStash);
  102. stashRef = git.getRepository().exactRef(Constants.R_STASH);
  103. assertNotNull(stashRef);
  104. assertEquals(secondStash,
  105. git.getRepository().exactRef(Constants.R_STASH).getObjectId());
  106. assertNull(git.stashDrop().setAll(true).call());
  107. assertNull(git.getRepository().exactRef(Constants.R_STASH));
  108. ReflogReader reader = git.getRepository().getReflogReader(
  109. Constants.R_STASH);
  110. assertNull(reader);
  111. }
  112. @Test
  113. public void dropFirstStashedCommit() throws Exception {
  114. write(committedFile, "content2");
  115. Ref stashRef = git.getRepository().exactRef(Constants.R_STASH);
  116. assertNull(stashRef);
  117. RevCommit firstStash = git.stashCreate().call();
  118. assertNotNull(firstStash);
  119. stashRef = git.getRepository().exactRef(Constants.R_STASH);
  120. assertNotNull(stashRef);
  121. assertEquals(firstStash,
  122. git.getRepository().exactRef(Constants.R_STASH).getObjectId());
  123. write(committedFile, "content3");
  124. RevCommit secondStash = git.stashCreate().call();
  125. assertNotNull(secondStash);
  126. stashRef = git.getRepository().exactRef(Constants.R_STASH);
  127. assertNotNull(stashRef);
  128. assertEquals(secondStash,
  129. git.getRepository().exactRef(Constants.R_STASH).getObjectId());
  130. assertEquals(firstStash, git.stashDrop().call());
  131. stashRef = git.getRepository().exactRef(Constants.R_STASH);
  132. assertNotNull(stashRef);
  133. assertEquals(firstStash, stashRef.getObjectId());
  134. ReflogReader reader = git.getRepository().getReflogReader(
  135. Constants.R_STASH);
  136. List<ReflogEntry> entries = reader.getReverseEntries();
  137. assertEquals(1, entries.size());
  138. assertEquals(ObjectId.zeroId(), entries.get(0).getOldId());
  139. assertEquals(firstStash, entries.get(0).getNewId());
  140. assertTrue(entries.get(0).getComment().length() > 0);
  141. }
  142. @Test
  143. public void dropMiddleStashCommit() throws Exception {
  144. write(committedFile, "content2");
  145. Ref stashRef = git.getRepository().exactRef(Constants.R_STASH);
  146. assertNull(stashRef);
  147. RevCommit firstStash = git.stashCreate().call();
  148. assertNotNull(firstStash);
  149. stashRef = git.getRepository().exactRef(Constants.R_STASH);
  150. assertNotNull(stashRef);
  151. assertEquals(firstStash,
  152. git.getRepository().exactRef(Constants.R_STASH).getObjectId());
  153. write(committedFile, "content3");
  154. RevCommit secondStash = git.stashCreate().call();
  155. assertNotNull(secondStash);
  156. stashRef = git.getRepository().exactRef(Constants.R_STASH);
  157. assertNotNull(stashRef);
  158. assertEquals(secondStash,
  159. git.getRepository().exactRef(Constants.R_STASH).getObjectId());
  160. write(committedFile, "content4");
  161. RevCommit thirdStash = git.stashCreate().call();
  162. assertNotNull(thirdStash);
  163. stashRef = git.getRepository().exactRef(Constants.R_STASH);
  164. assertNotNull(stashRef);
  165. assertEquals(thirdStash,
  166. git.getRepository().exactRef(Constants.R_STASH).getObjectId());
  167. assertEquals(thirdStash, git.stashDrop().setStashRef(1).call());
  168. stashRef = git.getRepository().exactRef(Constants.R_STASH);
  169. assertNotNull(stashRef);
  170. assertEquals(thirdStash, stashRef.getObjectId());
  171. ReflogReader reader = git.getRepository().getReflogReader(
  172. Constants.R_STASH);
  173. List<ReflogEntry> entries = reader.getReverseEntries();
  174. assertEquals(2, entries.size());
  175. assertEquals(ObjectId.zeroId(), entries.get(1).getOldId());
  176. assertEquals(firstStash, entries.get(1).getNewId());
  177. assertTrue(entries.get(1).getComment().length() > 0);
  178. assertEquals(entries.get(0).getOldId(), entries.get(1).getNewId());
  179. assertEquals(thirdStash, entries.get(0).getNewId());
  180. assertTrue(entries.get(0).getComment().length() > 0);
  181. }
  182. @Test
  183. public void dropBoundaryStashedCommits() throws Exception {
  184. write(committedFile, "content2");
  185. Ref stashRef = git.getRepository().exactRef(Constants.R_STASH);
  186. assertNull(stashRef);
  187. RevCommit firstStash = git.stashCreate().call();
  188. assertNotNull(firstStash);
  189. stashRef = git.getRepository().exactRef(Constants.R_STASH);
  190. assertNotNull(stashRef);
  191. assertEquals(firstStash,
  192. git.getRepository().exactRef(Constants.R_STASH).getObjectId());
  193. write(committedFile, "content3");
  194. RevCommit secondStash = git.stashCreate().call();
  195. assertNotNull(secondStash);
  196. stashRef = git.getRepository().exactRef(Constants.R_STASH);
  197. assertNotNull(stashRef);
  198. assertEquals(secondStash,
  199. git.getRepository().exactRef(Constants.R_STASH).getObjectId());
  200. write(committedFile, "content4");
  201. RevCommit thirdStash = git.stashCreate().call();
  202. assertNotNull(thirdStash);
  203. stashRef = git.getRepository().exactRef(Constants.R_STASH);
  204. assertNotNull(stashRef);
  205. assertEquals(thirdStash,
  206. git.getRepository().exactRef(Constants.R_STASH).getObjectId());
  207. write(committedFile, "content5");
  208. RevCommit fourthStash = git.stashCreate().call();
  209. assertNotNull(fourthStash);
  210. stashRef = git.getRepository().exactRef(Constants.R_STASH);
  211. assertNotNull(stashRef);
  212. assertEquals(fourthStash,
  213. git.getRepository().exactRef(Constants.R_STASH).getObjectId());
  214. assertEquals(thirdStash, git.stashDrop().call());
  215. stashRef = git.getRepository().exactRef(Constants.R_STASH);
  216. assertNotNull(stashRef);
  217. assertEquals(thirdStash, stashRef.getObjectId());
  218. assertEquals(thirdStash, git.stashDrop().setStashRef(2).call());
  219. stashRef = git.getRepository().exactRef(Constants.R_STASH);
  220. assertNotNull(stashRef);
  221. assertEquals(thirdStash, stashRef.getObjectId());
  222. ReflogReader reader = git.getRepository().getReflogReader(
  223. Constants.R_STASH);
  224. List<ReflogEntry> entries = reader.getReverseEntries();
  225. assertEquals(2, entries.size());
  226. assertEquals(ObjectId.zeroId(), entries.get(1).getOldId());
  227. assertEquals(secondStash, entries.get(1).getNewId());
  228. assertTrue(entries.get(1).getComment().length() > 0);
  229. assertEquals(entries.get(0).getOldId(), entries.get(1).getNewId());
  230. assertEquals(thirdStash, entries.get(0).getNewId());
  231. assertTrue(entries.get(0).getComment().length() > 0);
  232. }
  233. }