]> git.ipfire.org Git - thirdparty/git.git/commitdiff
revisions API: add a TODO for diff_free(&revs->diffopt)
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Thu, 14 Apr 2022 05:56:40 +0000 (07:56 +0200)
committerJunio C Hamano <gitster@pobox.com>
Thu, 14 Apr 2022 06:56:10 +0000 (23:56 -0700)
Add a TODO comment indicating that we should release "diffopt" in
release_revisions(). In a preceding commit we started releasing the
"pruning" member of the same type, but handling "diffopt" will require
us to untangle the "no_free" conditions I added in e900d494dcf (diff:
add an API for deferred freeing, 2021-02-11).

Let's leave a TODO comment to that effect, and so that we don't forget
refactor code that was changed to use release_revisions() in earlier
commits to stop using the "diffopt" member after a call to
release_revisions(). This works currently, but would become a logic
error as soon as we started freeing "diffopt". Doing that change now
doesn't harm anything, and future-proofs us against a later change to
release_revisions().

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff-lib.c
revision.c
wt-status.c

index 298265e5b54a057dffc410188587936ffff76076..7eb66a417aa08daa6f22753eba5c52f32361dfc8 100644 (file)
@@ -651,6 +651,7 @@ int index_differs_from(struct repository *r,
 {
        struct rev_info rev;
        struct setup_revision_opt opt;
+       unsigned has_changes;
 
        repo_init_revisions(r, &rev, NULL);
        memset(&opt, 0, sizeof(opt));
@@ -662,8 +663,9 @@ int index_differs_from(struct repository *r,
                diff_flags_or(&rev.diffopt.flags, flags);
        rev.diffopt.ita_invisible_in_index = ita_invisible_in_index;
        run_diff_index(&rev, 1);
+       has_changes = rev.diffopt.flags.has_changes;
        release_revisions(&rev);
-       return (rev.diffopt.flags.has_changes != 0);
+       return (has_changes != 0);
 }
 
 static struct strbuf *idiff_prefix_cb(struct diff_options *opt, void *data)
index 0107ac1077a781e2e08ec9bff72c18f7d21e5592..58d6212221bcbad2fd6e1573af9f1435f6a6b0cd 100644 (file)
@@ -2956,6 +2956,7 @@ void release_revisions(struct rev_info *revs)
        date_mode_release(&revs->date_mode);
        release_revisions_mailmap(revs->mailmap);
        free_grep_patterns(&revs->grep_filter);
+       /* TODO (need to handle "no_free"): diff_free(&revs->diffopt) */
        diff_free(&revs->pruning);
        reflog_walk_info_release(revs->reflog_info);
        release_revisions_topo_walk_info(revs->topo_walk_info);
index 61e0c1022f574ed7641690647dd130fd6c798c5c..102d904adcb32b2c6c90304d382dc27fa2c51386 100644 (file)
@@ -2545,8 +2545,9 @@ int has_unstaged_changes(struct repository *r, int ignore_submodules)
        rev_info.diffopt.flags.quick = 1;
        diff_setup_done(&rev_info.diffopt);
        result = run_diff_files(&rev_info, 0);
+       result = diff_result_code(&rev_info.diffopt, result);
        release_revisions(&rev_info);
-       return diff_result_code(&rev_info.diffopt, result);
+       return result;
 }
 
 /**
@@ -2578,8 +2579,9 @@ int has_uncommitted_changes(struct repository *r,
 
        diff_setup_done(&rev_info.diffopt);
        result = run_diff_index(&rev_info, 1);
+       result = diff_result_code(&rev_info.diffopt, result);
        release_revisions(&rev_info);
-       return diff_result_code(&rev_info.diffopt, result);
+       return result;
 }
 
 /**