244 lines
7.3 KiB
Java
244 lines
7.3 KiB
Java
/*
|
|
* Copyright (C) 2012, 2014 IBM Corporation and others. 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.assertEquals;
|
|
import static org.junit.Assert.assertFalse;
|
|
import static org.junit.Assert.assertTrue;
|
|
import static org.junit.Assert.fail;
|
|
|
|
import java.io.File;
|
|
|
|
import org.eclipse.jgit.api.Git;
|
|
import org.eclipse.jgit.lib.CLIRepositoryTestCase;
|
|
import org.eclipse.jgit.lib.Constants;
|
|
import org.eclipse.jgit.lib.RefUpdate;
|
|
import org.eclipse.jgit.pgm.internal.CLIText;
|
|
import org.eclipse.jgit.revwalk.RevCommit;
|
|
import org.junit.Before;
|
|
import org.junit.Test;
|
|
|
|
public class BranchTest extends CLIRepositoryTestCase {
|
|
@Override
|
|
@Before
|
|
public void setUp() throws Exception {
|
|
super.setUp();
|
|
try (Git git = new Git(db)) {
|
|
git.commit().setMessage("initial commit").call();
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testHelpAfterDelete() throws Exception {
|
|
String err = toString(executeUnchecked("git branch -d"));
|
|
String help = toString(executeUnchecked("git branch -h"));
|
|
String errAndHelp = toString(executeUnchecked("git branch -d -h"));
|
|
assertEquals(CLIText.fatalError(CLIText.get().branchNameRequired), err);
|
|
assertEquals(toString(err, help), errAndHelp);
|
|
}
|
|
|
|
@Test
|
|
public void testList() throws Exception {
|
|
assertEquals("* master", toString(execute("git branch")));
|
|
assertEquals("* master 6fd41be initial commit",
|
|
toString(execute("git branch -v")));
|
|
}
|
|
|
|
@Test
|
|
public void testListDetached() throws Exception {
|
|
RefUpdate updateRef = db.updateRef(Constants.HEAD, true);
|
|
updateRef.setNewObjectId(db.resolve("6fd41be"));
|
|
updateRef.update();
|
|
assertEquals(
|
|
toString("* (no branch) 6fd41be initial commit",
|
|
"master 6fd41be initial commit"),
|
|
toString(execute("git branch -v")));
|
|
}
|
|
|
|
@Test
|
|
public void testListContains() throws Exception {
|
|
try (Git git = new Git(db)) {
|
|
git.branchCreate().setName("initial").call();
|
|
RevCommit second = git.commit().setMessage("second commit")
|
|
.call();
|
|
assertEquals(toString(" initial", "* master"),
|
|
toString(execute("git branch --contains 6fd41be")));
|
|
assertEquals("* master",
|
|
toString(execute("git branch --contains " + second.name())));
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testExistingBranch() throws Exception {
|
|
assertEquals("fatal: A branch named 'master' already exists.",
|
|
toString(executeUnchecked("git branch master")));
|
|
}
|
|
|
|
@Test
|
|
public void testRenameSingleArg() throws Exception {
|
|
try {
|
|
toString(execute("git branch -m"));
|
|
fail("Must die");
|
|
} catch (Die e) {
|
|
// expected, requires argument
|
|
}
|
|
String result = toString(execute("git branch -m slave"));
|
|
assertEquals("", result);
|
|
result = toString(execute("git branch -a"));
|
|
assertEquals("* slave", result);
|
|
}
|
|
|
|
@Test
|
|
public void testRenameTwoArgs() throws Exception {
|
|
String result = toString(execute("git branch -m master slave"));
|
|
assertEquals("", result);
|
|
result = toString(execute("git branch -a"));
|
|
assertEquals("* slave", result);
|
|
}
|
|
|
|
@Test
|
|
public void testCreate() throws Exception {
|
|
try {
|
|
toString(execute("git branch a b"));
|
|
fail("Must die");
|
|
} catch (Die e) {
|
|
// expected, too many arguments
|
|
}
|
|
String result = toString(execute("git branch second"));
|
|
assertEquals("", result);
|
|
result = toString(execute("git branch"));
|
|
assertEquals(toString("* master", "second"), result);
|
|
result = toString(execute("git branch -v"));
|
|
assertEquals(toString("* master 6fd41be initial commit",
|
|
"second 6fd41be initial commit"), result);
|
|
}
|
|
|
|
@Test
|
|
public void testDelete() throws Exception {
|
|
try {
|
|
toString(execute("git branch -d"));
|
|
fail("Must die");
|
|
} catch (Die e) {
|
|
// expected, requires argument
|
|
}
|
|
String result = toString(execute("git branch second"));
|
|
assertEquals("", result);
|
|
result = toString(execute("git branch -d second"));
|
|
assertEquals("", result);
|
|
result = toString(execute("git branch"));
|
|
assertEquals("* master", result);
|
|
}
|
|
|
|
@Test
|
|
public void testDeleteMultiple() throws Exception {
|
|
String result = toString(execute("git branch second",
|
|
"git branch third", "git branch fourth"));
|
|
assertEquals("", result);
|
|
result = toString(execute("git branch -d second third fourth"));
|
|
assertEquals("", result);
|
|
result = toString(execute("git branch"));
|
|
assertEquals("* master", result);
|
|
}
|
|
|
|
@Test
|
|
public void testDeleteForce() throws Exception {
|
|
try {
|
|
toString(execute("git branch -D"));
|
|
fail("Must die");
|
|
} catch (Die e) {
|
|
// expected, requires argument
|
|
}
|
|
String result = toString(execute("git branch second"));
|
|
assertEquals("", result);
|
|
result = toString(execute("git checkout second"));
|
|
assertEquals("Switched to branch 'second'", result);
|
|
|
|
File a = writeTrashFile("a", "a");
|
|
assertTrue(a.exists());
|
|
execute("git add a", "git commit -m 'added a'");
|
|
|
|
result = toString(execute("git checkout master"));
|
|
assertEquals("Switched to branch 'master'", result);
|
|
|
|
result = toString(execute("git branch"));
|
|
assertEquals(toString("* master", "second"), result);
|
|
|
|
try {
|
|
toString(execute("git branch -d second"));
|
|
fail("Must die");
|
|
} catch (Die e) {
|
|
// expected, the current HEAD is on second and not merged to master
|
|
}
|
|
result = toString(execute("git branch -D second"));
|
|
assertEquals("", result);
|
|
|
|
result = toString(execute("git branch"));
|
|
assertEquals("* master", result);
|
|
}
|
|
|
|
@Test
|
|
public void testDeleteForceMultiple() throws Exception {
|
|
String result = toString(execute("git branch second",
|
|
"git branch third", "git branch fourth"));
|
|
|
|
assertEquals("", result);
|
|
result = toString(execute("git checkout second"));
|
|
assertEquals("Switched to branch 'second'", result);
|
|
|
|
File a = writeTrashFile("a", "a");
|
|
assertTrue(a.exists());
|
|
execute("git add a", "git commit -m 'added a'");
|
|
|
|
result = toString(execute("git checkout master"));
|
|
assertEquals("Switched to branch 'master'", result);
|
|
|
|
result = toString(execute("git branch"));
|
|
assertEquals(toString("fourth", "* master", "second", "third"), result);
|
|
|
|
try {
|
|
toString(execute("git branch -d second third fourth"));
|
|
fail("Must die");
|
|
} catch (Die e) {
|
|
// expected, the current HEAD is on second and not merged to master
|
|
}
|
|
result = toString(execute("git branch"));
|
|
assertEquals(toString("fourth", "* master", "second", "third"), result);
|
|
|
|
result = toString(execute("git branch -D second third fourth"));
|
|
assertEquals("", result);
|
|
|
|
result = toString(execute("git branch"));
|
|
assertEquals("* master", result);
|
|
}
|
|
|
|
@Test
|
|
public void testCreateFromOldCommit() throws Exception {
|
|
File a = writeTrashFile("a", "a");
|
|
assertTrue(a.exists());
|
|
execute("git add a", "git commit -m 'added a'");
|
|
File b = writeTrashFile("b", "b");
|
|
assertTrue(b.exists());
|
|
execute("git add b", "git commit -m 'added b'");
|
|
String result = toString(execute("git log -n 1 --reverse"));
|
|
String firstCommitId = result.substring("commit ".length(),
|
|
result.indexOf('\n'));
|
|
|
|
result = toString(execute("git branch -f second " + firstCommitId));
|
|
assertEquals("", result);
|
|
|
|
result = toString(execute("git branch"));
|
|
assertEquals(toString("* master", "second"), result);
|
|
|
|
result = toString(execute("git checkout second"));
|
|
assertEquals("Switched to branch 'second'", result);
|
|
assertFalse(b.exists());
|
|
}
|
|
}
|