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;
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,
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());
+ }
}
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
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(
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;
+ }
+
}