diff options
author | Junio C Hamano <gitster@pobox.com> | 2010-08-02 14:37:06 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-08-02 14:40:48 -0700 |
commit | f7bff00314f473be1ef6c166e91447fabd1822d8 (patch) | |
tree | bfd809d20098f6284ff42754bc7b26e33495f3d3 /sha1_name.c | |
parent | 593ce2bea5dad436e87b5dd37c205961d73feae9 (diff) | |
download | git-f7bff00314f473be1ef6c166e91447fabd1822d8.tar.gz |
sha1_name.c: fix parsing of ":/token" syntax
The parser tried to clean up the object flags it used while finding
commits with matching string, but was not doing a very good job at it.
This caused "checkout -b new ':/token'", which internally tries to parse
':/token' twice as an object name, to fail when the commit in question
was reachable from only one ref.
The mask bits given to pop_most_recent_commit(&list, MASK) means "I have
already been on the list to be processed, so please do not place me again
even if I am found to be a parent of some other commit on the list." So
mark them when we add them to the list at the beginning.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'sha1_name.c')
-rw-r--r-- | sha1_name.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/sha1_name.c b/sha1_name.c index bf92417838..8a551025f0 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -659,6 +659,16 @@ static int get_sha1_1(const char *name, int len, unsigned char *sha1) return get_short_sha1(name, len, sha1, 0); } +/* + * This interprets names like ':/Initial revision of "git"' by searching + * through history and returning the first commit whose message starts + * with the given string. + * + * For future extension, ':/!' is reserved. If you want to match a message + * beginning with a '!', you have to repeat the exclamation mark. + */ +#define ONELINE_SEEN (1u<<20) + static int handle_one_ref(const char *path, const unsigned char *sha1, int flag, void *cb_data) { @@ -674,19 +684,10 @@ static int handle_one_ref(const char *path, if (object->type != OBJ_COMMIT) return 0; insert_by_date((struct commit *)object, list); + object->flags |= ONELINE_SEEN; return 0; } -/* - * This interprets names like ':/Initial revision of "git"' by searching - * through history and returning the first commit whose message starts - * with the given string. - * - * For future extension, ':/!' is reserved. If you want to match a message - * beginning with a '!', you have to repeat the exclamation mark. - */ - -#define ONELINE_SEEN (1u<<20) static int get_sha1_oneline(const char *prefix, unsigned char *sha1) { struct commit_list *list = NULL, *backup = NULL, *l; |