Merge "Add "all" parameter to the commit Command"

This commit is contained in:
Chris Aniszczyk 2010-08-05 15:02:59 -04:00 committed by Code Review
commit b69900a415
2 changed files with 63 additions and 0 deletions

View File

@ -45,6 +45,7 @@
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import org.eclipse.jgit.errors.UnmergedPathException;
import org.eclipse.jgit.lib.Constants;
@ -53,6 +54,7 @@
import org.eclipse.jgit.lib.RefUpdate;
import org.eclipse.jgit.lib.RepositoryTestCase;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.treewalk.TreeWalk;
public class CommitAndLogCommandTests extends RepositoryTestCase {
public void testSomeCommits() throws NoHeadException, NoMessageException,
@ -151,4 +153,36 @@ public void testMergeEmptyBranches() throws IOException, NoHeadException,
assertEquals(parents[1], second);
assertTrue(parents.length==2);
}
public void testAddUnstagedChanges() throws IOException, NoHeadException,
NoMessageException, ConcurrentRefUpdateException,
JGitInternalException, WrongRepositoryStateException,
NoFilepatternException {
File file = new File(db.getWorkTree(), "a.txt");
file.createNewFile();
PrintWriter writer = new PrintWriter(file);
writer.print("content");
writer.close();
Git git = new Git(db);
git.add().addFilepattern("a.txt").call();
RevCommit commit = git.commit().setMessage("initial commit").call();
TreeWalk tw = TreeWalk.forPath(db, "a.txt", commit.getTree());
assertEquals("6b584e8ece562ebffc15d38808cd6b98fc3d97ea",
tw.getObjectId(0).getName());
writer = new PrintWriter(file);
writer.print("content2");
writer.close();
commit = git.commit().setMessage("second commit").call();
tw = TreeWalk.forPath(db, "a.txt", commit.getTree());
assertEquals("6b584e8ece562ebffc15d38808cd6b98fc3d97ea",
tw.getObjectId(0).getName());
commit = git.commit().setAll(true).setMessage("third commit")
.setAll(true).call();
tw = TreeWalk.forPath(db, "a.txt", commit.getTree());
assertEquals("db00fd65b218578127ea51f3dffac701f12f486a",
tw.getObjectId(0).getName());
}
}

View File

@ -79,6 +79,8 @@ public class CommitCommand extends GitCommand<RevCommit> {
private String message;
private boolean all;
/**
* parents this commit should have. The current HEAD will be in this list
* and also all commits mentioned in .git/MERGE_HEAD
@ -127,6 +129,18 @@ public RevCommit call() throws NoHeadException, NoMessageException,
processOptions(state);
try {
if (all && !repo.isBare() && repo.getWorkTree() != null) {
Git git = new Git(repo);
try {
git.add()
.addFilepattern(".")
.setUpdate(true).call();
} catch (NoFilepatternException e) {
// should really not happen
throw new JGitInternalException(e.getMessage(), e);
}
}
Ref head = repo.getRef(Constants.HEAD);
if (head == null)
throw new NoHeadException(
@ -353,4 +367,19 @@ public CommitCommand setAuthor(String name, String email) {
public PersonIdent getAuthor() {
return author;
}
/**
* If set to true the Commit command automatically stages files that have
* been modified and deleted, but new files you not known by the repository
* are not affected. This corresponds to the parameter -a on the command
* line.
*
* @param all
* @return {@code this}
*/
public CommitCommand setAll(boolean all) {
this.all = all;
return this;
}
}