Merge branch 'bw/diff-opt-impl-to-bitfields'
A single-word "unsigned flags" in the diff options is being split into a structure with many bitfields. * bw/diff-opt-impl-to-bitfields: diff: make struct diff_flags members lowercase diff: remove DIFF_OPT_CLR macro diff: remove DIFF_OPT_SET macro diff: remove DIFF_OPT_TST macro diff: remove touched flags diff: add flag to indicate textconv was set via cmdline diff: convert flags to be stored in bitfields add, reset: use DIFF_OPT_SET macro to set a diff flag
This commit is contained in:
commit
8cc633286a
16
blame.c
16
blame.c
@ -209,7 +209,7 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt,
|
||||
|
||||
switch (st.st_mode & S_IFMT) {
|
||||
case S_IFREG:
|
||||
if (DIFF_OPT_TST(opt, ALLOW_TEXTCONV) &&
|
||||
if (opt->flags.allow_textconv &&
|
||||
textconv_object(read_from, mode, &null_oid, 0, &buf_ptr, &buf_len))
|
||||
strbuf_attach(&buf, buf_ptr, buf_len, buf_len + 1);
|
||||
else if (strbuf_read_file(&buf, read_from, st.st_size) != st.st_size)
|
||||
@ -293,7 +293,7 @@ static void fill_origin_blob(struct diff_options *opt,
|
||||
unsigned long file_size;
|
||||
|
||||
(*num_read_blob)++;
|
||||
if (DIFF_OPT_TST(opt, ALLOW_TEXTCONV) &&
|
||||
if (opt->flags.allow_textconv &&
|
||||
textconv_object(o->path, o->mode, &o->blob_oid, 1, &file->ptr, &file_size))
|
||||
;
|
||||
else
|
||||
@ -541,7 +541,7 @@ static struct blame_origin *find_origin(struct commit *parent,
|
||||
* same and diff-tree is fairly efficient about this.
|
||||
*/
|
||||
diff_setup(&diff_opts);
|
||||
DIFF_OPT_SET(&diff_opts, RECURSIVE);
|
||||
diff_opts.flags.recursive = 1;
|
||||
diff_opts.detect_rename = 0;
|
||||
diff_opts.output_format = DIFF_FORMAT_NO_OUTPUT;
|
||||
paths[0] = origin->path;
|
||||
@ -615,7 +615,7 @@ static struct blame_origin *find_rename(struct commit *parent,
|
||||
int i;
|
||||
|
||||
diff_setup(&diff_opts);
|
||||
DIFF_OPT_SET(&diff_opts, RECURSIVE);
|
||||
diff_opts.flags.recursive = 1;
|
||||
diff_opts.detect_rename = DIFF_DETECT_RENAME;
|
||||
diff_opts.output_format = DIFF_FORMAT_NO_OUTPUT;
|
||||
diff_opts.single_follow = origin->path;
|
||||
@ -1238,7 +1238,7 @@ static void find_copy_in_parent(struct blame_scoreboard *sb,
|
||||
return; /* nothing remains for this target */
|
||||
|
||||
diff_setup(&diff_opts);
|
||||
DIFF_OPT_SET(&diff_opts, RECURSIVE);
|
||||
diff_opts.flags.recursive = 1;
|
||||
diff_opts.output_format = DIFF_FORMAT_NO_OUTPUT;
|
||||
|
||||
diff_setup_done(&diff_opts);
|
||||
@ -1253,7 +1253,7 @@ static void find_copy_in_parent(struct blame_scoreboard *sb,
|
||||
if ((opt & PICKAXE_BLAME_COPY_HARDEST)
|
||||
|| ((opt & PICKAXE_BLAME_COPY_HARDER)
|
||||
&& (!porigin || strcmp(target->path, porigin->path))))
|
||||
DIFF_OPT_SET(&diff_opts, FIND_COPIES_HARDER);
|
||||
diff_opts.flags.find_copies_harder = 1;
|
||||
|
||||
if (is_null_oid(&target->commit->object.oid))
|
||||
do_diff_cache(&parent->tree->object.oid, &diff_opts);
|
||||
@ -1262,7 +1262,7 @@ static void find_copy_in_parent(struct blame_scoreboard *sb,
|
||||
&target->commit->tree->object.oid,
|
||||
"", &diff_opts);
|
||||
|
||||
if (!DIFF_OPT_TST(&diff_opts, FIND_COPIES_HARDER))
|
||||
if (!diff_opts.flags.find_copies_harder)
|
||||
diffcore_std(&diff_opts);
|
||||
|
||||
do {
|
||||
@ -1825,7 +1825,7 @@ void setup_scoreboard(struct blame_scoreboard *sb, const char *path, struct blam
|
||||
if (fill_blob_sha1_and_mode(o))
|
||||
die(_("no such path %s in %s"), path, final_commit_name);
|
||||
|
||||
if (DIFF_OPT_TST(&sb->revs->diffopt, ALLOW_TEXTCONV) &&
|
||||
if (sb->revs->diffopt.flags.allow_textconv &&
|
||||
textconv_object(path, o->mode, &o->blob_oid, 1, (char **) &sb->final_buf,
|
||||
&sb->final_buf_size))
|
||||
;
|
||||
|
@ -116,7 +116,7 @@ int add_files_to_cache(const char *prefix,
|
||||
rev.diffopt.output_format = DIFF_FORMAT_CALLBACK;
|
||||
rev.diffopt.format_callback = update_callback;
|
||||
rev.diffopt.format_callback_data = &data;
|
||||
rev.diffopt.flags |= DIFF_OPT_OVERRIDE_SUBMODULE_CONFIG;
|
||||
rev.diffopt.flags.override_submodule_config = 1;
|
||||
rev.max_count = 0; /* do not compare unmerged paths with stage #2 */
|
||||
run_diff_files(&rev, DIFF_RACY_IS_MODIFIED);
|
||||
clear_pathspec(&rev.prune_data);
|
||||
@ -218,7 +218,7 @@ static int edit_patch(int argc, const char **argv, const char *prefix)
|
||||
argc = setup_revisions(argc, argv, &rev, NULL);
|
||||
rev.diffopt.output_format = DIFF_FORMAT_PATCH;
|
||||
rev.diffopt.use_color = 0;
|
||||
DIFF_OPT_SET(&rev.diffopt, IGNORE_DIRTY_SUBMODULES);
|
||||
rev.diffopt.flags.ignore_dirty_submodules = 1;
|
||||
out = open(file, O_CREAT | O_WRONLY, 0666);
|
||||
if (out < 0)
|
||||
die(_("Could not open '%s' for writing."), file);
|
||||
|
10
builtin/am.c
10
builtin/am.c
@ -1157,9 +1157,9 @@ static int index_has_changes(struct strbuf *sb)
|
||||
struct diff_options opt;
|
||||
|
||||
diff_setup(&opt);
|
||||
DIFF_OPT_SET(&opt, EXIT_WITH_STATUS);
|
||||
opt.flags.exit_with_status = 1;
|
||||
if (!sb)
|
||||
DIFF_OPT_SET(&opt, QUICK);
|
||||
opt.flags.quick = 1;
|
||||
do_diff_cache(&head, &opt);
|
||||
diffcore_std(&opt);
|
||||
for (i = 0; sb && i < diff_queued_diff.nr; i++) {
|
||||
@ -1168,7 +1168,7 @@ static int index_has_changes(struct strbuf *sb)
|
||||
strbuf_addstr(sb, diff_queued_diff.queue[i]->two->path);
|
||||
}
|
||||
diff_flush(&opt);
|
||||
return DIFF_OPT_TST(&opt, HAS_CHANGES) != 0;
|
||||
return opt.flags.has_changes != 0;
|
||||
} else {
|
||||
for (i = 0; sb && i < active_nr; i++) {
|
||||
if (i)
|
||||
@ -1409,8 +1409,8 @@ static void write_commit_patch(const struct am_state *state, struct commit *comm
|
||||
rev_info.show_root_diff = 1;
|
||||
rev_info.diffopt.output_format = DIFF_FORMAT_PATCH;
|
||||
rev_info.no_commit_id = 1;
|
||||
DIFF_OPT_SET(&rev_info.diffopt, BINARY);
|
||||
DIFF_OPT_SET(&rev_info.diffopt, FULL_INDEX);
|
||||
rev_info.diffopt.flags.binary = 1;
|
||||
rev_info.diffopt.flags.full_index = 1;
|
||||
rev_info.diffopt.use_color = 0;
|
||||
rev_info.diffopt.file = fp;
|
||||
rev_info.diffopt.close_file = 1;
|
||||
|
@ -708,8 +708,8 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
|
||||
git_config(git_blame_config, &output_option);
|
||||
init_revisions(&revs, NULL);
|
||||
revs.date_mode = blame_date_mode;
|
||||
DIFF_OPT_SET(&revs.diffopt, ALLOW_TEXTCONV);
|
||||
DIFF_OPT_SET(&revs.diffopt, FOLLOW_RENAMES);
|
||||
revs.diffopt.flags.allow_textconv = 1;
|
||||
revs.diffopt.flags.follow_renames = 1;
|
||||
|
||||
save_commit_buffer = 0;
|
||||
dashdash_pos = 0;
|
||||
@ -734,9 +734,9 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
|
||||
parse_revision_opt(&revs, &ctx, options, blame_opt_usage);
|
||||
}
|
||||
parse_done:
|
||||
no_whole_file_rename = !DIFF_OPT_TST(&revs.diffopt, FOLLOW_RENAMES);
|
||||
no_whole_file_rename = !revs.diffopt.flags.follow_renames;
|
||||
xdl_opts |= revs.diffopt.xdl_opts & XDF_INDENT_HEURISTIC;
|
||||
DIFF_OPT_CLR(&revs.diffopt, FOLLOW_RENAMES);
|
||||
revs.diffopt.flags.follow_renames = 0;
|
||||
argc = parse_options_end(&ctx);
|
||||
|
||||
if (incremental || (output_option & OUTPUT_PORCELAIN)) {
|
||||
@ -803,7 +803,7 @@ parse_done:
|
||||
}
|
||||
blame_date_width -= 1; /* strip the null */
|
||||
|
||||
if (DIFF_OPT_TST(&revs.diffopt, FIND_COPIES_HARDER))
|
||||
if (revs.diffopt.flags.find_copies_harder)
|
||||
opt |= (PICKAXE_BLAME_COPY | PICKAXE_BLAME_MOVE |
|
||||
PICKAXE_BLAME_COPY_HARDER);
|
||||
|
||||
|
@ -912,11 +912,12 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
|
||||
* submodules which were manually staged, which would
|
||||
* be really confusing.
|
||||
*/
|
||||
int diff_flags = DIFF_OPT_OVERRIDE_SUBMODULE_CONFIG;
|
||||
struct diff_flags flags = DIFF_FLAGS_INIT;
|
||||
flags.override_submodule_config = 1;
|
||||
if (ignore_submodule_arg &&
|
||||
!strcmp(ignore_submodule_arg, "all"))
|
||||
diff_flags |= DIFF_OPT_IGNORE_SUBMODULES;
|
||||
commitable = index_differs_from(parent, diff_flags, 1);
|
||||
flags.ignore_submodules = 1;
|
||||
commitable = index_differs_from(parent, &flags, 1);
|
||||
}
|
||||
}
|
||||
strbuf_release(&committer_ident);
|
||||
|
@ -44,7 +44,7 @@ static void stuff_change(struct diff_options *opt,
|
||||
!oidcmp(old_oid, new_oid) && (old_mode == new_mode))
|
||||
return;
|
||||
|
||||
if (DIFF_OPT_TST(opt, REVERSE_DIFF)) {
|
||||
if (opt->flags.reverse_diff) {
|
||||
SWAP(old_mode, new_mode);
|
||||
SWAP(old_oid, new_oid);
|
||||
SWAP(old_path, new_path);
|
||||
@ -349,8 +349,8 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
|
||||
rev.diffopt.stat_graph_width = -1;
|
||||
|
||||
/* Default to let external and textconv be used */
|
||||
DIFF_OPT_SET(&rev.diffopt, ALLOW_EXTERNAL);
|
||||
DIFF_OPT_SET(&rev.diffopt, ALLOW_TEXTCONV);
|
||||
rev.diffopt.flags.allow_external = 1;
|
||||
rev.diffopt.flags.allow_textconv = 1;
|
||||
|
||||
if (nongit)
|
||||
die(_("Not a git repository"));
|
||||
@ -360,7 +360,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
|
||||
diff_setup_done(&rev.diffopt);
|
||||
}
|
||||
|
||||
DIFF_OPT_SET(&rev.diffopt, RECURSIVE);
|
||||
rev.diffopt.flags.recursive = 1;
|
||||
|
||||
setup_diff_pager(&rev.diffopt);
|
||||
|
||||
|
@ -1066,7 +1066,7 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)
|
||||
die("revision walk setup failed");
|
||||
revs.diffopt.format_callback = show_filemodify;
|
||||
revs.diffopt.format_callback_data = &paths_of_changed_objects;
|
||||
DIFF_OPT_SET(&revs.diffopt, RECURSIVE);
|
||||
revs.diffopt.flags.recursive = 1;
|
||||
while ((commit = get_revision(&revs))) {
|
||||
if (has_unshown_parent(commit)) {
|
||||
add_object_array(&commit->object, NULL, &commits);
|
||||
|
@ -121,20 +121,19 @@ static void cmd_log_init_defaults(struct rev_info *rev)
|
||||
if (fmt_pretty)
|
||||
get_commit_format(fmt_pretty, rev);
|
||||
if (default_follow)
|
||||
DIFF_OPT_SET(&rev->diffopt, DEFAULT_FOLLOW_RENAMES);
|
||||
rev->diffopt.flags.default_follow_renames = 1;
|
||||
rev->verbose_header = 1;
|
||||
DIFF_OPT_SET(&rev->diffopt, RECURSIVE);
|
||||
rev->diffopt.flags.recursive = 1;
|
||||
rev->diffopt.stat_width = -1; /* use full terminal width */
|
||||
rev->diffopt.stat_graph_width = -1; /* respect statGraphWidth config */
|
||||
rev->abbrev_commit = default_abbrev_commit;
|
||||
rev->show_root_diff = default_show_root;
|
||||
rev->subject_prefix = fmt_patch_subject_prefix;
|
||||
rev->show_signature = default_show_signature;
|
||||
DIFF_OPT_SET(&rev->diffopt, ALLOW_TEXTCONV);
|
||||
rev->diffopt.flags.allow_textconv = 1;
|
||||
|
||||
if (default_date_mode)
|
||||
parse_date_format(default_date_mode, &rev->date_mode);
|
||||
rev->diffopt.touched_flags = 0;
|
||||
}
|
||||
|
||||
static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
|
||||
@ -182,7 +181,7 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
|
||||
init_display_notes(&rev->notes_opt);
|
||||
|
||||
if (rev->diffopt.pickaxe || rev->diffopt.filter ||
|
||||
DIFF_OPT_TST(&rev->diffopt, FOLLOW_RENAMES))
|
||||
rev->diffopt.flags.follow_renames)
|
||||
rev->always_show_header = 0;
|
||||
|
||||
if (source)
|
||||
@ -392,7 +391,7 @@ static int cmd_log_walk(struct rev_info *rev)
|
||||
fclose(rev->diffopt.file);
|
||||
|
||||
if (rev->diffopt.output_format & DIFF_FORMAT_CHECKDIFF &&
|
||||
DIFF_OPT_TST(&rev->diffopt, CHECK_FAILED)) {
|
||||
rev->diffopt.flags.check_failed) {
|
||||
return 02;
|
||||
}
|
||||
return diff_result_code(&rev->diffopt, 0);
|
||||
@ -484,8 +483,8 @@ static int show_blob_object(const struct object_id *oid, struct rev_info *rev, c
|
||||
unsigned long size;
|
||||
|
||||
fflush(rev->diffopt.file);
|
||||
if (!DIFF_OPT_TOUCHED(&rev->diffopt, ALLOW_TEXTCONV) ||
|
||||
!DIFF_OPT_TST(&rev->diffopt, ALLOW_TEXTCONV))
|
||||
if (!rev->diffopt.flags.textconv_set_via_cmdline ||
|
||||
!rev->diffopt.flags.allow_textconv)
|
||||
return stream_blob_to_fd(1, oid, NULL, 0);
|
||||
|
||||
if (get_oid_with_context(obj_name, GET_OID_RECORD_PATH,
|
||||
@ -667,9 +666,9 @@ int cmd_log_reflog(int argc, const char **argv, const char *prefix)
|
||||
static void log_setup_revisions_tweak(struct rev_info *rev,
|
||||
struct setup_revision_opt *opt)
|
||||
{
|
||||
if (DIFF_OPT_TST(&rev->diffopt, DEFAULT_FOLLOW_RENAMES) &&
|
||||
if (rev->diffopt.flags.default_follow_renames &&
|
||||
rev->prune_data.nr == 1)
|
||||
DIFF_OPT_SET(&rev->diffopt, FOLLOW_RENAMES);
|
||||
rev->diffopt.flags.follow_renames = 1;
|
||||
|
||||
/* Turn --cc/-c into -p --cc/-c when -p was not given */
|
||||
if (!rev->diffopt.output_format && rev->combine_merges)
|
||||
@ -1341,7 +1340,7 @@ static void prepare_bases(struct base_tree_info *bases,
|
||||
return;
|
||||
|
||||
diff_setup(&diffopt);
|
||||
DIFF_OPT_SET(&diffopt, RECURSIVE);
|
||||
diffopt.flags.recursive = 1;
|
||||
diff_setup_done(&diffopt);
|
||||
|
||||
oidcpy(&bases->base_commit, &base->object.oid);
|
||||
@ -1512,7 +1511,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
||||
rev.verbose_header = 1;
|
||||
rev.diff = 1;
|
||||
rev.max_parents = 1;
|
||||
DIFF_OPT_SET(&rev.diffopt, RECURSIVE);
|
||||
rev.diffopt.flags.recursive = 1;
|
||||
rev.subject_prefix = fmt_patch_subject_prefix;
|
||||
memset(&s_r_opt, 0, sizeof(s_r_opt));
|
||||
s_r_opt.def = "HEAD";
|
||||
@ -1613,8 +1612,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
||||
|
||||
rev.zero_commit = zero_commit;
|
||||
|
||||
if (!DIFF_OPT_TST(&rev.diffopt, TEXT) && !no_binary_diff)
|
||||
DIFF_OPT_SET(&rev.diffopt, BINARY);
|
||||
if (!rev.diffopt.flags.text && !no_binary_diff)
|
||||
rev.diffopt.flags.binary = 1;
|
||||
|
||||
if (rev.show_notes)
|
||||
init_display_notes(&rev.notes_opt);
|
||||
|
@ -26,7 +26,7 @@ int cmd_merge_ours(int argc, const char **argv, const char *prefix)
|
||||
*/
|
||||
if (read_cache() < 0)
|
||||
die_errno("read_cache failed");
|
||||
if (index_differs_from("HEAD", 0, 0))
|
||||
if (index_differs_from("HEAD", NULL, 0))
|
||||
exit(2);
|
||||
exit(0);
|
||||
}
|
||||
|
@ -166,7 +166,7 @@ static int read_from_tree(const struct pathspec *pathspec,
|
||||
opt.output_format = DIFF_FORMAT_CALLBACK;
|
||||
opt.format_callback = update_index_from_diff;
|
||||
opt.format_callback_data = &intent_to_add;
|
||||
opt.flags |= DIFF_OPT_OVERRIDE_SUBMODULE_CONFIG;
|
||||
opt.flags.override_submodule_config = 1;
|
||||
|
||||
if (do_diff_cache(tree_oid, &opt))
|
||||
return 1;
|
||||
|
@ -294,7 +294,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
|
||||
if (revs.bisect)
|
||||
bisect_list = 1;
|
||||
|
||||
if (DIFF_OPT_TST(&revs.diffopt, QUICK))
|
||||
if (revs.diffopt.flags.quick)
|
||||
info.flags |= REV_LIST_QUIET;
|
||||
for (i = 1 ; i < argc; i++) {
|
||||
const char *arg = argv[i];
|
||||
|
@ -898,7 +898,7 @@ static void show_combined_header(struct combine_diff_path *elem,
|
||||
int show_file_header)
|
||||
{
|
||||
struct diff_options *opt = &rev->diffopt;
|
||||
int abbrev = DIFF_OPT_TST(opt, FULL_INDEX) ? GIT_SHA1_HEXSZ : DEFAULT_ABBREV;
|
||||
int abbrev = opt->flags.full_index ? GIT_SHA1_HEXSZ : DEFAULT_ABBREV;
|
||||
const char *a_prefix = opt->a_prefix ? opt->a_prefix : "a/";
|
||||
const char *b_prefix = opt->b_prefix ? opt->b_prefix : "b/";
|
||||
const char *c_meta = diff_get_color_opt(opt, DIFF_METAINFO);
|
||||
@ -987,7 +987,7 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
|
||||
userdiff = userdiff_find_by_path(elem->path);
|
||||
if (!userdiff)
|
||||
userdiff = userdiff_find_by_name("default");
|
||||
if (DIFF_OPT_TST(opt, ALLOW_TEXTCONV))
|
||||
if (opt->flags.allow_textconv)
|
||||
textconv = userdiff_get_textconv(userdiff);
|
||||
|
||||
/* Read the result of merge first */
|
||||
@ -1413,8 +1413,8 @@ void diff_tree_combined(const struct object_id *oid,
|
||||
|
||||
diffopts = *opt;
|
||||
copy_pathspec(&diffopts.pathspec, &opt->pathspec);
|
||||
DIFF_OPT_SET(&diffopts, RECURSIVE);
|
||||
DIFF_OPT_CLR(&diffopts, ALLOW_EXTERNAL);
|
||||
diffopts.flags.recursive = 1;
|
||||
diffopts.flags.allow_external = 0;
|
||||
|
||||
/* find set of paths that everybody touches
|
||||
*
|
||||
@ -1435,7 +1435,7 @@ void diff_tree_combined(const struct object_id *oid,
|
||||
* NOTE please keep this semantically in sync with diffcore_std()
|
||||
*/
|
||||
need_generic_pathscan = opt->skip_stat_unmatch ||
|
||||
DIFF_OPT_TST(opt, FOLLOW_RENAMES) ||
|
||||
opt->flags.follow_renames ||
|
||||
opt->break_opt != -1 ||
|
||||
opt->detect_rename ||
|
||||
opt->pickaxe ||
|
||||
|
30
diff-lib.c
30
diff-lib.c
@ -71,14 +71,15 @@ static int match_stat_with_submodule(struct diff_options *diffopt,
|
||||
{
|
||||
int changed = ce_match_stat(ce, st, ce_option);
|
||||
if (S_ISGITLINK(ce->ce_mode)) {
|
||||
unsigned orig_flags = diffopt->flags;
|
||||
if (!DIFF_OPT_TST(diffopt, OVERRIDE_SUBMODULE_CONFIG))
|
||||
struct diff_flags orig_flags = diffopt->flags;
|
||||
if (!diffopt->flags.override_submodule_config)
|
||||
set_diffopt_flags_from_submodule_config(diffopt, ce->name);
|
||||
if (DIFF_OPT_TST(diffopt, IGNORE_SUBMODULES))
|
||||
if (diffopt->flags.ignore_submodules)
|
||||
changed = 0;
|
||||
else if (!DIFF_OPT_TST(diffopt, IGNORE_DIRTY_SUBMODULES)
|
||||
&& (!changed || DIFF_OPT_TST(diffopt, DIRTY_SUBMODULES)))
|
||||
*dirty_submodule = is_submodule_modified(ce->name, DIFF_OPT_TST(diffopt, IGNORE_UNTRACKED_IN_SUBMODULES));
|
||||
else if (!diffopt->flags.ignore_dirty_submodules &&
|
||||
(!changed || diffopt->flags.dirty_submodules))
|
||||
*dirty_submodule = is_submodule_modified(ce->name,
|
||||
diffopt->flags.ignore_untracked_in_submodules);
|
||||
diffopt->flags = orig_flags;
|
||||
}
|
||||
return changed;
|
||||
@ -228,7 +229,7 @@ int run_diff_files(struct rev_info *revs, unsigned int option)
|
||||
|
||||
if (!changed && !dirty_submodule) {
|
||||
ce_mark_uptodate(ce);
|
||||
if (!DIFF_OPT_TST(&revs->diffopt, FIND_COPIES_HARDER))
|
||||
if (!revs->diffopt.flags.find_copies_harder)
|
||||
continue;
|
||||
}
|
||||
oldmode = ce->ce_mode;
|
||||
@ -362,7 +363,7 @@ static int show_modified(struct rev_info *revs,
|
||||
|
||||
oldmode = old->ce_mode;
|
||||
if (mode == oldmode && !oidcmp(oid, &old->oid) && !dirty_submodule &&
|
||||
!DIFF_OPT_TST(&revs->diffopt, FIND_COPIES_HARDER))
|
||||
!revs->diffopt.flags.find_copies_harder)
|
||||
return 0;
|
||||
|
||||
diff_change(&revs->diffopt, oldmode, mode,
|
||||
@ -493,7 +494,7 @@ static int diff_cache(struct rev_info *revs,
|
||||
opts.head_idx = 1;
|
||||
opts.index_only = cached;
|
||||
opts.diff_index_cached = (cached &&
|
||||
!DIFF_OPT_TST(&revs->diffopt, FIND_COPIES_HARDER));
|
||||
!revs->diffopt.flags.find_copies_harder);
|
||||
opts.merge = 1;
|
||||
opts.fn = oneway_diff;
|
||||
opts.unpack_data = revs;
|
||||
@ -534,7 +535,7 @@ int do_diff_cache(const struct object_id *tree_oid, struct diff_options *opt)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int index_differs_from(const char *def, int diff_flags,
|
||||
int index_differs_from(const char *def, const struct diff_flags *flags,
|
||||
int ita_invisible_in_index)
|
||||
{
|
||||
struct rev_info rev;
|
||||
@ -544,11 +545,12 @@ int index_differs_from(const char *def, int diff_flags,
|
||||
memset(&opt, 0, sizeof(opt));
|
||||
opt.def = def;
|
||||
setup_revisions(0, NULL, &rev, &opt);
|
||||
DIFF_OPT_SET(&rev.diffopt, QUICK);
|
||||
DIFF_OPT_SET(&rev.diffopt, EXIT_WITH_STATUS);
|
||||
rev.diffopt.flags |= diff_flags;
|
||||
rev.diffopt.flags.quick = 1;
|
||||
rev.diffopt.flags.exit_with_status = 1;
|
||||
if (flags)
|
||||
diff_flags_or(&rev.diffopt.flags, flags);
|
||||
rev.diffopt.ita_invisible_in_index = ita_invisible_in_index;
|
||||
run_diff_index(&rev, 1);
|
||||
object_array_clear(&rev.pending);
|
||||
return (DIFF_OPT_TST(&rev.diffopt, HAS_CHANGES) != 0);
|
||||
return (rev.diffopt.flags.has_changes != 0);
|
||||
}
|
||||
|
@ -184,7 +184,7 @@ static int queue_diff(struct diff_options *o,
|
||||
} else {
|
||||
struct diff_filespec *d1, *d2;
|
||||
|
||||
if (DIFF_OPT_TST(o, REVERSE_DIFF)) {
|
||||
if (o->flags.reverse_diff) {
|
||||
SWAP(mode1, mode2);
|
||||
SWAP(name1, name2);
|
||||
}
|
||||
@ -276,16 +276,16 @@ void diff_no_index(struct rev_info *revs,
|
||||
if (!revs->diffopt.output_format)
|
||||
revs->diffopt.output_format = DIFF_FORMAT_PATCH;
|
||||
|
||||
DIFF_OPT_SET(&revs->diffopt, NO_INDEX);
|
||||
revs->diffopt.flags.no_index = 1;
|
||||
|
||||
DIFF_OPT_SET(&revs->diffopt, RELATIVE_NAME);
|
||||
revs->diffopt.flags.relative_name = 1;
|
||||
revs->diffopt.prefix = prefix;
|
||||
|
||||
revs->max_count = -2;
|
||||
diff_setup_done(&revs->diffopt);
|
||||
|
||||
setup_diff_pager(&revs->diffopt);
|
||||
DIFF_OPT_SET(&revs->diffopt, EXIT_WITH_STATUS);
|
||||
revs->diffopt.flags.exit_with_status = 1;
|
||||
|
||||
if (queue_diff(&revs->diffopt, paths[0], paths[1]))
|
||||
exit(1);
|
||||
|
175
diff.c
175
diff.c
@ -124,18 +124,18 @@ static int parse_dirstat_params(struct diff_options *options, const char *params
|
||||
for (i = 0; i < params.nr; i++) {
|
||||
const char *p = params.items[i].string;
|
||||
if (!strcmp(p, "changes")) {
|
||||
DIFF_OPT_CLR(options, DIRSTAT_BY_LINE);
|
||||
DIFF_OPT_CLR(options, DIRSTAT_BY_FILE);
|
||||
options->flags.dirstat_by_line = 0;
|
||||
options->flags.dirstat_by_file = 0;
|
||||
} else if (!strcmp(p, "lines")) {
|
||||
DIFF_OPT_SET(options, DIRSTAT_BY_LINE);
|
||||
DIFF_OPT_CLR(options, DIRSTAT_BY_FILE);
|
||||
options->flags.dirstat_by_line = 1;
|
||||
options->flags.dirstat_by_file = 0;
|
||||
} else if (!strcmp(p, "files")) {
|
||||
DIFF_OPT_CLR(options, DIRSTAT_BY_LINE);
|
||||
DIFF_OPT_SET(options, DIRSTAT_BY_FILE);
|
||||
options->flags.dirstat_by_line = 0;
|
||||
options->flags.dirstat_by_file = 1;
|
||||
} else if (!strcmp(p, "noncumulative")) {
|
||||
DIFF_OPT_CLR(options, DIRSTAT_CUMULATIVE);
|
||||
options->flags.dirstat_cumulative = 0;
|
||||
} else if (!strcmp(p, "cumulative")) {
|
||||
DIFF_OPT_SET(options, DIRSTAT_CUMULATIVE);
|
||||
options->flags.dirstat_cumulative = 1;
|
||||
} else if (isdigit(*p)) {
|
||||
char *end;
|
||||
int permille = strtoul(p, &end, 10) * 10;
|
||||
@ -1412,7 +1412,7 @@ static void emit_rewrite_diff(const char *name_a,
|
||||
struct emit_callback ecbdata;
|
||||
struct strbuf out = STRBUF_INIT;
|
||||
|
||||
if (diff_mnemonic_prefix && DIFF_OPT_TST(o, REVERSE_DIFF)) {
|
||||
if (diff_mnemonic_prefix && o->flags.reverse_diff) {
|
||||
a_prefix = o->b_prefix;
|
||||
b_prefix = o->a_prefix;
|
||||
} else {
|
||||
@ -2660,7 +2660,7 @@ static void show_dirstat(struct diff_options *options)
|
||||
dir.alloc = 0;
|
||||
dir.nr = 0;
|
||||
dir.permille = options->dirstat_permille;
|
||||
dir.cumulative = DIFF_OPT_TST(options, DIRSTAT_CUMULATIVE);
|
||||
dir.cumulative = options->flags.dirstat_cumulative;
|
||||
|
||||
changed = 0;
|
||||
for (i = 0; i < q->nr; i++) {
|
||||
@ -2686,7 +2686,7 @@ static void show_dirstat(struct diff_options *options)
|
||||
goto found_damage;
|
||||
}
|
||||
|
||||
if (DIFF_OPT_TST(options, DIRSTAT_BY_FILE)) {
|
||||
if (options->flags.dirstat_by_file) {
|
||||
/*
|
||||
* In --dirstat-by-file mode, we don't really need to
|
||||
* look at the actual file contents at all.
|
||||
@ -2761,7 +2761,7 @@ static void show_dirstat_by_line(struct diffstat_t *data, struct diff_options *o
|
||||
dir.alloc = 0;
|
||||
dir.nr = 0;
|
||||
dir.permille = options->dirstat_permille;
|
||||
dir.cumulative = DIFF_OPT_TST(options, DIRSTAT_CUMULATIVE);
|
||||
dir.cumulative = options->flags.dirstat_cumulative;
|
||||
|
||||
changed = 0;
|
||||
for (i = 0; i < data->nr; i++) {
|
||||
@ -3048,7 +3048,7 @@ static void builtin_diff(const char *name_a,
|
||||
const char *line_prefix = diff_line_prefix(o);
|
||||
|
||||
diff_set_mnemonic_prefix(o, "a/", "b/");
|
||||
if (DIFF_OPT_TST(o, REVERSE_DIFF)) {
|
||||
if (o->flags.reverse_diff) {
|
||||
a_prefix = o->b_prefix;
|
||||
b_prefix = o->a_prefix;
|
||||
} else {
|
||||
@ -3072,7 +3072,7 @@ static void builtin_diff(const char *name_a,
|
||||
return;
|
||||
}
|
||||
|
||||
if (DIFF_OPT_TST(o, ALLOW_TEXTCONV)) {
|
||||
if (o->flags.allow_textconv) {
|
||||
textconv_one = get_textconv(one);
|
||||
textconv_two = get_textconv(two);
|
||||
}
|
||||
@ -3132,13 +3132,13 @@ static void builtin_diff(const char *name_a,
|
||||
header.len, 0);
|
||||
strbuf_reset(&header);
|
||||
goto free_ab_and_return;
|
||||
} else if (!DIFF_OPT_TST(o, TEXT) &&
|
||||
} else if (!o->flags.text &&
|
||||
( (!textconv_one && diff_filespec_is_binary(one)) ||
|
||||
(!textconv_two && diff_filespec_is_binary(two)) )) {
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
if (!one->data && !two->data &&
|
||||
S_ISREG(one->mode) && S_ISREG(two->mode) &&
|
||||
!DIFF_OPT_TST(o, BINARY)) {
|
||||
!o->flags.binary) {
|
||||
if (!oidcmp(&one->oid, &two->oid)) {
|
||||
if (must_show_header)
|
||||
emit_diff_symbol(o, DIFF_SYMBOL_HEADER,
|
||||
@ -3167,7 +3167,7 @@ static void builtin_diff(const char *name_a,
|
||||
}
|
||||
emit_diff_symbol(o, DIFF_SYMBOL_HEADER, header.buf, header.len, 0);
|
||||
strbuf_reset(&header);
|
||||
if (DIFF_OPT_TST(o, BINARY))
|
||||
if (o->flags.binary)
|
||||
emit_binary_diff(o, &mf1, &mf2);
|
||||
else {
|
||||
strbuf_addf(&sb, "%sBinary files %s and %s differ\n",
|
||||
@ -3213,7 +3213,7 @@ static void builtin_diff(const char *name_a,
|
||||
xecfg.ctxlen = o->context;
|
||||
xecfg.interhunkctxlen = o->interhunkcontext;
|
||||
xecfg.flags = XDL_EMIT_FUNCNAMES;
|
||||
if (DIFF_OPT_TST(o, FUNCCONTEXT))
|
||||
if (o->flags.funccontext)
|
||||
xecfg.flags |= XDL_EMIT_FUNCCONTEXT;
|
||||
if (pe)
|
||||
xdiff_set_find_func(&xecfg, pe->pattern, pe->cflags);
|
||||
@ -3378,7 +3378,7 @@ static void builtin_checkdiff(const char *name_a, const char *name_b,
|
||||
diff_free_filespec_data(one);
|
||||
diff_free_filespec_data(two);
|
||||
if (data.status)
|
||||
DIFF_OPT_SET(o, CHECK_FAILED);
|
||||
o->flags.check_failed = 1;
|
||||
}
|
||||
|
||||
struct diff_filespec *alloc_filespec(const char *path)
|
||||
@ -3870,9 +3870,9 @@ static void fill_metainfo(struct strbuf *msg,
|
||||
*must_show_header = 0;
|
||||
}
|
||||
if (one && two && oidcmp(&one->oid, &two->oid)) {
|
||||
int abbrev = DIFF_OPT_TST(o, FULL_INDEX) ? 40 : DEFAULT_ABBREV;
|
||||
int abbrev = o->flags.full_index ? 40 : DEFAULT_ABBREV;
|
||||
|
||||
if (DIFF_OPT_TST(o, BINARY)) {
|
||||
if (o->flags.binary) {
|
||||
mmfile_t mf;
|
||||
if ((!fill_mmfile(&mf, one) && diff_filespec_is_binary(one)) ||
|
||||
(!fill_mmfile(&mf, two) && diff_filespec_is_binary(two)))
|
||||
@ -3902,7 +3902,7 @@ static void run_diff_cmd(const char *pgm,
|
||||
int must_show_header = 0;
|
||||
|
||||
|
||||
if (DIFF_OPT_TST(o, ALLOW_EXTERNAL)) {
|
||||
if (o->flags.allow_external) {
|
||||
struct userdiff_driver *drv = userdiff_find_by_path(attr_path);
|
||||
if (drv && drv->external)
|
||||
pgm = drv->external;
|
||||
@ -3982,7 +3982,7 @@ static void run_diff(struct diff_filepair *p, struct diff_options *o)
|
||||
if (o->prefix_length)
|
||||
strip_prefix(o->prefix_length, &name, &other);
|
||||
|
||||
if (!DIFF_OPT_TST(o, ALLOW_EXTERNAL))
|
||||
if (!o->flags.allow_external)
|
||||
pgm = NULL;
|
||||
|
||||
if (DIFF_PAIR_UNMERGED(p)) {
|
||||
@ -4081,7 +4081,7 @@ void diff_setup(struct diff_options *options)
|
||||
options->context = diff_context_default;
|
||||
options->interhunkcontext = diff_interhunk_context_default;
|
||||
options->ws_error_highlight = ws_error_highlight_default;
|
||||
DIFF_OPT_SET(options, RENAME_EMPTY);
|
||||
options->flags.rename_empty = 1;
|
||||
|
||||
/* pathchange left =NULL by default */
|
||||
options->change = diff_change;
|
||||
@ -4132,14 +4132,14 @@ void diff_setup_done(struct diff_options *options)
|
||||
if (DIFF_XDL_TST(options, IGNORE_WHITESPACE) ||
|
||||
DIFF_XDL_TST(options, IGNORE_WHITESPACE_CHANGE) ||
|
||||
DIFF_XDL_TST(options, IGNORE_WHITESPACE_AT_EOL))
|
||||
DIFF_OPT_SET(options, DIFF_FROM_CONTENTS);
|
||||
options->flags.diff_from_contents = 1;
|
||||
else
|
||||
DIFF_OPT_CLR(options, DIFF_FROM_CONTENTS);
|
||||
options->flags.diff_from_contents = 0;
|
||||
|
||||
if (DIFF_OPT_TST(options, FIND_COPIES_HARDER))
|
||||
if (options->flags.find_copies_harder)
|
||||
options->detect_rename = DIFF_DETECT_COPY;
|
||||
|
||||
if (!DIFF_OPT_TST(options, RELATIVE_NAME))
|
||||
if (!options->flags.relative_name)
|
||||
options->prefix = NULL;
|
||||
if (options->prefix)
|
||||
options->prefix_length = strlen(options->prefix);
|
||||
@ -4169,18 +4169,18 @@ void diff_setup_done(struct diff_options *options)
|
||||
DIFF_FORMAT_DIRSTAT |
|
||||
DIFF_FORMAT_SUMMARY |
|
||||
DIFF_FORMAT_CHECKDIFF))
|
||||
DIFF_OPT_SET(options, RECURSIVE);
|
||||
options->flags.recursive = 1;
|
||||
/*
|
||||
* Also pickaxe would not work very well if you do not say recursive
|
||||
*/
|
||||
if (options->pickaxe)
|
||||
DIFF_OPT_SET(options, RECURSIVE);
|
||||
options->flags.recursive = 1;
|
||||
/*
|
||||
* When patches are generated, submodules diffed against the work tree
|
||||
* must be checked for dirtiness too so it can be shown in the output
|
||||
*/
|
||||
if (options->output_format & DIFF_FORMAT_PATCH)
|
||||
DIFF_OPT_SET(options, DIRTY_SUBMODULES);
|
||||
options->flags.dirty_submodules = 1;
|
||||
|
||||
if (options->detect_rename && options->rename_limit < 0)
|
||||
options->rename_limit = diff_rename_limit_default;
|
||||
@ -4202,14 +4202,14 @@ void diff_setup_done(struct diff_options *options)
|
||||
* to have found. It does not make sense not to return with
|
||||
* exit code in such a case either.
|
||||
*/
|
||||
if (DIFF_OPT_TST(options, QUICK)) {
|
||||
if (options->flags.quick) {
|
||||
options->output_format = DIFF_FORMAT_NO_OUTPUT;
|
||||
DIFF_OPT_SET(options, EXIT_WITH_STATUS);
|
||||
options->flags.exit_with_status = 1;
|
||||
}
|
||||
|
||||
options->diff_path_counter = 0;
|
||||
|
||||
if (DIFF_OPT_TST(options, FOLLOW_RENAMES) && options->pathspec.nr != 1)
|
||||
if (options->flags.follow_renames && options->pathspec.nr != 1)
|
||||
die(_("--follow requires exactly one pathspec"));
|
||||
|
||||
if (!options->use_color || external_diff())
|
||||
@ -4559,7 +4559,7 @@ int diff_opt_parse(struct diff_options *options,
|
||||
else if (starts_with(arg, "-C") || starts_with(arg, "--find-copies=") ||
|
||||
!strcmp(arg, "--find-copies")) {
|
||||
if (options->detect_rename == DIFF_DETECT_COPY)
|
||||
DIFF_OPT_SET(options, FIND_COPIES_HARDER);
|
||||
options->flags.find_copies_harder = 1;
|
||||
if ((options->rename_score = diff_scoreopt_parse(arg)) == -1)
|
||||
return error("invalid argument to -C: %s", arg+2);
|
||||
options->detect_rename = DIFF_DETECT_COPY;
|
||||
@ -4567,13 +4567,13 @@ int diff_opt_parse(struct diff_options *options,
|
||||
else if (!strcmp(arg, "--no-renames"))
|
||||
options->detect_rename = 0;
|
||||
else if (!strcmp(arg, "--rename-empty"))
|
||||
DIFF_OPT_SET(options, RENAME_EMPTY);
|
||||
options->flags.rename_empty = 1;
|
||||
else if (!strcmp(arg, "--no-rename-empty"))
|
||||
DIFF_OPT_CLR(options, RENAME_EMPTY);
|
||||
options->flags.rename_empty = 0;
|
||||
else if (!strcmp(arg, "--relative"))
|
||||
DIFF_OPT_SET(options, RELATIVE_NAME);
|
||||
options->flags.relative_name = 1;
|
||||
else if (skip_prefix(arg, "--relative=", &arg)) {
|
||||
DIFF_OPT_SET(options, RELATIVE_NAME);
|
||||
options->flags.relative_name = 1;
|
||||
options->prefix = arg;
|
||||
}
|
||||
|
||||
@ -4613,21 +4613,21 @@ int diff_opt_parse(struct diff_options *options,
|
||||
/* flags options */
|
||||
else if (!strcmp(arg, "--binary")) {
|
||||
enable_patch_output(&options->output_format);
|
||||
DIFF_OPT_SET(options, BINARY);
|
||||
options->flags.binary = 1;
|
||||
}
|
||||
else if (!strcmp(arg, "--full-index"))
|
||||
DIFF_OPT_SET(options, FULL_INDEX);
|
||||
options->flags.full_index = 1;
|
||||
else if (!strcmp(arg, "-a") || !strcmp(arg, "--text"))
|
||||
DIFF_OPT_SET(options, TEXT);
|
||||
options->flags.text = 1;
|
||||
else if (!strcmp(arg, "-R"))
|
||||
DIFF_OPT_SET(options, REVERSE_DIFF);
|
||||
options->flags.reverse_diff = 1;
|
||||
else if (!strcmp(arg, "--find-copies-harder"))
|
||||
DIFF_OPT_SET(options, FIND_COPIES_HARDER);
|
||||
options->flags.find_copies_harder = 1;
|
||||
else if (!strcmp(arg, "--follow"))
|
||||
DIFF_OPT_SET(options, FOLLOW_RENAMES);
|
||||
options->flags.follow_renames = 1;
|
||||
else if (!strcmp(arg, "--no-follow")) {
|
||||
DIFF_OPT_CLR(options, FOLLOW_RENAMES);
|
||||
DIFF_OPT_CLR(options, DEFAULT_FOLLOW_RENAMES);
|
||||
options->flags.follow_renames = 0;
|
||||
options->flags.default_follow_renames = 0;
|
||||
} else if (!strcmp(arg, "--color"))
|
||||
options->use_color = 1;
|
||||
else if (skip_prefix(arg, "--color=", &arg)) {
|
||||
@ -4684,22 +4684,23 @@ int diff_opt_parse(struct diff_options *options,
|
||||
return argcount;
|
||||
}
|
||||
else if (!strcmp(arg, "--exit-code"))
|
||||
DIFF_OPT_SET(options, EXIT_WITH_STATUS);
|
||||
options->flags.exit_with_status = 1;
|
||||
else if (!strcmp(arg, "--quiet"))
|
||||
DIFF_OPT_SET(options, QUICK);
|
||||
options->flags.quick = 1;
|
||||
else if (!strcmp(arg, "--ext-diff"))
|
||||
DIFF_OPT_SET(options, ALLOW_EXTERNAL);
|
||||
options->flags.allow_external = 1;
|
||||
else if (!strcmp(arg, "--no-ext-diff"))
|
||||
DIFF_OPT_CLR(options, ALLOW_EXTERNAL);
|
||||
else if (!strcmp(arg, "--textconv"))
|
||||
DIFF_OPT_SET(options, ALLOW_TEXTCONV);
|
||||
else if (!strcmp(arg, "--no-textconv"))
|
||||
DIFF_OPT_CLR(options, ALLOW_TEXTCONV);
|
||||
options->flags.allow_external = 0;
|
||||
else if (!strcmp(arg, "--textconv")) {
|
||||
options->flags.allow_textconv = 1;
|
||||
options->flags.textconv_set_via_cmdline = 1;
|
||||
} else if (!strcmp(arg, "--no-textconv"))
|
||||
options->flags.allow_textconv = 0;
|
||||
else if (!strcmp(arg, "--ignore-submodules")) {
|
||||
DIFF_OPT_SET(options, OVERRIDE_SUBMODULE_CONFIG);
|
||||
options->flags.override_submodule_config = 1;
|
||||
handle_ignore_submodules_arg(options, "all");
|
||||
} else if (skip_prefix(arg, "--ignore-submodules=", &arg)) {
|
||||
DIFF_OPT_SET(options, OVERRIDE_SUBMODULE_CONFIG);
|
||||
options->flags.override_submodule_config = 1;
|
||||
handle_ignore_submodules_arg(options, arg);
|
||||
} else if (!strcmp(arg, "--submodule"))
|
||||
options->submodule_format = DIFF_SUBMODULE_LOG;
|
||||
@ -4774,11 +4775,11 @@ int diff_opt_parse(struct diff_options *options,
|
||||
&options->interhunkcontext))
|
||||
;
|
||||
else if (!strcmp(arg, "-W"))
|
||||
DIFF_OPT_SET(options, FUNCCONTEXT);
|
||||
options->flags.funccontext = 1;
|
||||
else if (!strcmp(arg, "--function-context"))
|
||||
DIFF_OPT_SET(options, FUNCCONTEXT);
|
||||
options->flags.funccontext = 1;
|
||||
else if (!strcmp(arg, "--no-function-context"))
|
||||
DIFF_OPT_CLR(options, FUNCCONTEXT);
|
||||
options->flags.funccontext = 0;
|
||||
else if ((argcount = parse_long_opt("output", av, &optarg))) {
|
||||
char *path = prefix_filename(prefix, optarg);
|
||||
options->file = xfopen(path, "w");
|
||||
@ -5528,7 +5529,7 @@ void diff_flush(struct diff_options *options)
|
||||
separator++;
|
||||
}
|
||||
|
||||
if (output_format & DIFF_FORMAT_DIRSTAT && DIFF_OPT_TST(options, DIRSTAT_BY_LINE))
|
||||
if (output_format & DIFF_FORMAT_DIRSTAT && options->flags.dirstat_by_line)
|
||||
dirstat_by_line = 1;
|
||||
|
||||
if (output_format & (DIFF_FORMAT_DIFFSTAT|DIFF_FORMAT_SHORTSTAT|DIFF_FORMAT_NUMSTAT) ||
|
||||
@ -5563,8 +5564,8 @@ void diff_flush(struct diff_options *options)
|
||||
}
|
||||
|
||||
if (output_format & DIFF_FORMAT_NO_OUTPUT &&
|
||||
DIFF_OPT_TST(options, EXIT_WITH_STATUS) &&
|
||||
DIFF_OPT_TST(options, DIFF_FROM_CONTENTS)) {
|
||||
options->flags.exit_with_status &&
|
||||
options->flags.diff_from_contents) {
|
||||
/*
|
||||
* run diff_flush_patch for the exit status. setting
|
||||
* options->file to /dev/null should be safe, because we
|
||||
@ -5612,11 +5613,11 @@ free_queue:
|
||||
* diff_addremove/diff_change does not set the bit when
|
||||
* DIFF_FROM_CONTENTS is in effect (e.g. with -w).
|
||||
*/
|
||||
if (DIFF_OPT_TST(options, DIFF_FROM_CONTENTS)) {
|
||||
if (options->flags.diff_from_contents) {
|
||||
if (options->found_changes)
|
||||
DIFF_OPT_SET(options, HAS_CHANGES);
|
||||
options->flags.has_changes = 1;
|
||||
else
|
||||
DIFF_OPT_CLR(options, HAS_CHANGES);
|
||||
options->flags.has_changes = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -5736,7 +5737,7 @@ static void diffcore_skip_stat_unmatch(struct diff_options *diffopt)
|
||||
* to determine how many paths were dirty only
|
||||
* due to stat info mismatch.
|
||||
*/
|
||||
if (!DIFF_OPT_TST(diffopt, NO_INDEX))
|
||||
if (!diffopt->flags.no_index)
|
||||
diffopt->skip_stat_unmatch++;
|
||||
diff_free_filepair(p);
|
||||
}
|
||||
@ -5785,10 +5786,10 @@ void diffcore_std(struct diff_options *options)
|
||||
diff_resolve_rename_copy();
|
||||
diffcore_apply_filter(options);
|
||||
|
||||
if (diff_queued_diff.nr && !DIFF_OPT_TST(options, DIFF_FROM_CONTENTS))
|
||||
DIFF_OPT_SET(options, HAS_CHANGES);
|
||||
if (diff_queued_diff.nr && !options->flags.diff_from_contents)
|
||||
options->flags.has_changes = 1;
|
||||
else
|
||||
DIFF_OPT_CLR(options, HAS_CHANGES);
|
||||
options->flags.has_changes = 0;
|
||||
|
||||
options->found_follow = 0;
|
||||
}
|
||||
@ -5800,23 +5801,23 @@ int diff_result_code(struct diff_options *opt, int status)
|
||||
diff_warn_rename_limit("diff.renameLimit",
|
||||
opt->needed_rename_limit,
|
||||
opt->degraded_cc_to_c);
|
||||
if (!DIFF_OPT_TST(opt, EXIT_WITH_STATUS) &&
|
||||
if (!opt->flags.exit_with_status &&
|
||||
!(opt->output_format & DIFF_FORMAT_CHECKDIFF))
|
||||
return status;
|
||||
if (DIFF_OPT_TST(opt, EXIT_WITH_STATUS) &&
|
||||
DIFF_OPT_TST(opt, HAS_CHANGES))
|
||||
if (opt->flags.exit_with_status &&
|
||||
opt->flags.has_changes)
|
||||
result |= 01;
|
||||
if ((opt->output_format & DIFF_FORMAT_CHECKDIFF) &&
|
||||
DIFF_OPT_TST(opt, CHECK_FAILED))
|
||||
opt->flags.check_failed)
|
||||
result |= 02;
|
||||
return result;
|
||||
}
|
||||
|
||||
int diff_can_quit_early(struct diff_options *opt)
|
||||
{
|
||||
return (DIFF_OPT_TST(opt, QUICK) &&
|
||||
return (opt->flags.quick &&
|
||||
!opt->filter &&
|
||||
DIFF_OPT_TST(opt, HAS_CHANGES));
|
||||
opt->flags.has_changes);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -5828,10 +5829,10 @@ int diff_can_quit_early(struct diff_options *opt)
|
||||
static int is_submodule_ignored(const char *path, struct diff_options *options)
|
||||
{
|
||||
int ignored = 0;
|
||||
unsigned orig_flags = options->flags;
|
||||
if (!DIFF_OPT_TST(options, OVERRIDE_SUBMODULE_CONFIG))
|
||||
struct diff_flags orig_flags = options->flags;
|
||||
if (!options->flags.override_submodule_config)
|
||||
set_diffopt_flags_from_submodule_config(options, path);
|
||||
if (DIFF_OPT_TST(options, IGNORE_SUBMODULES))
|
||||
if (options->flags.ignore_submodules)
|
||||
ignored = 1;
|
||||
options->flags = orig_flags;
|
||||
return ignored;
|
||||
@ -5860,7 +5861,7 @@ void diff_addremove(struct diff_options *options,
|
||||
* Before the final output happens, they are pruned after
|
||||
* merged into rename/copy pairs as appropriate.
|
||||
*/
|
||||
if (DIFF_OPT_TST(options, REVERSE_DIFF))
|
||||
if (options->flags.reverse_diff)
|
||||
addremove = (addremove == '+' ? '-' :
|
||||
addremove == '-' ? '+' : addremove);
|
||||
|
||||
@ -5879,8 +5880,8 @@ void diff_addremove(struct diff_options *options,
|
||||
}
|
||||
|
||||
diff_queue(&diff_queued_diff, one, two);
|
||||
if (!DIFF_OPT_TST(options, DIFF_FROM_CONTENTS))
|
||||
DIFF_OPT_SET(options, HAS_CHANGES);
|
||||
if (!options->flags.diff_from_contents)
|
||||
options->flags.has_changes = 1;
|
||||
}
|
||||
|
||||
void diff_change(struct diff_options *options,
|
||||
@ -5898,7 +5899,7 @@ void diff_change(struct diff_options *options,
|
||||
is_submodule_ignored(concatpath, options))
|
||||
return;
|
||||
|
||||
if (DIFF_OPT_TST(options, REVERSE_DIFF)) {
|
||||
if (options->flags.reverse_diff) {
|
||||
SWAP(old_mode, new_mode);
|
||||
SWAP(old_oid, new_oid);
|
||||
SWAP(old_oid_valid, new_oid_valid);
|
||||
@ -5917,14 +5918,14 @@ void diff_change(struct diff_options *options,
|
||||
two->dirty_submodule = new_dirty_submodule;
|
||||
p = diff_queue(&diff_queued_diff, one, two);
|
||||
|
||||
if (DIFF_OPT_TST(options, DIFF_FROM_CONTENTS))
|
||||
if (options->flags.diff_from_contents)
|
||||
return;
|
||||
|
||||
if (DIFF_OPT_TST(options, QUICK) && options->skip_stat_unmatch &&
|
||||
if (options->flags.quick && options->skip_stat_unmatch &&
|
||||
!diff_filespec_check_stat_unmatch(p))
|
||||
return;
|
||||
|
||||
DIFF_OPT_SET(options, HAS_CHANGES);
|
||||
options->flags.has_changes = 1;
|
||||
}
|
||||
|
||||
struct diff_filepair *diff_unmerge(struct diff_options *options, const char *path)
|
||||
@ -6062,7 +6063,7 @@ void setup_diff_pager(struct diff_options *opt)
|
||||
* and because it is easy to find people oneline advising "git diff
|
||||
* --exit-code" in hooks and other scripts, we do not do so.
|
||||
*/
|
||||
if (!DIFF_OPT_TST(opt, EXIT_WITH_STATUS) &&
|
||||
if (!opt->flags.exit_with_status &&
|
||||
check_pager_config("diff") != 0)
|
||||
setup_pager();
|
||||
}
|
||||
|
86
diff.h
86
diff.h
@ -60,42 +60,52 @@ typedef struct strbuf *(*diff_prefix_fn_t)(struct diff_options *opt, void *data)
|
||||
|
||||
#define DIFF_FORMAT_CALLBACK 0x1000
|
||||
|
||||
#define DIFF_OPT_RECURSIVE (1 << 0)
|
||||
#define DIFF_OPT_TREE_IN_RECURSIVE (1 << 1)
|
||||
#define DIFF_OPT_BINARY (1 << 2)
|
||||
#define DIFF_OPT_TEXT (1 << 3)
|
||||
#define DIFF_OPT_FULL_INDEX (1 << 4)
|
||||
#define DIFF_OPT_SILENT_ON_REMOVE (1 << 5)
|
||||
#define DIFF_OPT_FIND_COPIES_HARDER (1 << 6)
|
||||
#define DIFF_OPT_FOLLOW_RENAMES (1 << 7)
|
||||
#define DIFF_OPT_RENAME_EMPTY (1 << 8)
|
||||
/* (1 << 9) unused */
|
||||
#define DIFF_OPT_HAS_CHANGES (1 << 10)
|
||||
#define DIFF_OPT_QUICK (1 << 11)
|
||||
#define DIFF_OPT_NO_INDEX (1 << 12)
|
||||
#define DIFF_OPT_ALLOW_EXTERNAL (1 << 13)
|
||||
#define DIFF_OPT_EXIT_WITH_STATUS (1 << 14)
|
||||
#define DIFF_OPT_REVERSE_DIFF (1 << 15)
|
||||
#define DIFF_OPT_CHECK_FAILED (1 << 16)
|
||||
#define DIFF_OPT_RELATIVE_NAME (1 << 17)
|
||||
#define DIFF_OPT_IGNORE_SUBMODULES (1 << 18)
|
||||
#define DIFF_OPT_DIRSTAT_CUMULATIVE (1 << 19)
|
||||
#define DIFF_OPT_DIRSTAT_BY_FILE (1 << 20)
|
||||
#define DIFF_OPT_ALLOW_TEXTCONV (1 << 21)
|
||||
#define DIFF_OPT_DIFF_FROM_CONTENTS (1 << 22)
|
||||
#define DIFF_OPT_DIRTY_SUBMODULES (1 << 24)
|
||||
#define DIFF_OPT_IGNORE_UNTRACKED_IN_SUBMODULES (1 << 25)
|
||||
#define DIFF_OPT_IGNORE_DIRTY_SUBMODULES (1 << 26)
|
||||
#define DIFF_OPT_OVERRIDE_SUBMODULE_CONFIG (1 << 27)
|
||||
#define DIFF_OPT_DIRSTAT_BY_LINE (1 << 28)
|
||||
#define DIFF_OPT_FUNCCONTEXT (1 << 29)
|
||||
#define DIFF_OPT_PICKAXE_IGNORE_CASE (1 << 30)
|
||||
#define DIFF_OPT_DEFAULT_FOLLOW_RENAMES (1U << 31)
|
||||
#define DIFF_FLAGS_INIT { 0 }
|
||||
struct diff_flags {
|
||||
unsigned recursive:1;
|
||||
unsigned tree_in_recursive:1;
|
||||
unsigned binary:1;
|
||||
unsigned text:1;
|
||||
unsigned full_index:1;
|
||||
unsigned silent_on_remove:1;
|
||||
unsigned find_copies_harder:1;
|
||||
unsigned follow_renames:1;
|
||||
unsigned rename_empty:1;
|
||||
unsigned has_changes:1;
|
||||
unsigned quick:1;
|
||||
unsigned no_index:1;
|
||||
unsigned allow_external:1;
|
||||
unsigned exit_with_status:1;
|
||||
unsigned reverse_diff:1;
|
||||
unsigned check_failed:1;
|
||||
unsigned relative_name:1;
|
||||
unsigned ignore_submodules:1;
|
||||
unsigned dirstat_cumulative:1;
|
||||
unsigned dirstat_by_file:1;
|
||||
unsigned allow_textconv:1;
|
||||
unsigned textconv_set_via_cmdline:1;
|
||||
unsigned diff_from_contents:1;
|
||||
unsigned dirty_submodules:1;
|
||||
unsigned ignore_untracked_in_submodules:1;
|
||||
unsigned ignore_dirty_submodules:1;
|
||||
unsigned override_submodule_config:1;
|
||||
unsigned dirstat_by_line:1;
|
||||
unsigned funccontext:1;
|
||||
unsigned pickaxe_ignore_case:1;
|
||||
unsigned default_follow_renames:1;
|
||||
};
|
||||
|
||||
static inline void diff_flags_or(struct diff_flags *a,
|
||||
const struct diff_flags *b)
|
||||
{
|
||||
char *tmp_a = (char *)a;
|
||||
const char *tmp_b = (const char *)b;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < sizeof(struct diff_flags); i++)
|
||||
tmp_a[i] |= tmp_b[i];
|
||||
}
|
||||
|
||||
#define DIFF_OPT_TST(opts, flag) ((opts)->flags & DIFF_OPT_##flag)
|
||||
#define DIFF_OPT_TOUCHED(opts, flag) ((opts)->touched_flags & DIFF_OPT_##flag)
|
||||
#define DIFF_OPT_SET(opts, flag) (((opts)->flags |= DIFF_OPT_##flag),((opts)->touched_flags |= DIFF_OPT_##flag))
|
||||
#define DIFF_OPT_CLR(opts, flag) (((opts)->flags &= ~DIFF_OPT_##flag),((opts)->touched_flags |= DIFF_OPT_##flag))
|
||||
#define DIFF_XDL_TST(opts, flag) ((opts)->xdl_opts & XDF_##flag)
|
||||
#define DIFF_XDL_SET(opts, flag) ((opts)->xdl_opts |= XDF_##flag)
|
||||
#define DIFF_XDL_CLR(opts, flag) ((opts)->xdl_opts &= ~XDF_##flag)
|
||||
@ -122,8 +132,7 @@ struct diff_options {
|
||||
const char *a_prefix, *b_prefix;
|
||||
const char *line_prefix;
|
||||
size_t line_prefix_length;
|
||||
unsigned flags;
|
||||
unsigned touched_flags;
|
||||
struct diff_flags flags;
|
||||
|
||||
/* diff-filter bits */
|
||||
unsigned int filter;
|
||||
@ -389,7 +398,8 @@ extern int diff_result_code(struct diff_options *, int);
|
||||
|
||||
extern void diff_no_index(struct rev_info *, int, const char **);
|
||||
|
||||
extern int index_differs_from(const char *def, int diff_flags, int ita_invisible_in_index);
|
||||
extern int index_differs_from(const char *def, const struct diff_flags *flags,
|
||||
int ita_invisible_in_index);
|
||||
|
||||
/*
|
||||
* Fill the contents of the filespec "df", respecting any textconv defined by
|
||||
|
@ -131,7 +131,7 @@ static int pickaxe_match(struct diff_filepair *p, struct diff_options *o,
|
||||
if (!DIFF_FILE_VALID(p->one) && !DIFF_FILE_VALID(p->two))
|
||||
return 0;
|
||||
|
||||
if (DIFF_OPT_TST(o, ALLOW_TEXTCONV)) {
|
||||
if (o->flags.allow_textconv) {
|
||||
textconv_one = get_textconv(p->one);
|
||||
textconv_two = get_textconv(p->two);
|
||||
}
|
||||
@ -222,11 +222,11 @@ void diffcore_pickaxe(struct diff_options *o)
|
||||
|
||||
if (opts & (DIFF_PICKAXE_REGEX | DIFF_PICKAXE_KIND_G)) {
|
||||
int cflags = REG_EXTENDED | REG_NEWLINE;
|
||||
if (DIFF_OPT_TST(o, PICKAXE_IGNORE_CASE))
|
||||
if (o->flags.pickaxe_ignore_case)
|
||||
cflags |= REG_ICASE;
|
||||
regcomp_or_die(®ex, needle, cflags);
|
||||
regexp = ®ex;
|
||||
} else if (DIFF_OPT_TST(o, PICKAXE_IGNORE_CASE) &&
|
||||
} else if (o->flags.pickaxe_ignore_case &&
|
||||
has_non_ascii(needle)) {
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
int cflags = REG_NEWLINE | REG_ICASE;
|
||||
@ -236,7 +236,7 @@ void diffcore_pickaxe(struct diff_options *o)
|
||||
strbuf_release(&sb);
|
||||
regexp = ®ex;
|
||||
} else {
|
||||
kws = kwsalloc(DIFF_OPT_TST(o, PICKAXE_IGNORE_CASE)
|
||||
kws = kwsalloc(o->flags.pickaxe_ignore_case
|
||||
? tolower_trans_tbl : NULL);
|
||||
kwsincr(kws, needle, strlen(needle));
|
||||
kwsprep(kws);
|
||||
|
@ -405,7 +405,7 @@ static int too_many_rename_candidates(int num_create,
|
||||
num_src > num_create ? num_src : num_create;
|
||||
|
||||
/* Are we running under -C -C? */
|
||||
if (!DIFF_OPT_TST(options, FIND_COPIES_HARDER))
|
||||
if (!options->flags.find_copies_harder)
|
||||
return 1;
|
||||
|
||||
/* Would we bust the limit if we were running under -C? */
|
||||
@ -463,7 +463,7 @@ void diffcore_rename(struct diff_options *options)
|
||||
else if (options->single_follow &&
|
||||
strcmp(options->single_follow, p->two->path))
|
||||
continue; /* not interested */
|
||||
else if (!DIFF_OPT_TST(options, RENAME_EMPTY) &&
|
||||
else if (!options->flags.rename_empty &&
|
||||
is_empty_blob_oid(&p->two->oid))
|
||||
continue;
|
||||
else if (add_rename_dst(p->two) < 0) {
|
||||
@ -473,7 +473,7 @@ void diffcore_rename(struct diff_options *options)
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
else if (!DIFF_OPT_TST(options, RENAME_EMPTY) &&
|
||||
else if (!options->flags.rename_empty &&
|
||||
is_empty_blob_oid(&p->one->oid))
|
||||
continue;
|
||||
else if (!DIFF_PAIR_UNMERGED(p) && !DIFF_FILE_VALID(p->two)) {
|
||||
|
@ -793,7 +793,7 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log
|
||||
struct commit_list *parents;
|
||||
struct object_id *oid;
|
||||
|
||||
if (!opt->diff && !DIFF_OPT_TST(&opt->diffopt, EXIT_WITH_STATUS))
|
||||
if (!opt->diff && !opt->diffopt.flags.exit_with_status)
|
||||
return 0;
|
||||
|
||||
parse_commit_or_die(commit);
|
||||
|
@ -540,8 +540,8 @@ static struct string_list *get_renames(struct merge_options *o,
|
||||
return renames;
|
||||
|
||||
diff_setup(&opts);
|
||||
DIFF_OPT_SET(&opts, RECURSIVE);
|
||||
DIFF_OPT_CLR(&opts, RENAME_EMPTY);
|
||||
opts.flags.recursive = 1;
|
||||
opts.flags.rename_empty = 0;
|
||||
opts.detect_rename = DIFF_DETECT_RENAME;
|
||||
opts.rename_limit = o->merge_rename_limit >= 0 ? o->merge_rename_limit :
|
||||
o->diff_rename_limit >= 0 ? o->diff_rename_limit :
|
||||
|
@ -125,7 +125,7 @@ static struct notes_merge_pair *diff_tree_remote(struct notes_merge_options *o,
|
||||
oid_to_hex(base), oid_to_hex(remote));
|
||||
|
||||
diff_setup(&opt);
|
||||
DIFF_OPT_SET(&opt, RECURSIVE);
|
||||
opt.flags.recursive = 1;
|
||||
opt.output_format = DIFF_FORMAT_NO_OUTPUT;
|
||||
diff_setup_done(&opt);
|
||||
diff_tree_oid(base, remote, "", &opt);
|
||||
@ -188,7 +188,7 @@ static void diff_tree_local(struct notes_merge_options *o,
|
||||
len, oid_to_hex(base), oid_to_hex(local));
|
||||
|
||||
diff_setup(&opt);
|
||||
DIFF_OPT_SET(&opt, RECURSIVE);
|
||||
opt.flags.recursive = 1;
|
||||
opt.output_format = DIFF_FORMAT_NO_OUTPUT;
|
||||
diff_setup_done(&opt);
|
||||
diff_tree_oid(base, local, "", &opt);
|
||||
|
@ -61,7 +61,7 @@ int init_patch_ids(struct patch_ids *ids)
|
||||
memset(ids, 0, sizeof(*ids));
|
||||
diff_setup(&ids->diffopts);
|
||||
ids->diffopts.detect_rename = 0;
|
||||
DIFF_OPT_SET(&ids->diffopts, RECURSIVE);
|
||||
ids->diffopts.flags.recursive = 1;
|
||||
diff_setup_done(&ids->diffopts);
|
||||
hashmap_init(&ids->patches, patch_id_cmp, &ids->diffopts, 256);
|
||||
return 0;
|
||||
|
24
revision.c
24
revision.c
@ -419,7 +419,7 @@ static void file_add_remove(struct diff_options *options,
|
||||
|
||||
tree_difference |= diff;
|
||||
if (!revs->remove_empty_trees || tree_difference != REV_TREE_NEW)
|
||||
DIFF_OPT_SET(options, HAS_CHANGES);
|
||||
options->flags.has_changes = 1;
|
||||
}
|
||||
|
||||
static void file_change(struct diff_options *options,
|
||||
@ -431,7 +431,7 @@ static void file_change(struct diff_options *options,
|
||||
unsigned old_dirty_submodule, unsigned new_dirty_submodule)
|
||||
{
|
||||
tree_difference = REV_TREE_DIFFERENT;
|
||||
DIFF_OPT_SET(options, HAS_CHANGES);
|
||||
options->flags.has_changes = 1;
|
||||
}
|
||||
|
||||
static int rev_compare_tree(struct rev_info *revs,
|
||||
@ -464,7 +464,7 @@ static int rev_compare_tree(struct rev_info *revs,
|
||||
}
|
||||
|
||||
tree_difference = REV_TREE_SAME;
|
||||
DIFF_OPT_CLR(&revs->pruning, HAS_CHANGES);
|
||||
revs->pruning.flags.has_changes = 0;
|
||||
if (diff_tree_oid(&t1->object.oid, &t2->object.oid, "",
|
||||
&revs->pruning) < 0)
|
||||
return REV_TREE_DIFFERENT;
|
||||
@ -480,7 +480,7 @@ static int rev_same_tree_as_empty(struct rev_info *revs, struct commit *commit)
|
||||
return 0;
|
||||
|
||||
tree_difference = REV_TREE_SAME;
|
||||
DIFF_OPT_CLR(&revs->pruning, HAS_CHANGES);
|
||||
revs->pruning.flags.has_changes = 0;
|
||||
retval = diff_tree_oid(NULL, &t1->object.oid, "", &revs->pruning);
|
||||
|
||||
return retval >= 0 && (tree_difference == REV_TREE_SAME);
|
||||
@ -1412,8 +1412,8 @@ void init_revisions(struct rev_info *revs, const char *prefix)
|
||||
revs->abbrev = DEFAULT_ABBREV;
|
||||
revs->ignore_merges = 1;
|
||||
revs->simplify_history = 1;
|
||||
DIFF_OPT_SET(&revs->pruning, RECURSIVE);
|
||||
DIFF_OPT_SET(&revs->pruning, QUICK);
|
||||
revs->pruning.flags.recursive = 1;
|
||||
revs->pruning.flags.quick = 1;
|
||||
revs->pruning.add_remove = file_add_remove;
|
||||
revs->pruning.change = file_change;
|
||||
revs->pruning.change_fn_data = revs;
|
||||
@ -1927,11 +1927,11 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
|
||||
die("--unpacked=<packfile> no longer supported.");
|
||||
} else if (!strcmp(arg, "-r")) {
|
||||
revs->diff = 1;
|
||||
DIFF_OPT_SET(&revs->diffopt, RECURSIVE);
|
||||
revs->diffopt.flags.recursive = 1;
|
||||
} else if (!strcmp(arg, "-t")) {
|
||||
revs->diff = 1;
|
||||
DIFF_OPT_SET(&revs->diffopt, RECURSIVE);
|
||||
DIFF_OPT_SET(&revs->diffopt, TREE_IN_RECURSIVE);
|
||||
revs->diffopt.flags.recursive = 1;
|
||||
revs->diffopt.flags.tree_in_recursive = 1;
|
||||
} else if (!strcmp(arg, "-m")) {
|
||||
revs->ignore_merges = 0;
|
||||
} else if (!strcmp(arg, "-c")) {
|
||||
@ -2076,7 +2076,7 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
|
||||
revs->grep_filter.pattern_type_option = GREP_PATTERN_TYPE_ERE;
|
||||
} else if (!strcmp(arg, "--regexp-ignore-case") || !strcmp(arg, "-i")) {
|
||||
revs->grep_filter.ignore_case = 1;
|
||||
DIFF_OPT_SET(&revs->diffopt, PICKAXE_IGNORE_CASE);
|
||||
revs->diffopt.flags.pickaxe_ignore_case = 1;
|
||||
} else if (!strcmp(arg, "--fixed-strings") || !strcmp(arg, "-F")) {
|
||||
revs->grep_filter.pattern_type_option = GREP_PATTERN_TYPE_FIXED;
|
||||
} else if (!strcmp(arg, "--perl-regexp") || !strcmp(arg, "-P")) {
|
||||
@ -2409,7 +2409,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
|
||||
/* Pickaxe, diff-filter and rename following need diffs */
|
||||
if (revs->diffopt.pickaxe ||
|
||||
revs->diffopt.filter ||
|
||||
DIFF_OPT_TST(&revs->diffopt, FOLLOW_RENAMES))
|
||||
revs->diffopt.flags.follow_renames)
|
||||
revs->diff = 1;
|
||||
|
||||
if (revs->topo_order)
|
||||
@ -2418,7 +2418,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
|
||||
if (revs->prune_data.nr) {
|
||||
copy_pathspec(&revs->pruning.pathspec, &revs->prune_data);
|
||||
/* Can't prune commits with rename following: the paths change.. */
|
||||
if (!DIFF_OPT_TST(&revs->diffopt, FOLLOW_RENAMES))
|
||||
if (!revs->diffopt.flags.follow_renames)
|
||||
revs->prune = 1;
|
||||
if (!revs->full_diff)
|
||||
copy_pathspec(&revs->diffopt.pathspec,
|
||||
|
@ -959,7 +959,8 @@ static int do_pick_commit(enum todo_command command, struct commit *commit,
|
||||
unborn = get_oid("HEAD", &head);
|
||||
if (unborn)
|
||||
oidcpy(&head, &empty_tree_oid);
|
||||
if (index_differs_from(unborn ? EMPTY_TREE_SHA1_HEX : "HEAD", 0, 0))
|
||||
if (index_differs_from(unborn ? EMPTY_TREE_SHA1_HEX : "HEAD",
|
||||
NULL, 0))
|
||||
return error_dirty_index(opts);
|
||||
}
|
||||
discard_cache();
|
||||
@ -2283,7 +2284,7 @@ int sequencer_continue(struct replay_opts *opts)
|
||||
if (res)
|
||||
goto release_todo_list;
|
||||
}
|
||||
if (index_differs_from("HEAD", 0, 0)) {
|
||||
if (index_differs_from("HEAD", NULL, 0)) {
|
||||
res = error_dirty_index(opts);
|
||||
goto release_todo_list;
|
||||
}
|
||||
|
16
submodule.c
16
submodule.c
@ -183,7 +183,7 @@ void set_diffopt_flags_from_submodule_config(struct diff_options *diffopt,
|
||||
if (ignore)
|
||||
handle_ignore_submodules_arg(diffopt, ignore);
|
||||
else if (is_gitmodules_unmerged(&the_index))
|
||||
DIFF_OPT_SET(diffopt, IGNORE_SUBMODULES);
|
||||
diffopt->flags.ignore_submodules = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -402,16 +402,16 @@ const char *submodule_strategy_to_string(const struct submodule_update_strategy
|
||||
void handle_ignore_submodules_arg(struct diff_options *diffopt,
|
||||
const char *arg)
|
||||
{
|
||||
DIFF_OPT_CLR(diffopt, IGNORE_SUBMODULES);
|
||||
DIFF_OPT_CLR(diffopt, IGNORE_UNTRACKED_IN_SUBMODULES);
|
||||
DIFF_OPT_CLR(diffopt, IGNORE_DIRTY_SUBMODULES);
|
||||
diffopt->flags.ignore_submodules = 0;
|
||||
diffopt->flags.ignore_untracked_in_submodules = 0;
|
||||
diffopt->flags.ignore_dirty_submodules = 0;
|
||||
|
||||
if (!strcmp(arg, "all"))
|
||||
DIFF_OPT_SET(diffopt, IGNORE_SUBMODULES);
|
||||
diffopt->flags.ignore_submodules = 1;
|
||||
else if (!strcmp(arg, "untracked"))
|
||||
DIFF_OPT_SET(diffopt, IGNORE_UNTRACKED_IN_SUBMODULES);
|
||||
diffopt->flags.ignore_untracked_in_submodules = 1;
|
||||
else if (!strcmp(arg, "dirty"))
|
||||
DIFF_OPT_SET(diffopt, IGNORE_DIRTY_SUBMODULES);
|
||||
diffopt->flags.ignore_dirty_submodules = 1;
|
||||
else if (strcmp(arg, "none"))
|
||||
die("bad --ignore-submodules argument: %s", arg);
|
||||
}
|
||||
@ -616,7 +616,7 @@ void show_submodule_inline_diff(struct diff_options *o, const char *path,
|
||||
argv_array_pushf(&cp.args, "--color=%s", want_color(o->use_color) ?
|
||||
"always" : "never");
|
||||
|
||||
if (DIFF_OPT_TST(o, REVERSE_DIFF)) {
|
||||
if (o->flags.reverse_diff) {
|
||||
argv_array_pushf(&cp.args, "--src-prefix=%s%s/",
|
||||
o->b_prefix, path);
|
||||
argv_array_pushf(&cp.args, "--dst-prefix=%s%s/",
|
||||
|
16
tree-diff.c
16
tree-diff.c
@ -212,9 +212,9 @@ static struct combine_diff_path *emit_path(struct combine_diff_path *p,
|
||||
mode = 0;
|
||||
}
|
||||
|
||||
if (DIFF_OPT_TST(opt, RECURSIVE) && isdir) {
|
||||
if (opt->flags.recursive && isdir) {
|
||||
recurse = 1;
|
||||
emitthis = DIFF_OPT_TST(opt, TREE_IN_RECURSIVE);
|
||||
emitthis = opt->flags.tree_in_recursive;
|
||||
}
|
||||
|
||||
if (emitthis) {
|
||||
@ -425,7 +425,7 @@ static struct combine_diff_path *ll_diff_tree_paths(
|
||||
ttree = fill_tree_descriptor(&t, oid);
|
||||
|
||||
/* Enable recursion indefinitely */
|
||||
opt->pathspec.recursive = DIFF_OPT_TST(opt, RECURSIVE);
|
||||
opt->pathspec.recursive = opt->flags.recursive;
|
||||
|
||||
for (;;) {
|
||||
int imin, cmp;
|
||||
@ -484,7 +484,7 @@ static struct combine_diff_path *ll_diff_tree_paths(
|
||||
/* t = p[imin] */
|
||||
if (cmp == 0) {
|
||||
/* are either pi > p[imin] or diff(t,pi) != ø ? */
|
||||
if (!DIFF_OPT_TST(opt, FIND_COPIES_HARDER)) {
|
||||
if (!opt->flags.find_copies_harder) {
|
||||
for (i = 0; i < nparent; ++i) {
|
||||
/* p[i] > p[imin] */
|
||||
if (tp[i].entry.mode & S_IFXMIN_NEQ)
|
||||
@ -522,7 +522,7 @@ static struct combine_diff_path *ll_diff_tree_paths(
|
||||
/* t > p[imin] */
|
||||
else {
|
||||
/* ∀i pi=p[imin] -> D += "-p[imin]" */
|
||||
if (!DIFF_OPT_TST(opt, FIND_COPIES_HARDER)) {
|
||||
if (!opt->flags.find_copies_harder) {
|
||||
for (i = 0; i < nparent; ++i)
|
||||
if (tp[i].entry.mode & S_IFXMIN_NEQ)
|
||||
goto skip_emit_tp;
|
||||
@ -608,8 +608,8 @@ static void try_to_follow_renames(const struct object_id *old_oid,
|
||||
q->nr = 0;
|
||||
|
||||
diff_setup(&diff_opts);
|
||||
DIFF_OPT_SET(&diff_opts, RECURSIVE);
|
||||
DIFF_OPT_SET(&diff_opts, FIND_COPIES_HARDER);
|
||||
diff_opts.flags.recursive = 1;
|
||||
diff_opts.flags.find_copies_harder = 1;
|
||||
diff_opts.output_format = DIFF_FORMAT_NO_OUTPUT;
|
||||
diff_opts.single_follow = opt->pathspec.items[0].match;
|
||||
diff_opts.break_opt = opt->break_opt;
|
||||
@ -706,7 +706,7 @@ int diff_tree_oid(const struct object_id *old_oid,
|
||||
strbuf_addstr(&base, base_str);
|
||||
|
||||
retval = ll_diff_tree_oid(old_oid, new_oid, &base, opt);
|
||||
if (!*base_str && DIFF_OPT_TST(opt, FOLLOW_RENAMES) && diff_might_be_rename())
|
||||
if (!*base_str && opt->flags.follow_renames && diff_might_be_rename())
|
||||
try_to_follow_renames(old_oid, new_oid, &base, opt);
|
||||
|
||||
strbuf_release(&base);
|
||||
|
18
wt-status.c
18
wt-status.c
@ -559,12 +559,12 @@ static void wt_status_collect_changes_worktree(struct wt_status *s)
|
||||
init_revisions(&rev, NULL);
|
||||
setup_revisions(0, NULL, &rev, NULL);
|
||||
rev.diffopt.output_format |= DIFF_FORMAT_CALLBACK;
|
||||
DIFF_OPT_SET(&rev.diffopt, DIRTY_SUBMODULES);
|
||||
rev.diffopt.flags.dirty_submodules = 1;
|
||||
rev.diffopt.ita_invisible_in_index = 1;
|
||||
if (!s->show_untracked_files)
|
||||
DIFF_OPT_SET(&rev.diffopt, IGNORE_UNTRACKED_IN_SUBMODULES);
|
||||
rev.diffopt.flags.ignore_untracked_in_submodules = 1;
|
||||
if (s->ignore_submodule_arg) {
|
||||
DIFF_OPT_SET(&rev.diffopt, OVERRIDE_SUBMODULE_CONFIG);
|
||||
rev.diffopt.flags.override_submodule_config = 1;
|
||||
handle_ignore_submodules_arg(&rev.diffopt, s->ignore_submodule_arg);
|
||||
}
|
||||
rev.diffopt.format_callback = wt_status_collect_changed_cb;
|
||||
@ -583,7 +583,7 @@ static void wt_status_collect_changes_index(struct wt_status *s)
|
||||
opt.def = s->is_initial ? EMPTY_TREE_SHA1_HEX : s->reference;
|
||||
setup_revisions(0, NULL, &rev, &opt);
|
||||
|
||||
DIFF_OPT_SET(&rev.diffopt, OVERRIDE_SUBMODULE_CONFIG);
|
||||
rev.diffopt.flags.override_submodule_config = 1;
|
||||
rev.diffopt.ita_invisible_in_index = 1;
|
||||
if (s->ignore_submodule_arg) {
|
||||
handle_ignore_submodules_arg(&rev.diffopt, s->ignore_submodule_arg);
|
||||
@ -949,7 +949,7 @@ static void wt_longstatus_print_verbose(struct wt_status *s)
|
||||
const char *c = color(WT_STATUS_HEADER, s);
|
||||
|
||||
init_revisions(&rev, NULL);
|
||||
DIFF_OPT_SET(&rev.diffopt, ALLOW_TEXTCONV);
|
||||
rev.diffopt.flags.allow_textconv = 1;
|
||||
rev.diffopt.ita_invisible_in_index = 1;
|
||||
|
||||
memset(&opt, 0, sizeof(opt));
|
||||
@ -2263,8 +2263,8 @@ int has_unstaged_changes(int ignore_submodules)
|
||||
|
||||
init_revisions(&rev_info, NULL);
|
||||
if (ignore_submodules)
|
||||
DIFF_OPT_SET(&rev_info.diffopt, IGNORE_SUBMODULES);
|
||||
DIFF_OPT_SET(&rev_info.diffopt, QUICK);
|
||||
rev_info.diffopt.flags.ignore_submodules = 1;
|
||||
rev_info.diffopt.flags.quick = 1;
|
||||
diff_setup_done(&rev_info.diffopt);
|
||||
result = run_diff_files(&rev_info, 0);
|
||||
return diff_result_code(&rev_info.diffopt, result);
|
||||
@ -2283,8 +2283,8 @@ int has_uncommitted_changes(int ignore_submodules)
|
||||
|
||||
init_revisions(&rev_info, NULL);
|
||||
if (ignore_submodules)
|
||||
DIFF_OPT_SET(&rev_info.diffopt, IGNORE_SUBMODULES);
|
||||
DIFF_OPT_SET(&rev_info.diffopt, QUICK);
|
||||
rev_info.diffopt.flags.ignore_submodules = 1;
|
||||
rev_info.diffopt.flags.quick = 1;
|
||||
add_head_to_pending(&rev_info);
|
||||
diff_setup_done(&rev_info.diffopt);
|
||||
result = run_diff_index(&rev_info, 1);
|
||||
|
Loading…
Reference in New Issue
Block a user