Jeff King <p...@peff.net> writes:
> Subject: merge-base: handle --fork-point without reflog
> The --fork-point option looks in the reflog to try to find
> where a derived branch forked from a base branch. However,
> if the reflog for the base branch is totally empty (as it
> commonly is right after cloning, which does not write a
> reflog entry), then our for_each_reflog call will not find
> any entries, and we will come up with no merge base, even
> though there may be one with the current tip of the base.
> We can fix this by just adding the current tip to
> our list of collected entries.
> Signed-off-by: Jeff King <p...@peff.net>
> It would actually be correct to just unconditionally add the ref tip, as
> add_one_commit already drops duplicates. But it would only be necessary
> in other cases if you have a broken reflog which is missing the entry
> that moved us to the current tip.
Makes sense. And doing conditionally is not much more work ;-)
> builtin/merge-base.c | 3 +++
> t/t6010-merge-base.sh | 6 ++++++
> 2 files changed, 9 insertions(+)
> diff --git a/builtin/merge-base.c b/builtin/merge-base.c
> index c0d1822..b572a37 100644
> --- a/builtin/merge-base.c
> +++ b/builtin/merge-base.c
> @@ -173,6 +173,9 @@ static int handle_fork_point(int argc, const char **argv)
> revs.initial = 1;
> for_each_reflog_ent(refname, collect_one_reflog_ent, &revs);
> + if (!revs.nr && !get_sha1(refname, sha1))
> + add_one_commit(sha1, &revs);
> for (i = 0; i < revs.nr; i++)
> revs.commit[i]->object.flags &= ~TMP_MARK;
> diff --git a/t/t6010-merge-base.sh b/t/t6010-merge-base.sh
> index e0c5f44..31db7b5 100755
> --- a/t/t6010-merge-base.sh
> +++ b/t/t6010-merge-base.sh
> @@ -260,6 +260,12 @@ test_expect_success 'using reflog to find the fork
> point' '
> test_cmp expect3 actual
> +test_expect_success '--fork-point works with empty reflog' '
> + git -c core.logallrefupdates=false branch no-reflog base &&
> + git merge-base --fork-point no-reflog derived &&
> + test_cmp expect3 actual
> test_expect_success 'merge-base --octopus --all for complex tree' '
> # Best common ancestor for JE, JAA and JDD is JC
> # JE