diff options
author | Junio C Hamano <gitster@pobox.com> | 2020-03-27 03:11:21 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-03-27 03:11:21 +0300 |
commit | fb4175b0e4bec59b97dae84a0073d8a5334508d6 (patch) | |
tree | 737f3835be75b15214fa58b42594f912d36c9c66 /commit.c | |
parent | 4e4baee3f44da26a5eaab27c76d597b04fef5259 (diff) | |
parent | f08132f889c00a8108f61541e047649ad0e660e4 (diff) |
Merge branch 'at/rebase-fork-point-regression-fix'
The "--fork-point" mode of "git rebase" regressed when the command
was rewritten in C back in 2.20 era, which has been corrected.
* at/rebase-fork-point-regression-fix:
rebase: --fork-point regression fix
Diffstat (limited to 'commit.c')
-rw-r--r-- | commit.c | 15 |
1 files changed, 13 insertions, 2 deletions
@@ -927,12 +927,22 @@ struct commit *get_fork_point(const char *refname, struct commit *commit) struct commit_list *bases; int i; struct commit *ret = NULL; + char *full_refname; + + switch (dwim_ref(refname, strlen(refname), &oid, &full_refname)) { + case 0: + die("No such ref: '%s'", refname); + case 1: + break; /* good */ + default: + die("Ambiguous refname: '%s'", refname); + } memset(&revs, 0, sizeof(revs)); revs.initial = 1; - for_each_reflog_ent(refname, collect_one_reflog_ent, &revs); + for_each_reflog_ent(full_refname, collect_one_reflog_ent, &revs); - if (!revs.nr && !get_oid(refname, &oid)) + if (!revs.nr) add_one_commit(&oid, &revs); for (i = 0; i < revs.nr; i++) @@ -958,6 +968,7 @@ struct commit *get_fork_point(const char *refname, struct commit *commit) cleanup_return: free_commit_list(bases); + free(full_refname); return ret; } |