Modifies get_sha1_basic to accept a gently parameter to indicate whether error should be used to report the log limit exceeded condition. Prior to this change, git rev-parse master@{99999} reported: error: Log for 'master' only has 166 entries. master@{99999} error: Log for 'master' only has 166 entries. fatal: ambiguous argument 'master@{99999}': unknown revision or path not in the working tree. Use '--' to separate paths from revisions With this change, git rev-parse master@{99999} reports: master@{99999} error: Log for 'master' only has 166 entries. fatal: ambiguous argument 'master@{99999}': unknown revision or path not in the working tree. Use '--' to separate paths from revisions Note: git rev-parse --verify master@{99999} now does not report the error message although it does still exit with a non-zero status code. This is fixed by the next commit. Signed-off-by: Jon Seymour <jon.seymour@xxxxxxxxx> --- sha1_name.c | 31 ++++++++++++++++--------------- 1 files changed, 16 insertions(+), 15 deletions(-) diff --git a/sha1_name.c b/sha1_name.c index 82ad0f9..6e706eb 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -338,9 +338,9 @@ static inline int upstream_mark(const char *string, int len) return 0; } -static int get_sha1_1(const char *name, int len, unsigned char *sha1); +static int get_sha1_1(const char *name, int len, unsigned char *sha1, int gently); -static int get_sha1_basic(const char *str, int len, unsigned char *sha1) +static int get_sha1_basic(const char *str, int len, unsigned char *sha1, int gently) { static const char *warn_msg = "warning: refname '%.*s' is ambiguous."; char *real_ref = NULL; @@ -375,7 +375,7 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1) ret = interpret_branch_name(str+at, &buf); if (ret > 0) { /* substitute this branch name and restart */ - return get_sha1_1(buf.buf, buf.len, sha1); + return get_sha1_1(buf.buf, buf.len, sha1, 1); } else if (ret == 0) { return -1; } @@ -430,10 +430,11 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1) "back to %s.", len, str, show_date(co_time, co_tz, DATE_RFC2822)); else { - error("Log for '%.*s' only has %d entries.", - len, - str, - co_cnt); + if (!gently) + error("Log for '%.*s' only has %d entries.", + len, + str, + co_cnt); free(real_ref); return -1; } @@ -448,7 +449,7 @@ static int get_parent(const char *name, int len, unsigned char *result, int idx) { unsigned char sha1[20]; - int ret = get_sha1_1(name, len, sha1); + int ret = get_sha1_1(name, len, sha1, 1); struct commit *commit; struct commit_list *p; @@ -481,7 +482,7 @@ static int get_nth_ancestor(const char *name, int len, struct commit *commit; int ret; - ret = get_sha1_1(name, len, sha1); + ret = get_sha1_1(name, len, sha1, 1); if (ret) return ret; commit = lookup_commit_reference(sha1); @@ -504,7 +505,7 @@ struct object *peel_to_type(const char *name, int namelen, namelen = strlen(name); if (!o) { unsigned char sha1[20]; - if (get_sha1_1(name, namelen, sha1)) + if (get_sha1_1(name, namelen, sha1, 1)) return NULL; o = parse_object(sha1); } @@ -566,7 +567,7 @@ static int peel_onion(const char *name, int len, unsigned char *sha1) else return -1; - if (get_sha1_1(name, sp - name - 2, outer)) + if (get_sha1_1(name, sp - name - 2, outer, 1)) return -1; o = parse_object(outer); @@ -614,7 +615,7 @@ static int get_describe_name(const char *name, int len, unsigned char *sha1) return -1; } -static int get_sha1_1(const char *name, int len, unsigned char *sha1) +static int get_sha1_1(const char *name, int len, unsigned char *sha1, int gently) { int ret, has_suffix; const char *cp; @@ -650,7 +651,7 @@ static int get_sha1_1(const char *name, int len, unsigned char *sha1) if (!ret) return 0; - ret = get_sha1_basic(name, len, sha1); + ret = get_sha1_basic(name, len, sha1, gently); if (!ret) return 0; @@ -1059,7 +1060,7 @@ int get_sha1_with_context_1(const char *name, unsigned char *sha1, memset(oc, 0, sizeof(*oc)); oc->mode = S_IFINVALID; - ret = get_sha1_1(name, namelen, sha1); + ret = get_sha1_1(name, namelen, sha1, gently); if (!ret) return ret; /* sha1:path --> object name of path in ent sha1 @@ -1122,7 +1123,7 @@ int get_sha1_with_context_1(const char *name, unsigned char *sha1, strncpy(object_name, name, cp-name); object_name[cp-name] = '\0'; } - if (!get_sha1_1(name, cp-name, tree_sha1)) { + if (!get_sha1_1(name, cp-name, tree_sha1, 1)) { const char *filename = cp+1; ret = get_tree_entry(tree_sha1, filename, sha1, &oc->mode); if (!gently) { -- 1.7.2.1.156.gf148c -- 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