Skip to content

Commit

Permalink
Merge branch 'jc/range-diff-lazy-setup'
Browse files Browse the repository at this point in the history
Code clean-up.

* jc/range-diff-lazy-setup:
  remerge-diff: clean up temporary objdir at a central place
  remerge-diff: lazily prepare temporary objdir on demand
  • Loading branch information
gitster committed Sep 16, 2024
2 parents 6e2a18c + 4460e05 commit be8ca28
Show file tree
Hide file tree
Showing 13 changed files with 38 additions and 44 deletions.
2 changes: 1 addition & 1 deletion builtin/describe.c
Original file line number Diff line number Diff line change
Expand Up @@ -716,7 +716,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
BUG("malformed internal diff-index command line");
run_diff_index(&revs, 0);

if (!diff_result_code(&revs.diffopt))
if (!diff_result_code(&revs))
suffix = NULL;
else
suffix = dirty;
Expand Down
2 changes: 1 addition & 1 deletion builtin/diff-files.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)
if (repo_read_index_preload(the_repository, &rev.diffopt.pathspec, 0) < 0)
die_errno("repo_read_index_preload");
run_diff_files(&rev, options);
result = diff_result_code(&rev.diffopt);
result = diff_result_code(&rev);
release_revisions(&rev);
return result;
}
2 changes: 1 addition & 1 deletion builtin/diff-index.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)
return -1;
}
run_diff_index(&rev, option);
result = diff_result_code(&rev.diffopt);
result = diff_result_code(&rev);
release_revisions(&rev);
return result;
}
14 changes: 1 addition & 13 deletions builtin/diff-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -167,13 +167,6 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)

opt->diffopt.rotate_to_strict = 1;

if (opt->remerge_diff) {
opt->remerge_objdir = tmp_objdir_create("remerge-diff");
if (!opt->remerge_objdir)
die(_("unable to create temporary object directory"));
tmp_objdir_replace_primary_odb(opt->remerge_objdir, 1);
}

/*
* NOTE! We expect "a..b" to expand to "^a b" but it is
* perfectly valid for revision range parser to yield "b ^a",
Expand Down Expand Up @@ -238,10 +231,5 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
diff_free(&opt->diffopt);
}

if (opt->remerge_diff) {
tmp_objdir_destroy(opt->remerge_objdir);
opt->remerge_objdir = NULL;
}

return diff_result_code(&opt->diffopt);
return diff_result_code(opt);
}
2 changes: 1 addition & 1 deletion builtin/diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -619,7 +619,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
builtin_diff_combined(&rev, argc, argv,
ent.objects, ent.nr,
first_non_parent);
result = diff_result_code(&rev.diffopt);
result = diff_result_code(&rev);
if (1 < rev.diffopt.skip_stat_unmatch)
refresh_index_quietly();
release_revisions(&rev);
Expand Down
18 changes: 4 additions & 14 deletions builtin/log.c
Original file line number Diff line number Diff line change
Expand Up @@ -504,13 +504,7 @@ static int cmd_log_walk_no_free(struct rev_info *rev)
struct commit *commit;
int saved_nrl = 0;
int saved_dcctc = 0;

if (rev->remerge_diff) {
rev->remerge_objdir = tmp_objdir_create("remerge-diff");
if (!rev->remerge_objdir)
die(_("unable to create temporary object directory"));
tmp_objdir_replace_primary_odb(rev->remerge_objdir, 1);
}
int result;

if (rev->early_output)
setup_early_output();
Expand Down Expand Up @@ -551,16 +545,12 @@ static int cmd_log_walk_no_free(struct rev_info *rev)
rev->diffopt.degraded_cc_to_c = saved_dcctc;
rev->diffopt.needed_rename_limit = saved_nrl;

if (rev->remerge_diff) {
tmp_objdir_destroy(rev->remerge_objdir);
rev->remerge_objdir = NULL;
}

result = diff_result_code(rev);
if (rev->diffopt.output_format & DIFF_FORMAT_CHECKDIFF &&
rev->diffopt.flags.check_failed) {
return 02;
result = 02;
}
return diff_result_code(&rev->diffopt);
return result;
}

static int cmd_log_walk(struct rev_info *rev)
Expand Down
6 changes: 3 additions & 3 deletions builtin/stash.c
Original file line number Diff line number Diff line change
Expand Up @@ -974,7 +974,7 @@ static int show_stash(int argc, const char **argv, const char *prefix)
}
log_tree_diff_flush(&rev);

ret = diff_result_code(&rev.diffopt);
ret = diff_result_code(&rev);

cleanup:
strvec_clear(&revision_args);
Expand Down Expand Up @@ -1126,13 +1126,13 @@ static int check_changes_tracked_files(const struct pathspec *ps)
diff_setup_done(&rev.diffopt);

run_diff_index(&rev, DIFF_INDEX_CACHED);
if (diff_result_code(&rev.diffopt)) {
if (diff_result_code(&rev)) {
ret = 1;
goto done;
}

run_diff_files(&rev, 0);
if (diff_result_code(&rev.diffopt)) {
if (diff_result_code(&rev)) {
ret = 1;
goto done;
}
Expand Down
2 changes: 1 addition & 1 deletion builtin/submodule--helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -672,7 +672,7 @@ static void status_submodule(const char *path, const struct object_id *ce_oid,
setup_revisions(diff_files_args.nr, diff_files_args.v, &rev, &opt);
run_diff_files(&rev, 0);

if (!diff_result_code(&rev.diffopt)) {
if (!diff_result_code(&rev)) {
print_status(flags, ' ', path, ce_oid,
displaypath);
} else if (!(flags & OPT_CACHED)) {
Expand Down
2 changes: 1 addition & 1 deletion diff-no-index.c
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,7 @@ int diff_no_index(struct rev_info *revs,
* The return code for --no-index imitates diff(1):
* 0 = no changes, 1 = changes, else error
*/
ret = diff_result_code(&revs->diffopt);
ret = diff_result_code(revs);

