2009/2/3 Shawn O. Pearce <spearce@xxxxxxxxxxx>: > You are missing the final step of updating the HEAD ref with the > commit. Calling commit() on the Commit object only writes it to > the object database, this is similar to git-commit-tree. > > Try adding on the end: > > RefUpdate ru = db.updateRef(Constants.HEAD); > ru.setRefLogMessage("commit"); > ru.setNewObjectId(c1.getCommitId()); > assertSame(RefUpdate.Result.NEW, ru.update()); > > If your commit had parents, you might want to do instead: > > ru.setExpectedOldObjectId(oldHEAD); > assertSame(RefUpdate.Result.FAST_FORWARD, ru.update()); > > where oldHEAD is the value of HEAD you read and used as the first > parent of the commit. This ensures that the update method fails > if someone else has updated HEAD since you last read it. > > The update method returns a number of different states, usually we > check its result with a switch statement as a number of states are > sometimes permissible in a context. Sometimes though, you know it > has to be exactly one state, and everything else is a failure. > I updated my simple test like this: package org.spearce.jgit.lib; import java.io.File; import java.io.IOException; public class CommitTest extends RepositoryTestCase { public void testASimpleCommit() throws IOException { recursiveDelete(trash_git, false, null, true); db = new Repository(trash_git); db.create(); GitIndex index = new GitIndex(db); index.filemode = Boolean.TRUE; commitIndex(index, "commit 1"); File file1 = writeTrashFile("file1", "file1"); index.add(trash, file1); commitIndex(index, "commit 2"); } private void commitIndex(GitIndex index, String commitMessage) throws IOException { index.write(); ObjectId objectId = index.writeTree(); Tree tree = db.mapTree(objectId); final Commit commit = new Commit(db); commit.setAuthor(new PersonIdent(jauthor, 1154236443000L, -4 * 60)); commit.setCommitter(new PersonIdent(jcommitter, 1154236443000L, -4 * 60)); commit.setMessage(commitMessage); commit.setTree(tree); assertEquals(tree.getTreeId(), commit.getTreeId()); commit.commit(); ObjectWriter writer = new ObjectWriter(db); commit.setCommitId(writer.writeCommit(commit)); Ref oldHEAD = db.getAllRefs().get(Constants.HEAD); final RefUpdate ru = db.updateRef(Constants.HEAD); ru.setNewObjectId(commit.getCommitId()); ru.setRefLogMessage(commitMessage, false); if (oldHEAD != null) { // commit has parents ru.setExpectedOldObjectId(oldHEAD.getObjectId()); assertSame(RefUpdate.Result.FAST_FORWARD, ru.update()); } else { // commit has no parents assertSame(RefUpdate.Result.NEW, ru.update()); } } } The first commit "with an empty workspace" is ok. I can see the commit in the log. The second commit fails, with ru.update() = REJECTED. I tried different combination, without success. If someone could tell me, what I am doing wrong... Yann -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html