Merge branch 'jc/1.7.0-diff-whitespace-only-status'
* jc/1.7.0-diff-whitespace-only-status: diff.c: fix typoes in comments Make test case number unique diff: Rename QUIET internal option to QUICK diff: change semantics of "ignore whitespace" options Conflicts: diff.h
This commit is contained in:
38
diff.c
38
diff.c
@ -2551,6 +2551,20 @@ int diff_setup_done(struct diff_options *options)
|
||||
if (count > 1)
|
||||
die("--name-only, --name-status, --check and -s are mutually exclusive");
|
||||
|
||||
/*
|
||||
* Most of the time we can say "there are changes"
|
||||
* only by checking if there are changed paths, but
|
||||
* --ignore-whitespace* options force us to look
|
||||
* inside contents.
|
||||
*/
|
||||
|
||||
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);
|
||||
else
|
||||
DIFF_OPT_CLR(options, DIFF_FROM_CONTENTS);
|
||||
|
||||
if (DIFF_OPT_TST(options, FIND_COPIES_HARDER))
|
||||
options->detect_rename = DIFF_DETECT_COPY;
|
||||
|
||||
@ -2611,7 +2625,7 @@ int 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, QUIET)) {
|
||||
if (DIFF_OPT_TST(options, QUICK)) {
|
||||
options->output_format = DIFF_FORMAT_NO_OUTPUT;
|
||||
DIFF_OPT_SET(options, EXIT_WITH_STATUS);
|
||||
}
|
||||
@ -2802,7 +2816,7 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
|
||||
else if (!strcmp(arg, "--exit-code"))
|
||||
DIFF_OPT_SET(options, EXIT_WITH_STATUS);
|
||||
else if (!strcmp(arg, "--quiet"))
|
||||
DIFF_OPT_SET(options, QUIET);
|
||||
DIFF_OPT_SET(options, QUICK);
|
||||
else if (!strcmp(arg, "--ext-diff"))
|
||||
DIFF_OPT_SET(options, ALLOW_EXTERNAL);
|
||||
else if (!strcmp(arg, "--no-ext-diff"))
|
||||
@ -3509,6 +3523,18 @@ free_queue:
|
||||
q->nr = q->alloc = 0;
|
||||
if (options->close_file)
|
||||
fclose(options->file);
|
||||
|
||||
/*
|
||||
* Report the content-level differences with HAS_CHANGES;
|
||||
* 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->found_changes)
|
||||
DIFF_OPT_SET(options, HAS_CHANGES);
|
||||
else
|
||||
DIFF_OPT_CLR(options, HAS_CHANGES);
|
||||
}
|
||||
}
|
||||
|
||||
static void diffcore_apply_filter(const char *filter)
|
||||
@ -3645,7 +3671,7 @@ void diffcore_std(struct diff_options *options)
|
||||
diff_resolve_rename_copy();
|
||||
diffcore_apply_filter(options->filter);
|
||||
|
||||
if (diff_queued_diff.nr)
|
||||
if (diff_queued_diff.nr && !DIFF_OPT_TST(options, DIFF_FROM_CONTENTS))
|
||||
DIFF_OPT_SET(options, HAS_CHANGES);
|
||||
else
|
||||
DIFF_OPT_CLR(options, HAS_CHANGES);
|
||||
@ -3705,7 +3731,8 @@ void diff_addremove(struct diff_options *options,
|
||||
fill_filespec(two, sha1, mode);
|
||||
|
||||
diff_queue(&diff_queued_diff, one, two);
|
||||
DIFF_OPT_SET(options, HAS_CHANGES);
|
||||
if (!DIFF_OPT_TST(options, DIFF_FROM_CONTENTS))
|
||||
DIFF_OPT_SET(options, HAS_CHANGES);
|
||||
}
|
||||
|
||||
void diff_change(struct diff_options *options,
|
||||
@ -3737,7 +3764,8 @@ void diff_change(struct diff_options *options,
|
||||
fill_filespec(two, new_sha1, new_mode);
|
||||
|
||||
diff_queue(&diff_queued_diff, one, two);
|
||||
DIFF_OPT_SET(options, HAS_CHANGES);
|
||||
if (!DIFF_OPT_TST(options, DIFF_FROM_CONTENTS))
|
||||
DIFF_OPT_SET(options, HAS_CHANGES);
|
||||
}
|
||||
|
||||
void diff_unmerge(struct diff_options *options,
|
||||
|
||||
Reference in New Issue
Block a user