From 6c374008b1a4e3b66469168aace47003e9771e2d Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Fri, 10 May 2013 17:10:11 +0200 Subject: diff_opt: track whether flags have been set explicitly The diff_opt infrastructure sets flags based on defaults and command line options. It is impossible to tell whether a flag has been set as a default or on explicit request. Update the structure so that this detection is possible: * Add an extra "opt->touched_flags" that keeps track of all the fields that have been touched by DIFF_OPT_SET and DIFF_OPT_CLR. * You may continue setting the default values to the flags, like commands in the "log" family do in cmd_log_init_defaults(), but after you finished setting the defaults, you clear the touched_flags field; * And then you let the usual callchain call diff_opt_parse(), allowing the opt->flags be set or unset, while keeping track of which bits the user touched; * There is an optional callback "opt->set_default" that is called at the very beginning to let you inspect touched_flags and update opt->flags appropriately, before the remainder of the diffcore machinery is set up, taking the opt->flags value into account. Signed-off-by: Michael J Gruber Signed-off-by: Junio C Hamano --- diff.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'diff.c') diff --git a/diff.c b/diff.c index f0b3e7cfe3..7c248726ad 100644 --- a/diff.c +++ b/diff.c @@ -3213,6 +3213,9 @@ void diff_setup_done(struct diff_options *options) { int count = 0; + if (options->set_default) + options->set_default(options); + if (options->output_format & DIFF_FORMAT_NAME) count++; if (options->output_format & DIFF_FORMAT_NAME_STATUS) -- cgit v1.3