]> git.ipfire.org Git - thirdparty/git.git/commit - builtin/merge.c
merge: cleanup confusing logic for handling successful merges
authorElijah Newren <newren@gmail.com>
Tue, 23 Aug 2022 02:42:20 +0000 (02:42 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 24 Aug 2022 16:10:27 +0000 (09:10 -0700)
commit5b1d30cabfcdd7cb1dc990f22980af32aa6986a9
tree6e2cdbafdb05f3db3849e3b3d410eb2b1734bc9d
parent795ea8776befc95ea2becd8020c7a284677b4161
merge: cleanup confusing logic for handling successful merges

builtin/merge.c has a loop over the specified strategies, where if they
all fail with conflicts, it picks the one with the least number of
conflicts.

In the codepath that finds a successful merge, if an automatic commit
was wanted, the code breaks out of the above loop, which makes sense.
However, if the user requested there be no automatic commit, the loop
would continue.  That seems weird; --no-commit should not affect the
choice of merge strategy, but the code as written makes one think it
does.  However, since the loop itself embeds "!merge_was_ok" as a
condition on continuing to loop, it actually would also exit early if
--no-commit was specified, it just exited from a different location.

Restructure the code slightly to make it clear that the loop will
immediately exit whenever we find a merge strategy that is successful.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/merge.c