Junio C Hamano <gitster@xxxxxxxxx> writes: > This series teaches the sha1_name machinery to only look for > unambigous commit object names when the caller knows that the name > must refer to a commit object. [...] > - You will further be able to extend the lifetime of uniqueness of > "git describe" output if you take advantage of the "tagname" or > "number". The current parser does not do this. > > There are a number of ways to do this, but probably the cleanest > would be to (you only can do this when you have "tagname" tag > locally; you may not have it) pass the tag and the number down to > the find_short_*() routines with commit_only set, and when they > find a commit that match the prefix, inside is_commit_object() > test, check also that the commit reaches the given tag object in > the given number steps (otherwise discard it as it is not the one > you are looking for). > > - Some callers that are involved in the get_sha1_1() callpath know > that the name they have must be referring to commit objects (e.g. > get_parent() and get_nth_ancestor()). It might be worthwhile to > let get_sha1_1() know that the caller knows the name it is > feeding must refer to a commit object, and have the uniqueness > logic take advantage of it. > > I think that most of these callers are expecting to parse a > committish and the user may have given them the name of a a tag > object that peels to a commit, so you would need to add a new > GET_SHORT_COMMITTISH that allows any committish, in addition to > the GET_SHORT_COMMIT_ONLY this series adds, if you want to do > this. Two random thoughts: * The commit_only flag is only one thing you may "know" about the parsing, as you state above. E.g., we may know the distance from a certain tag. Given this, wouldn't it be cleaner to patch a struct things_we_know into the call chain instead of only a flag? * The treeish:path syntax also "knows" that the left side must be or peel to a tree, so it makes no sense to go looking for a blob. -- Thomas Rast trast@{inf,student}.ethz.ch -- 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