log and diff family: honor config even from subdirectories

There currently is an unfortunate circular dependency between
what init_revisions (the command line revision specification
parser) does and setting up the log and diff options.  The
function uses setup_git_directory() to find the root of the
project relative to the current directory and calls diff_setup()
to prepare diff generation.  However, some of the things that
diff_setup() does needs to depend on the configuration variable,
which needs to be read after setup_git_directory() is called.

This patch is a low impact workaround.  It first lets
init_revisions() to run and do its thing, then uses git_config()
and diff_setup() after it returns, so that configuration
variables that affects the diff operation can be used from
subdirectories.

Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Junio C Hamano
2006-07-27 22:55:44 -07:00
parent dee4e384f3
commit ef1d9c5aa4
5 changed files with 11 additions and 7 deletions

View File

@ -49,8 +49,9 @@ int cmd_whatchanged(int argc, const char **argv, char **envp)
{
struct rev_info rev;
git_config(git_diff_ui_config);
init_revisions(&rev);
git_config(git_diff_ui_config);
diff_setup(&rev.diffopt);
rev.diff = 1;
rev.diffopt.recursive = 1;
rev.simplify_history = 0;
@ -64,8 +65,9 @@ int cmd_show(int argc, const char **argv, char **envp)
{
struct rev_info rev;
git_config(git_diff_ui_config);
init_revisions(&rev);
git_config(git_diff_ui_config);
diff_setup(&rev.diffopt);
rev.diff = 1;
rev.diffopt.recursive = 1;
rev.combine_merges = 1;
@ -81,8 +83,9 @@ int cmd_log(int argc, const char **argv, char **envp)
{
struct rev_info rev;
git_config(git_diff_ui_config);
init_revisions(&rev);
git_config(git_diff_ui_config);
diff_setup(&rev.diffopt);
rev.always_show_header = 1;
cmd_log_init(argc, argv, envp, &rev);
return cmd_log_walk(&rev);