]> git.ipfire.org Git - thirdparty/git.git/commitdiff
revisions API users: add "goto cleanup" for release_revisions()
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Wed, 13 Apr 2022 20:01:40 +0000 (22:01 +0200)
committerJunio C Hamano <gitster@pobox.com>
Thu, 14 Apr 2022 06:56:09 +0000 (23:56 -0700)
Add a release_revisions() to various users of "struct rev_info" which
requires a minor refactoring to a "goto cleanup" pattern to use that
function.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/diff-files.c
builtin/rev-list.c
builtin/stash.c
builtin/submodule--helper.c
sequencer.c
t/helper/test-fast-rebase.c

index 70103c40952093100e41361e15ab6dbe54ef0268..2bfaf9ba7ae6beba1ce0a014af66fc137627b9e0 100644 (file)
@@ -77,8 +77,12 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)
 
        if (read_cache_preload(&rev.diffopt.pathspec) < 0) {
                perror("read_cache_preload");
-               return -1;
+               result = -1;
+               goto cleanup;
        }
+cleanup:
        result = run_diff_files(&rev, options);
-       return diff_result_code(&rev.diffopt, result);
+       result = diff_result_code(&rev.diffopt, result);
+       release_revisions(&rev);
+       return result;
 }
index 07c0ad11d8dc35bb39862e38e6383d9fb1d99b65..30fd8e83eaf2ca767802343d2dcff1825f6b1b50 100644 (file)
@@ -500,6 +500,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
        int use_bitmap_index = 0;
        int filter_provided_objects = 0;
        const char *show_progress = NULL;
+       int ret = 0;
 
        if (argc == 2 && !strcmp(argv[1], "-h"))
                usage(rev_list_usage);
@@ -583,7 +584,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
                }
                if (!strcmp(arg, "--test-bitmap")) {
                        test_bitmap_walk(&revs);
-                       return 0;
+                       goto cleanup;
                }
                if (skip_prefix(arg, "--progress=", &arg)) {
                        show_progress = arg;
@@ -672,11 +673,11 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
 
        if (use_bitmap_index) {
                if (!try_bitmap_count(&revs, filter_provided_objects))
-                       return 0;
+                       goto cleanup;
                if (!try_bitmap_disk_usage(&revs, filter_provided_objects))
-                       return 0;
+                       goto cleanup;
                if (!try_bitmap_traversal(&revs, filter_provided_objects))
-                       return 0;
+                       goto cleanup;
        }
 
        if (prepare_revision_walk(&revs))
@@ -696,8 +697,10 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
 
                find_bisection(&revs.commits, &reaches, &all, bisect_flags);
 
-               if (bisect_show_vars)
-                       return show_bisect_vars(&info, reaches, all);
+               if (bisect_show_vars) {
+                       ret = show_bisect_vars(&info, reaches, all);
+                       goto cleanup;
+               }
        }
 
        if (filter_provided_objects) {
@@ -752,5 +755,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
        if (show_disk_usage)
                printf("%"PRIuMAX"\n", (uintmax_t)total_disk_usage);
 
-       return 0;
+cleanup:
+       release_revisions(&revs);
+       return ret;
 }
index a96d84a5a97a93a3484f47a3094b7ca2d0c9830f..7c9c5751f57bbecec616cf0f2bc0d06de0e37077 100644 (file)
@@ -917,6 +917,7 @@ static int show_stash(int argc, const char **argv, const char *prefix)
 cleanup:
        strvec_clear(&stash_args);
        free_stash_info(&info);
+       release_revisions(&rev);
        if (do_usage)
                usage_with_options(git_stash_show_usage, options);
        return ret;
