]> git.ipfire.org Git - thirdparty/git.git/commitdiff
branch: prepare delete_branches for a bulk caller
authorHarald Nordgren <haraldnordgren@gmail.com>
Sat, 25 Jul 2026 11:32:13 +0000 (11:32 +0000)
committerJunio C Hamano <gitster@pobox.com>
Sat, 25 Jul 2026 17:15:03 +0000 (10:15 -0700)
Teach delete_branches() a new mode for the upcoming --delete-merged
caller that checks whether a branch is merged into its upstream without
falling back to HEAD when there is no upstream. Existing callers keep
their current behavior.

Signed-off-by: Harald Nordgren <haraldnordgren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/branch.c

index 568ae817d6c2bcc29821527f8dd7450994cadebe..23b2b7107cc70ecc2d79cec84d4349b5737ff5d7 100644 (file)
@@ -168,10 +168,13 @@ static int branch_merged(int kind, const char *name,
         * upstream, if any, otherwise with HEAD", we should just
         * return the result of the repo_in_merge_bases() above without
         * any of the following code, but during the transition period,
-        * a gentle reminder is in order.
+        * a gentle reminder is in order.  Callers that opt out of the
+        * HEAD fallback by passing head_rev=NULL are not interested in
+        * the reminder either: they have already established that the
+        * branch has an upstream, so HEAD is irrelevant to the decision.
         */
-       if (head_rev != reference_rev) {
-               int expect = head_rev ? repo_in_merge_bases(the_repository, rev, head_rev) : 0;
+       if (head_rev && head_rev != reference_rev) {
+               int expect = repo_in_merge_bases(the_repository, rev, head_rev);
                if (expect < 0)
                        exit(128);
                if (expect == merged)
@@ -193,6 +196,7 @@ enum delete_branch_flags {
        DELETE_BRANCH_FORCE = (1 << 0),
        DELETE_BRANCH_QUIET = (1 << 1),
        DELETE_BRANCH_SKIP_UNMERGED = (1 << 2),
+       DELETE_BRANCH_NO_HEAD_FALLBACK = (1 << 3),
 };
 
 static int check_branch_commit(const char *branchname, const char *refname,
@@ -262,7 +266,8 @@ static int delete_branches(int argc, const char **argv, int kinds,
        }
        branch_name_pos = strcspn(fmt, "%");
 
-       if (!(flags & DELETE_BRANCH_FORCE))
+       if (!(flags & DELETE_BRANCH_FORCE) &&
+           !(flags & DELETE_BRANCH_NO_HEAD_FALLBACK))
                head_rev = lookup_commit_reference(the_repository, &head_oid);
 
        for (i = 0; i < argc; i++, strbuf_reset(&bname)) {