git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Shawn O. Pearce" <spearce@spearce.org>
To: Yann Simon <yann.simon.fr@gmail.com>
Cc: Robin Rosenberg <robin.rosenberg@dewire.com>, git@vger.kernel.org
Subject: Re: [JGIT] help needed to create a siimple commit
Date: Tue, 3 Feb 2009 07:51:07 -0800	[thread overview]
Message-ID: <20090203155107.GU26880@spearce.org> (raw)
In-Reply-To: <551f769b0902030307s2a9204cch7967df17c1f2c8a6@mail.gmail.com>

Yann Simon <yann.simon.fr@gmail.com> wrote:
> I wrote the following unit test to learn how to make a commit
> with JGIT:
> 
> 	public void testASimpleCommit() throws IOException {
> 		
> 		GitIndex index = new GitIndex(db);
> 		index.filemode = Boolean.TRUE;
> 		
> 		File file;
> 		file = writeTrashFile("file1", "file1");
> 		
> 		index.add(trash, file);
> 		index.write();
> 		ObjectId objectId = index.writeTree();
> 		Tree tree = db.mapTree(objectId);
> 		tree.accept(new WriteTree(trash, db), TreeEntry.MODIFIED_ONLY);
> 		
> 		final Commit c1 = new Commit(db);
> 		c1.setAuthor(new PersonIdent(jauthor, 1154236443000L, -4 * 60));
> 		c1.setCommitter(new PersonIdent(jcommitter, 1154236443000L, -4 * 60));
> 		c1.setMessage("A Commit\n");
> 		c1.setTree(tree);
> 		assertEquals(tree.getTreeId(), c1.getTreeId());
> 		c1.commit();

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.

-- 
Shawn.

  reply	other threads:[~2009-02-03 15:52 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-03 11:07 [JGIT] help needed to create a siimple commit Yann Simon
2009-02-03 15:51 ` Shawn O. Pearce [this message]
2009-02-04 16:10   ` Yann Simon
2009-02-04 17:07     ` Shawn O. Pearce

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090203155107.GU26880@spearce.org \
    --to=spearce@spearce.org \
    --cc=git@vger.kernel.org \
    --cc=robin.rosenberg@dewire.com \
    --cc=yann.simon.fr@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).