out:
for (i = 0; i < ARRAY_SIZE(to_free); i++)
Expand Down
10 changes: 9 additions & 1 deletion diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "environment.h"
#include "gettext.h"
#include "tempfile.h"
#include "revision.h"
#include "quote.h"
#include "diff.h"
#include "diffcore.h"
Expand All @@ -29,6 +30,7 @@
#include "merge-ll.h"
#include "string-list.h"
#include "strvec.h"
#include "tmp-objdir.h"
#include "graph.h"
#include "oid-array.h"
#include "packfile.h"
Expand Down Expand Up @@ -7088,10 +7090,16 @@ void diffcore_std(struct diff_options *options)
options->found_follow = 0;
}

int diff_result_code(struct diff_options *opt)
int diff_result_code(struct rev_info *revs)
{
struct diff_options *opt = &revs->diffopt;
int result = 0;

if (revs->remerge_diff) {
tmp_objdir_destroy(revs->remerge_objdir);
revs->remerge_objdir = NULL;
}

diff_warn_rename_limit("diff.renameLimit",
opt->needed_rename_limit,
opt->degraded_cc_to_c);
Expand Down
2 changes: 1 addition & 1 deletion diff.h
Original file line number Diff line number Diff line change
Expand Up @@ -648,7 +648,7 @@ int do_diff_cache(const struct object_id *, struct diff_options *);
int diff_flush_patch_id(struct diff_options *, struct object_id *, int);
void flush_one_hunk(struct object_id *result, git_hash_ctx *ctx);

int diff_result_code(struct diff_options *);
int diff_result_code(struct rev_info *);

int diff_no_index(struct rev_info *,
int implicit_no_index, int, const char **);
Expand Down
16 changes: 12 additions & 4 deletions log-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -1015,6 +1015,17 @@ static int do_remerge_diff(struct rev_info *opt,
struct strbuf parent1_desc = STRBUF_INIT;
struct strbuf parent2_desc = STRBUF_INIT;

/*
* Lazily prepare a temporary object directory and rotate it
* into the alternative object store list as the primary.
*/
if (opt->remerge_diff && !opt->remerge_objdir) {
opt->remerge_objdir = tmp_objdir_create("remerge-diff");
if (!opt->remerge_objdir)
return error(_("unable to create temporary object directory"));
tmp_objdir_replace_primary_odb(opt->remerge_objdir, 1);
}

/* Setup merge options */
init_ui_merge_options(&o, the_repository);
o.show_rename_progress = 0;
Expand Down Expand Up @@ -1051,10 +1062,7 @@ static int do_remerge_diff(struct rev_info *opt,
merge_finalize(&o, &res);

/* Clean up the contents of the temporary object directory */
if (opt->remerge_objdir)
tmp_objdir_discard_objects(opt->remerge_objdir);
else
BUG("did a remerge diff without remerge_objdir?!?");
tmp_objdir_discard_objects(opt->remerge_objdir);

return !opt->loginfo;
}
Expand Down
4 changes: 2 additions & 2 deletions wt-status.c
Original file line number Diff line number Diff line change
Expand Up @@ -2595,7 +2595,7 @@ int has_unstaged_changes(struct repository *r, int ignore_submodules)
rev_info.diffopt.flags.quick = 1;
diff_setup_done(&rev_info.diffopt);
run_diff_files(&rev_info, 0);
result = diff_result_code(&rev_info.diffopt);
result = diff_result_code(&rev_info);
release_revisions(&rev_info);
return result;
}
Expand Down Expand Up @@ -2629,7 +2629,7 @@ int has_uncommitted_changes(struct repository *r,

diff_setup_done(&rev_info.diffopt);
run_diff_index(&rev_info, DIFF_INDEX_CACHED);
result = diff_result_code(&rev_info.diffopt);
result = diff_result_code(&rev_info);
release_revisions(&rev_info);
return result;
}
Expand Down

0 comments on commit be8ca28

Please sign in to comment.