Am 07.10.2012 17:22, schrieb Ramkumar Ramachandra: > Jens Lehmann wrote: >> Am 02.10.2012 18:51, schrieb Ramkumar Ramachandra: >>> Currently, the diff code does not differentiate between an explicit >>> '--submodule=short' being passed, and no submodule option being passed >>> on the command line. Making this differentiation will be important >>> when the command-line option can be used to override a >>> "diff.submoduleFormat" configuration variable introduced in the next >>> patch. >> >> Wouldn't it be sufficient here to simply reset the log flag by using >> "DIFF_OPT_CLR(options, SUBMODULE_LOG)"? This would avoid having to >> use the last bit of the diffopt flags. And if I read the code correctly, >> diff_opt_parse() is called by setup_revisions() which is called after >> git_config(), so that should be safe. (And "textconv" uses the same >> approach) > > How is it sufficient? In git_diff_ui_config(), I set > submodule_format_cfg, which has nothing to do with SUBMODULE_LOG. In > builtin_diff(), I'll have to check SUBMODULE_LOG and > submodule_format_cfg. The tricky bit is that I should check > submodule_format_cfg if and only if "--submodule=short" was NOT passed > on the command line- now, that's not the same thing is checking if > SUBMODULE_LOG is unset, because SUBMODULE_LOG is unset (or cleared) if > no argument was passed or if "--submodule=short" is passed. > Therefore, I need a SUBMODULE_SHORT to differentiate between the two > cases. > > What am I missing?
I forgot to mention that testing submodule_format_cfg would have to happen in cmd_diff() (between reading the config and parsing the command line options) instead of builtin_diff(). Something like this should do the trick (untested): diff --git a/builtin/diff.c b/builtin/diff.c index 9650be2..180bf44 100644 --- a/builtin/diff.c +++ b/builtin/diff.c @@ -297,6 +297,9 @@ int cmd_diff(int argc, const char **argv, const char *prefix DIFF_OPT_SET(&rev.diffopt, ALLOW_EXTERNAL); DIFF_OPT_SET(&rev.diffopt, ALLOW_TEXTCONV); + if (submodule_format_cfg && !strcmp(submodule_format_cfg, "log")) + DIFF_OPT_SET(options, SUBMODULE_LOG); + if (nongit) die(_("Not a git repository")); argc = setup_revisions(argc, argv, &rev, NULL); -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html