diff options
Diffstat (limited to 'object-name.c')
-rw-r--r-- | object-name.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/object-name.c b/object-name.c index 7dd6e5e475..523af6f64f 100644 --- a/object-name.c +++ b/object-name.c @@ -8,7 +8,6 @@ #include "tag.h" #include "commit.h" #include "tree.h" -#include "blob.h" #include "tree-walk.h" #include "refs.h" #include "remote.h" @@ -21,7 +20,6 @@ #include "read-cache-ll.h" #include "repository.h" #include "setup.h" -#include "submodule.h" #include "midx.h" #include "commit-reach.h" #include "date.h" @@ -1060,6 +1058,15 @@ static int get_oid_basic(struct repository *r, const char *str, int len, len, str, show_date(co_time, co_tz, DATE_MODE(RFC2822))); } + } else if (nth == co_cnt && !is_null_oid(oid)) { + /* + * We were asked for the Nth reflog (counting + * from 0), but there were only N entries. + * read_ref_at() will have returned "1" to tell + * us it did not find an entry, but it did + * still fill in the oid with the "old" value, + * which we can use. + */ } else { if (flags & GET_OID_QUIETLY) { exit(128); @@ -1505,7 +1512,7 @@ int repo_get_oid_mb(struct repository *r, struct object_id *oid) { struct commit *one, *two; - struct commit_list *mbs; + struct commit_list *mbs = NULL; struct object_id oid_tmp; const char *dots; int st; @@ -1533,7 +1540,10 @@ int repo_get_oid_mb(struct repository *r, two = lookup_commit_reference_gently(r, &oid_tmp, 0); if (!two) return -1; - mbs = repo_get_merge_bases(r, one, two); + if (repo_get_merge_bases(r, one, two, &mbs) < 0) { + free_commit_list(mbs); + return -1; + } if (!mbs || mbs->next) st = -1; else { |