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.

ResetTest.java 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /*
  2. * Copyright (C) 2015, Kaloyan Raev <kaloyan.r@zend.com>
  3. * and other copyright owners as documented in the project's IP log.
  4. *
  5. * This program and the accompanying materials are made available
  6. * under the terms of the Eclipse Distribution License v1.0 which
  7. * accompanies this distribution, is reproduced below, and is
  8. * available at http://www.eclipse.org/org/documents/edl-v10.php
  9. *
  10. * All rights reserved.
  11. *
  12. * Redistribution and use in source and binary forms, with or
  13. * without modification, are permitted provided that the following
  14. * conditions are met:
  15. *
  16. * - Redistributions of source code must retain the above copyright
  17. * notice, this list of conditions and the following disclaimer.
  18. *
  19. * - Redistributions in binary form must reproduce the above
  20. * copyright notice, this list of conditions and the following
  21. * disclaimer in the documentation and/or other materials provided
  22. * with the distribution.
  23. *
  24. * - Neither the name of the Eclipse Foundation, Inc. nor the
  25. * names of its contributors may be used to endorse or promote
  26. * products derived from this software without specific prior
  27. * written permission.
  28. *
  29. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
  30. * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
  31. * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  32. * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  33. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  34. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  35. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  36. * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  37. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  38. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  39. * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  40. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
  41. * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  42. */
  43. package org.eclipse.jgit.pgm;
  44. import static org.junit.Assert.*;
  45. import org.eclipse.jgit.api.Git;
  46. import org.eclipse.jgit.lib.CLIRepositoryTestCase;
  47. import org.eclipse.jgit.revwalk.RevCommit;
  48. import org.junit.Before;
  49. import org.junit.Ignore;
  50. import org.junit.Test;
  51. public class ResetTest extends CLIRepositoryTestCase {
  52. private Git git;
  53. @Override
  54. @Before
  55. public void setUp() throws Exception {
  56. super.setUp();
  57. git = new Git(db);
  58. }
  59. @Test
  60. public void testPathOptionHelp() throws Exception {
  61. String[] result = execute("git reset -h");
  62. assertTrue("Unexpected argument: " + result[1],
  63. result[1].endsWith("[-- path ... ...]"));
  64. }
  65. @Test
  66. public void testZombieArgument_Bug484951() throws Exception {
  67. String[] result = execute("git reset -h");
  68. assertFalse("Unexpected argument: " + result[0],
  69. result[0].contains("[VAL ...]"));
  70. }
  71. @Test
  72. public void testResetSelf() throws Exception {
  73. RevCommit commit = git.commit().setMessage("initial commit").call();
  74. assertStringArrayEquals("",
  75. execute("git reset --hard " + commit.getId().name()));
  76. assertEquals(commit.getId(),
  77. git.getRepository().exactRef("HEAD").getObjectId());
  78. }
  79. @Test
  80. public void testResetPrevious() throws Exception {
  81. RevCommit commit = git.commit().setMessage("initial commit").call();
  82. git.commit().setMessage("second commit").call();
  83. assertStringArrayEquals("",
  84. execute("git reset --hard " + commit.getId().name()));
  85. assertEquals(commit.getId(),
  86. git.getRepository().exactRef("HEAD").getObjectId());
  87. }
  88. @Test
  89. public void testResetEmptyPath() throws Exception {
  90. RevCommit commit = git.commit().setMessage("initial commit").call();
  91. assertStringArrayEquals("",
  92. execute("git reset --hard " + commit.getId().name() + " --"));
  93. assertEquals(commit.getId(),
  94. git.getRepository().exactRef("HEAD").getObjectId());
  95. }
  96. @Test
  97. public void testResetPathDoubleDash() throws Exception {
  98. resetPath(true, true);
  99. }
  100. @Test
  101. public void testResetPathNoDoubleDash() throws Exception {
  102. resetPath(false, true);
  103. }
  104. @Test
  105. public void testResetPathDoubleDashNoRef() throws Exception {
  106. resetPath(true, false);
  107. }
  108. @Ignore("Currently we cannote recognize if a name is a commit-ish or a path, "
  109. + "so 'git reset a' will not work if 'a' is not a branch name but a file path")
  110. @Test
  111. public void testResetPathNoDoubleDashNoRef() throws Exception {
  112. resetPath(false, false);
  113. }
  114. private void resetPath(boolean useDoubleDash, boolean supplyCommit)
  115. throws Exception {
  116. // create files a and b
  117. writeTrashFile("a", "Hello world a");
  118. writeTrashFile("b", "Hello world b");
  119. // stage the files
  120. git.add().addFilepattern(".").call();
  121. // commit the files
  122. RevCommit commit = git.commit().setMessage("files a & b").call();
  123. // change both files a and b
  124. writeTrashFile("a", "New Hello world a");
  125. writeTrashFile("b", "New Hello world b");
  126. // stage the files
  127. git.add().addFilepattern(".").call();
  128. // reset only file a
  129. String cmd = String.format("git reset %s%s a",
  130. supplyCommit ? commit.getId().name() : "",
  131. useDoubleDash ? " --" : "");
  132. assertStringArrayEquals("", execute(cmd));
  133. assertEquals(commit.getId(),
  134. git.getRepository().exactRef("HEAD").getObjectId());
  135. org.eclipse.jgit.api.Status status = git.status().call();
  136. // assert that file a is unstaged
  137. assertArrayEquals(new String[] { "a" },
  138. status.getModified().toArray());
  139. // assert that file b is still staged
  140. assertArrayEquals(new String[] { "b" },
  141. status.getChanged().toArray());
  142. }
  143. }