/*
- * Copyright (C) 2011, Chris Aniszczyk <caniszczyk@gmail.com>
+ * Copyright (C) 2011, 2013 Chris Aniszczyk <caniszczyk@gmail.com>
* and other copyright owners as documented in the project's IP log.
*
* This program and the accompanying materials are made available
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Ref;
-import org.eclipse.jgit.lib.RefUpdate;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevBlob;
import org.eclipse.jgit.revwalk.RevCommit;
writeTrashFile("Test.txt", "Hello world");
git.add().addFilepattern("Test.txt").call();
git.commit().setMessage("Initial commit").call();
+ git.tag().setName("tag-initial").setMessage("Tag initial").call();
- // create a master branch and switch to it
- git.branchCreate().setName("test").call();
- RefUpdate rup = db.updateRef(Constants.HEAD);
- rup.link("refs/heads/test");
+ // create a test branch and switch to it
+ git.checkout().setCreateBranch(true).setName("test").call();
// commit something on the test branch
writeTrashFile("Test.txt", "Some change");
.branchList().setListMode(ListMode.ALL).call()));
}
+ @Test
+ public void testCloneRepositoryWithBranchShortName() throws Exception {
+ File directory = createTempDirectory("testCloneRepositoryWithBranch");
+ CloneCommand command = Git.cloneRepository();
+ command.setBranch("test");
+ command.setDirectory(directory);
+ command.setURI("file://" + git.getRepository().getWorkTree().getPath());
+ Git git2 = command.call();
+ addRepoToClose(git2.getRepository());
+
+ assertNotNull(git2);
+ assertEquals("refs/heads/test", git2.getRepository().getFullBranch());
+ }
+
+ @Test
+ public void testCloneRepositoryWithTagName() throws Exception {
+ File directory = createTempDirectory("testCloneRepositoryWithBranch");
+ CloneCommand command = Git.cloneRepository();
+ command.setBranch("tag-initial");
+ command.setDirectory(directory);
+ command.setURI("file://" + git.getRepository().getWorkTree().getPath());
+ Git git2 = command.call();
+ addRepoToClose(git2.getRepository());
+
+ assertNotNull(git2);
+ ObjectId taggedCommit = db.resolve("tag-initial^{commit}");
+ assertEquals(taggedCommit.name(), git2
+ .getRepository().getFullBranch());
+ }
+
@Test
public void testCloneRepositoryOnlyOneBranch() throws IOException,
JGitInternalException, GitAPIException {
/*
- * Copyright (C) 2011, Chris Aniszczyk <caniszczyk@gmail.com>
+ * Copyright (C) 2011, 2013 Chris Aniszczyk <caniszczyk@gmail.com>
* and other copyright owners as documented in the project's IP log.
*
* This program and the accompanying materials are made available
throws MissingObjectException, IncorrectObjectTypeException,
IOException, GitAPIException {
- Ref head = result.getAdvertisedRef(branch);
+ Ref head = null;
if (branch.equals(Constants.HEAD)) {
Ref foundBranch = findBranchToCheckout(result);
if (foundBranch != null)
head = foundBranch;
}
+ if (head == null) {
+ head = result.getAdvertisedRef(branch);
+ if (head == null)
+ head = result.getAdvertisedRef(Constants.R_HEADS + branch);
+ if (head == null)
+ head = result.getAdvertisedRef(Constants.R_TAGS + branch);
+ }
if (head == null || head.getObjectId() == null)
return; // throw exception?
/**
* @param branch
- * the initial branch to check out when cloning the repository
+ * the initial branch to check out when cloning the repository.
+ * Can be specified as ref name (<code>refs/heads/master</code>),
+ * branch name (<code>master</code>) or tag name (<code>v1.2.3</code>).
* @return this instance
*/
public CloneCommand setBranch(String branch) {
/**
* @param branchesToClone
* collection of branches to clone. Ignored when allSelected is
- * true.
+ * true. Must be specified as full ref names (e.g.
+ * <code>refs/heads/master</code>).
* @return {@code this}
*/
public CloneCommand setBranchesToClone(Collection<String> branchesToClone) {