git-rev-list: do not forget non-commit refs
authorLinus Torvalds <torvalds@osdl.org>
Wed, 26 Oct 2005 15:18:13 +0000 (08:18 -0700)
committerJunio C Hamano <junkio@cox.net>
Wed, 26 Oct 2005 23:49:38 +0000 (16:49 -0700)
commit19a7e7151d0dfd22619daabbaa72a24715fae0ca
tree3ca68b1297caede2fa4d730b67135d617f02bdc5
parent7b34c2fae0d2875b35ad1cc0e416b9c2b9b02b1f
git-rev-list: do not forget non-commit refs

What happens is that the new logic decides that if it can't look up a
commit reference (ie "get_commit_reference()" returns NULL), the thing
must be a pathname.

Fair enough.

But wrong.

The thing is, it may be a perfectly fine ref that _isn't_ a commit. In
git, you have a tag that points to your PGP key, and in the kernel, I have
a tag that points to a tree (and a direct ref that points to that tree
too, for that matter).

So the rule is (as for all the other programs that mix revs and pathnames)
not that we only accept commit references, but _any_ valid object ref.

If the object then isn't a commit ref, git-rev-list will either ignore it,
or add it to the list of non-commit objects (if using "--objects").

The solution is to move the "get_sha1()" out of get_commit_reference(),
and into the callers. In fact, we already _have_ the SHA1 in the case of
the handle_all() loop, since for_each_ref() will have done it for us, so
this is the correct thing to do anyway.

This patch (on top of the original one) does exactly that.

Signed-off-by: Junio C Hamano <junkio@cox.net>
rev-list.c