diff options
| author | Ævar Arnfjörð Bjarmason <avarab@gmail.com> | 2022-04-14 07:56:40 +0200 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2022-04-13 23:56:10 -0700 |
| commit | 54c8a7c379fc37a847b8a5ec5c419eae171322e1 (patch) | |
| tree | bfaa0f95925802963df3f5cf969bd47c8d3c43e8 | |
| parent | ae1b383dfa945d98ec3cedd744619c2028d6edf7 (diff) | |
revisions API: add a TODO for diff_free(&revs->diffopt)
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>
| -rw-r--r-- | diff-lib.c | 4 | ||||
| -rw-r--r-- | revision.c | 1 | ||||
| -rw-r--r-- | wt-status.c | 6 |
3 files changed, 8 insertions, 3 deletions
diff --git a/diff-lib.c b/diff-lib.c index 298265e5b5..7eb66a417a 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -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) diff --git a/revision.c b/revision.c index 0107ac1077..58d6212221 100644 --- a/revision.c +++ b/revision.c @@ -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); diff --git a/wt-status.c b/wt-status.c index 61e0c1022f..102d904adc 100644 --- a/wt-status.c +++ b/wt-status.c @@ -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; } /** |