index cda33ee4d2bfc5a4e29d8fa40782e7b69cc80151..1bd31c859467485863f8f3b4bf11671aece26543 100644 (file)
@@ -1232,6 +1232,7 @@ static int compute_summary_module_list(struct object_id *head_oid,
        struct strvec diff_args = STRVEC_INIT;
        struct rev_info rev;
        struct module_cb_list list = MODULE_CB_LIST_INIT;
+       int ret = 0;
 
        strvec_push(&diff_args, get_diff_cmd(diff_cmd));
        if (info->cached)
@@ -1257,11 +1258,13 @@ static int compute_summary_module_list(struct object_id *head_oid,
                        setup_work_tree();
                if (read_cache_preload(&rev.diffopt.pathspec) < 0) {
                        perror("read_cache_preload");
-                       return -1;
+                       ret = -1;
+                       goto cleanup;
                }
        } else if (read_cache() < 0) {
                perror("read_cache");
-               return -1;
+               ret = -1;
+               goto cleanup;
        }
 
        if (diff_cmd == DIFF_INDEX)
@@ -1269,9 +1272,10 @@ static int compute_summary_module_list(struct object_id *head_oid,
        else
                run_diff_files(&rev, 0);
        prepare_submodule_summary(info, &list);
+cleanup:
        strvec_clear(&diff_args);
        release_revisions(&rev);
-       return 0;
+       return ret;
 }
 
 static int module_summary(int argc, const char **argv, const char *prefix)
index f9d7acd10655fc9397da671dba50480b569018ad..41ae5e25278d5156dd0db251fe5cd2fe19744713 100644 (file)
@@ -5354,6 +5354,7 @@ int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
        int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
        int reapply_cherry_picks = flags & TODO_LIST_REAPPLY_CHERRY_PICKS;
        int skipped_commit = 0;
+       int ret = 0;
 
        repo_init_revisions(r, &revs, NULL);
        revs.verbose_header = 1;
@@ -5377,14 +5378,20 @@ int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
        pp.fmt = revs.commit_format;
        pp.output_encoding = get_log_output_encoding();
 
-       if (setup_revisions(argc, argv, &revs, NULL) > 1)
-               return error(_("make_script: unhandled options"));
+       if (setup_revisions(argc, argv, &revs, NULL) > 1) {
+               ret = error(_("make_script: unhandled options"));
+               goto cleanup;
+       }
 
-       if (prepare_revision_walk(&revs) < 0)
-               return error(_("make_script: error preparing revisions"));
+       if (prepare_revision_walk(&revs) < 0) {
+               ret = error(_("make_script: error preparing revisions"));
+               goto cleanup;
+       }
 
-       if (rebase_merges)
-               return make_script_with_merges(&pp, &revs, out, flags);
+       if (rebase_merges) {
+               ret = make_script_with_merges(&pp, &revs, out, flags);
+               goto cleanup;
+       }
 
        while ((commit = get_revision(&revs))) {
                int is_empty = is_original_commit_empty(commit);
@@ -5408,7 +5415,9 @@ int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
        if (skipped_commit)
                advise_if_enabled(ADVICE_SKIPPED_CHERRY_PICKS,
                                  _("use --reapply-cherry-picks to include skipped commits"));
-       return 0;
+cleanup:
+       release_revisions(&revs);
+       return ret;
 }
 
 /*
index 993b90eaedd08cdb9cbb3534e1db7049799a55e5..4e5553e20249debf36a76296f18599300ee91af5 100644 (file)
@@ -99,6 +99,7 @@ int cmd__fast_rebase(int argc, const char **argv)
        struct merge_result result;
        struct strbuf reflog_msg = STRBUF_INIT;
        struct strbuf branch_name = STRBUF_INIT;
+       int ret = 0;
 
        /*
         * test-tool stuff doesn't set up the git directory by default; need to
@@ -137,13 +138,17 @@ int cmd__fast_rebase(int argc, const char **argv)
        revs.topo_order = 1;
        strvec_pushl(&rev_walk_args, "", argv[4], "--not", argv[3], NULL);
 
-       if (setup_revisions(rev_walk_args.nr, rev_walk_args.v, &revs, NULL) > 1)
-               return error(_("unhandled options"));
+       if (setup_revisions(rev_walk_args.nr, rev_walk_args.v, &revs, NULL) > 1) {
+               ret = error(_("unhandled options"));
+               goto cleanup;
+       }
 
        strvec_clear(&rev_walk_args);
 
-       if (prepare_revision_walk(&revs) < 0)
-               return error(_("error preparing revisions"));
+       if (prepare_revision_walk(&revs) < 0) {
+               ret = error(_("error preparing revisions"));
+               goto cleanup;
+       }
 
        init_merge_options(&merge_opt, the_repository);
        memset(&result, 0, sizeof(result));
@@ -220,7 +225,10 @@ int cmd__fast_rebase(int argc, const char **argv)
                               COMMIT_LOCK | SKIP_IF_UNCHANGED))
                die(_("unable to write %s"), get_index_file());
 
+       ret = (result.clean == 0);
+cleanup:
        strbuf_release(&reflog_msg);
        strbuf_release(&branch_name);
-       return (result.clean == 0);
+       release_revisions(&revs);
+       return ret;
 }