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.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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 testZombieArgument_Bug484951() throws Exception {
  61. String[] result = execute("git reset -h");
  62. assertFalse("Unexpected argument: " + result[0],
  63. result[0].contains("[VAL ...]"));
  64. }
  65. @Test
  66. public void testResetSelf() throws Exception {
  67. RevCommit commit = git.commit().setMessage("initial commit").call();
  68. assertStringArrayEquals("",
  69. execute("git reset --hard " + commit.getId().name()));
  70. assertEquals(commit.getId(),
  71. git.getRepository().exactRef("HEAD").getObjectId());
  72. }
  73. @Test
  74. public void testResetPrevious() throws Exception {
  75. RevCommit commit = git.commit().setMessage("initial commit").call();
  76. git.commit().setMessage("second commit").call();
  77. assertStringArrayEquals("",
  78. execute("git reset --hard " + commit.getId().name()));
  79. assertEquals(commit.getId(),
  80. git.getRepository().exactRef("HEAD").getObjectId());
  81. }
  82. @Test
  83. public void testResetEmptyPath() throws Exception {
  84. RevCommit commit = git.commit().setMessage("initial commit").call();
  85. assertStringArrayEquals("",
  86. execute("git reset --hard " + commit.getId().name() + " --"));
  87. assertEquals(commit.getId(),
  88. git.getRepository().exactRef("HEAD").getObjectId());
  89. }
  90. @Test
  91. public void testResetPathDoubleDash() throws Exception {
  92. resetPath(true, true);
  93. }
  94. @Test
  95. public void testResetPathNoDoubleDash() throws Exception {
  96. resetPath(false, true);
  97. }
  98. @Test
  99. public void testResetPathDoubleDashNoRef() throws Exception {
  100. resetPath(true, false);
  101. }
  102. @Ignore("Currently we cannote recognize if a name is a commit-ish or a path, "
  103. + "so 'git reset a' will not work if 'a' is not a branch name but a file path")
  104. @Test
  105. public void testResetPathNoDoubleDashNoRef() throws Exception {
  106. resetPath(false, false);
  107. }
  108. private void resetPath(boolean useDoubleDash, boolean supplyCommit)
  109. throws Exception {
  110. // create files a and b
  111. writeTrashFile("a", "Hello world a");
  112. writeTrashFile("b", "Hello world b");
  113. // stage the files
  114. git.add().addFilepattern(".").call();
  115. // commit the files
  116. RevCommit commit = git.commit().setMessage("files a & b").call();
  117. // change both files a and b
  118. writeTrashFile("a", "New Hello world a");
  119. writeTrashFile("b", "New Hello world b");
  120. // stage the files
  121. git.add().addFilepattern(".").call();
  122. // reset only file a
  123. String cmd = String.format("git reset %s%s a",
  124. supplyCommit ? commit.getId().name() : "",
  125. useDoubleDash ? " --" : "");
  126. assertStringArrayEquals("", execute(cmd));
  127. assertEquals(commit.getId(),
  128. git.getRepository().exactRef("HEAD").getObjectId());
  129. org.eclipse.jgit.api.Status status = git.status().call();
  130. // assert that file a is unstaged
  131. assertArrayEquals(new String[] { "a" },
  132. status.getModified().toArray());
  133. // assert that file b is still staged
  134. assertArrayEquals(new String[] { "b" },
  135. status.getChanged().toArray());
  136. }
  137. }