aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/ResetTest.java
blob: d878232a37c567ca8efec57fa43de60a88f921ce (plain)
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());
	}

}