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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
/*
* Copyright (C) 2015, Kaloyan Raev <kaloyan.r@zend.com> and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at
* https://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package org.eclipse.jgit.pgm;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.lib.CLIRepositoryTestCase;
import org.eclipse.jgit.revwalk.RevCommit;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
public class ResetTest extends CLIRepositoryTestCase {
private Git git;
@Override
@Before
public void setUp() throws Exception {
super.setUp();
git = new Git(db);
}
@Test
public void testPathOptionHelp() throws Exception {
String[] result = execute("git reset -h");
assertTrue("Unexpected argument: " + result[1],
result[1].endsWith("[-- path ...]"));
}
@Test
public void testZombieArgument_Bug484951() throws Exception {
String[] result = execute("git reset -h");
assertFalse("Unexpected argument: " + result[0],
result[0].contains("[VAL ...]"));
}
@Test
public void testResetSelf() throws Exception {
RevCommit commit = git.commit().setMessage("initial commit").call();
assertStringArrayEquals("",
execute("git reset --hard " + commit.getId().name()));
assertEquals(commit.getId(),
git.getRepository().exactRef("HEAD").getObjectId());
}
@Test
public void testResetPrevious() throws Exception {
RevCommit commit = git.commit().setMessage("initial commit").call();
git.commit().setMessage("second commit").call();
assertStringArrayEquals("",
execute("git reset --hard " + commit.getId().name()));
assertEquals(commit.getId(),
git.getRepository().exactRef("HEAD").getObjectId());
}
@Test
public void testResetEmptyPath() throws Exception {
RevCommit commit = git.commit().setMessage("initial commit").call();
assertStringArrayEquals("",
execute("git reset --hard " + commit.getId().name() + " --"));
assertEquals(commit.getId(),
git.getRepository().exactRef("HEAD").getObjectId());
}
@Test
public void testResetPathDoubleDash() throws Exception {
resetPath(true, true);
}
@Test
public void testResetPathNoDoubleDash() throws Exception {
resetPath(false, true);
}
@Test
public void testResetPathDoubleDashNoRef() throws Exception {
resetPath(true, false);
}
@Ignore("Currently we cannote recognize if a name is a commit-ish or a path, "
+ "so 'git reset a' will not work if 'a' is not a branch name but a file path")
@Test
public void testResetPathNoDoubleDashNoRef() throws Exception {
resetPath(false, false);
}
private void resetPath(boolean useDoubleDash, boolean supplyCommit)
throws Exception {
// create files a and b
writeTrashFile("a", "Hello world a");
writeTrashFile("b", "Hello world b");
// stage the files
git.add().addFilepattern(".").call();
// commit the files
RevCommit commit = git.commit().setMessage("files a & b").call();
// change both files a and b
writeTrashFile("a", "New Hello world a");
writeTrashFile("b", "New Hello world b");
// stage the files
git.add().addFilepattern(".").call();
// reset only file a
String cmd = String.format("git reset %s%s a",
supplyCommit ? commit.getId().name() : "",
useDoubleDash ? " --" : "");
assertStringArrayEquals("", execute(cmd));
assertEquals(commit.getId(),
git.getRepository().exactRef("HEAD").getObjectId());
org.eclipse.jgit.api.Status status = git.status().call();
// assert that file a is unstaged
assertArrayEquals(new String[] { "a" },
status.getModified().toArray());
// assert that file b is still staged
assertArrayEquals(new String[] { "b" },
status.getChanged().toArray());
}
}
|