This is take 5. The earlier rounds were $gmane/200165, 200387, 200506 and 200869. Except that the typo advise function is now called "maybe_die_on_misspelt_object_name()", per discussion with Matthieu, the early part of the series up to "restructure disambiguation" (Patch #9) is the same as before. I thought the thinking behind the fix to a minor regression pointed out by Peff deserves to be kept as a separate commit, so it appears as such as Patch #10. Patches #20-#24 are new. The test script added in Patch #13 includes the tests for these new features, all start as "expect-failure", and these flip them to "expect-success" as they implement them. The last one #25 adds a new option to rev-parse to let you enumerate objects that would match if you give too short an abbreviation. It would independently help the issue in "blame" output that did not attempt to make the commit object names unique, reported in $gmane/200839. Junio C Hamano (25): sha1_name.c: indentation fix sha1_name.c: hide get_sha1_with_context_1() ugliness sha1_name.c: get rid of get_sha1_with_mode_1() sha1_name.c: get rid of get_sha1_with_mode() sha1_name.c: clarify what "fake" is for in find_short_object_filename() sha1_name.c: rename "now" to "current" sha1_name.c: refactor find_short_packed_object() sha1_name.c: correct misnamed "canonical" and "res" sha1_name.c: restructure disambiguation of short names get_sha1(): fix error status regression sha1_name.c: allow get_short_sha1() to take other flags sha1_name.c: teach get_short_sha1() a commit-only option sha1_name.c: get_describe_name() by definition groks only commits sha1_name.c: get_sha1_1() takes lookup flags sha1_name.c: many short names can only be committish sha1_name.c: teach lookup context to get_sha1_with_context() sha1_name.c: introduce get_sha1_committish() revision.c: allow handle_revision_arg() to take other flags revision.c: the "log" family, except for "show", takes committish sha1_name.c: add support for disambiguating other types apply: --build-fake-ancestor expects blobs commit-tree: the command wants a tree and commits reset: the command takes committish rev-parse: A and B in "rev-parse A..B" refer to committish rev-parse --disambiguate=<prefix> Documentation/git-rev-parse.txt | 6 + builtin/apply.c | 2 +- builtin/cat-file.c | 2 +- builtin/commit-tree.c | 8 +- builtin/log.c | 3 + builtin/pack-objects.c | 2 +- builtin/reset.c | 10 +- builtin/rev-parse.c | 14 +- cache.h | 28 +- commit.c | 2 +- revision.c | 38 +-- revision.h | 5 +- setup.c | 8 +- sha1_name.c | 494 ++++++++++++++++++++++++++---------- t/t1512-rev-parse-disambiguation.sh | 263 +++++++++++++++++++ 15 files changed, 713 insertions(+), 172 deletions(-) create mode 100755 t/t1512-rev-parse-disambiguation.sh -- 1.7.11.1.229.g706c98f -- 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