$(git notes merge FETCH_HEAD) doesn't work
- From
Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
- Date
- Feb 20, 2014, 15:30 UTC
- Message-ID
- <20140220153045.GI6988@pengutronix.de>
Hello,
I started playing around with sharing git notes and so was happy to see that git-notes learned about merging since I last tried.
My first try looked as follows (using git 1:1.9.0-1 from Debian):
$ git fetch $someremote refs/notes/commits ... $ git notes merge FETCH_HEAD $ echo $? 0 $ git log --oneline refs/notes/commits..FETCH_HEAD | wc -l 2
Looking at the source I see:
/* argv[0] holds "FETCH_HEAD" here */ strbuf_addstr(&remote_ref, argv[0]); expand_notes_ref(&remote_ref);
After the call to expand_notes_ref remote_ref contains "refs/notes/FETCH_HEAD" which isn't what I intended and I'm quite surprised by. The problem seems to be:
/* Dereference o->remote_ref into remote_sha1 */
if (get_sha1(o->remote_ref, remote_sha1)) {
/*
* Failed to get remote_sha1. If o->remote_ref looks like an
* unborn ref, perform the merge using an empty notes tree.
*/
if (!check_refname_format(o->remote_ref, 0)) {
hashclr(remote_sha1);
remote = NULL;
} else {
die("Failed to resolve remote notes ref '%s'",
o->remote_ref);
}
} ...The workaround is obvious (i.e. git update-ref refs/notes/somestring FETCH_HEAD; git notes merge somestring), but still I think this behaviour is not optimal. I don't know why one might want to treat a broken remote side as empty but at least a diagnostic message would be nice. The same happens if I pass an explicit sha1 instead of "FETCH_HEAD".
Best regards Uwe
-- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | http://www.pengutronix.de/ |