1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 package org.eclipse.jgit.pgm;
44
45 import static org.junit.Assert.*;
46
47 import org.eclipse.jgit.api.Git;
48 import org.eclipse.jgit.lib.CLIRepositoryTestCase;
49 import org.eclipse.jgit.revwalk.RevCommit;
50 import org.junit.Before;
51 import org.junit.Ignore;
52 import org.junit.Test;
53
54 public class ResetTest extends CLIRepositoryTestCase {
55
56 private Git git;
57
58 @Override
59 @Before
60 public void setUp() throws Exception {
61 super.setUp();
62 git = new Git(db);
63 }
64
65 @Test
66 public void testPathOptionHelp() throws Exception {
67 String[] result = execute("git reset -h");
68 assertTrue("Unexpected argument: " + result[1],
69 result[1].endsWith("[-- path ... ...]"));
70 }
71
72 @Test
73 public void testZombieArgument_Bug484951() throws Exception {
74 String[] result = execute("git reset -h");
75 assertFalse("Unexpected argument: " + result[0],
76 result[0].contains("[VAL ...]"));
77 }
78
79 @Test
80 public void testResetSelf() throws Exception {
81 RevCommit commit = git.commit().setMessage("initial commit").call();
82 assertStringArrayEquals("",
83 execute("git reset --hard " + commit.getId().name()));
84 assertEquals(commit.getId(),
85 git.getRepository().exactRef("HEAD").getObjectId());
86 }
87
88 @Test
89 public void testResetPrevious() throws Exception {
90 RevCommit commit = git.commit().setMessage("initial commit").call();
91 git.commit().setMessage("second commit").call();
92 assertStringArrayEquals("",
93 execute("git reset --hard " + commit.getId().name()));
94 assertEquals(commit.getId(),
95 git.getRepository().exactRef("HEAD").getObjectId());
96 }
97
98 @Test
99 public void testResetEmptyPath() throws Exception {
100 RevCommit commit = git.commit().setMessage("initial commit").call();
101 assertStringArrayEquals("",
102 execute("git reset --hard " + commit.getId().name() + " --"));
103 assertEquals(commit.getId(),
104 git.getRepository().exactRef("HEAD").getObjectId());
105 }
106
107 @Test
108 public void testResetPathDoubleDash() throws Exception {
109 resetPath(true, true);
110 }
111
112 @Test
113 public void testResetPathNoDoubleDash() throws Exception {
114 resetPath(false, true);
115 }
116
117 @Test
118 public void testResetPathDoubleDashNoRef() throws Exception {
119 resetPath(true, false);
120 }
121
122 @Ignore("Currently we cannote recognize if a name is a commit-ish or a path, "
123 + "so 'git reset a' will not work if 'a' is not a branch name but a file path")
124 @Test
125 public void testResetPathNoDoubleDashNoRef() throws Exception {
126 resetPath(false, false);
127 }
128
129 private void resetPath(boolean useDoubleDash, boolean supplyCommit)
130 throws Exception {
131
132 writeTrashFile("a", "Hello world a");
133 writeTrashFile("b", "Hello world b");
134
135 git.add().addFilepattern(".").call();
136
137 RevCommit commit = git.commit().setMessage("files a & b").call();
138
139
140 writeTrashFile("a", "New Hello world a");
141 writeTrashFile("b", "New Hello world b");
142
143 git.add().addFilepattern(".").call();
144
145
146 String cmd = String.format("git reset %s%s a",
147 supplyCommit ? commit.getId().name() : "",
148 useDoubleDash ? " --" : "");
149 assertStringArrayEquals("", execute(cmd));
150 assertEquals(commit.getId(),
151 git.getRepository().exactRef("HEAD").getObjectId());
152
153 org.eclipse.jgit.api.Status status = git.status().call();
154
155 assertArrayEquals(new String[] { "a" },
156 status.getModified().toArray());
157
158 assertArrayEquals(new String[] { "b" },
159 status.getChanged().toArray());
160 }
161
162 }