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:
parent
dee4e384f3
commit
ef1d9c5aa4
@ -18,8 +18,8 @@ int cmd_diff_files(int argc, const char **argv, char **envp)
|
|||||||
struct rev_info rev;
|
struct rev_info rev;
|
||||||
int silent = 0;
|
int silent = 0;
|
||||||
|
|
||||||
git_config(git_default_config); /* no "diff" UI options */
|
|
||||||
init_revisions(&rev);
|
init_revisions(&rev);
|
||||||
|
git_config(git_default_config); /* no "diff" UI options */
|
||||||
rev.abbrev = 0;
|
rev.abbrev = 0;
|
||||||
|
|
||||||
argc = setup_revisions(argc, argv, &rev, NULL);
|
argc = setup_revisions(argc, argv, &rev, NULL);
|
||||||
|
@ -15,8 +15,8 @@ int cmd_diff_index(int argc, const char **argv, char **envp)
|
|||||||
int cached = 0;
|
int cached = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
git_config(git_default_config); /* no "diff" UI options */
|
|
||||||
init_revisions(&rev);
|
init_revisions(&rev);
|
||||||
|
git_config(git_default_config); /* no "diff" UI options */
|
||||||
rev.abbrev = 0;
|
rev.abbrev = 0;
|
||||||
|
|
||||||
argc = setup_revisions(argc, argv, &rev, NULL);
|
argc = setup_revisions(argc, argv, &rev, NULL);
|
||||||
|
@ -67,9 +67,9 @@ int cmd_diff_tree(int argc, const char **argv, char **envp)
|
|||||||
static struct rev_info *opt = &log_tree_opt;
|
static struct rev_info *opt = &log_tree_opt;
|
||||||
int read_stdin = 0;
|
int read_stdin = 0;
|
||||||
|
|
||||||
|
init_revisions(opt);
|
||||||
git_config(git_default_config); /* no "diff" UI options */
|
git_config(git_default_config); /* no "diff" UI options */
|
||||||
nr_sha1 = 0;
|
nr_sha1 = 0;
|
||||||
init_revisions(opt);
|
|
||||||
opt->abbrev = 0;
|
opt->abbrev = 0;
|
||||||
opt->diff = 1;
|
opt->diff = 1;
|
||||||
argc = setup_revisions(argc, argv, opt, NULL);
|
argc = setup_revisions(argc, argv, opt, NULL);
|
||||||
|
@ -250,8 +250,9 @@ int cmd_diff(int argc, const char **argv, char **envp)
|
|||||||
* Other cases are errors.
|
* Other cases are errors.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
git_config(git_diff_ui_config);
|
|
||||||
init_revisions(&rev);
|
init_revisions(&rev);
|
||||||
|
git_config(git_diff_ui_config);
|
||||||
|
diff_setup(&rev.diffopt);
|
||||||
|
|
||||||
argc = setup_revisions(argc, argv, &rev, NULL);
|
argc = setup_revisions(argc, argv, &rev, NULL);
|
||||||
if (!rev.diffopt.output_format) {
|
if (!rev.diffopt.output_format) {
|
||||||
|
@ -49,8 +49,9 @@ int cmd_whatchanged(int argc, const char **argv, char **envp)
|
|||||||
{
|
{
|
||||||
struct rev_info rev;
|
struct rev_info rev;
|
||||||
|
|
||||||
git_config(git_diff_ui_config);
|
|
||||||
init_revisions(&rev);
|
init_revisions(&rev);
|
||||||
|
git_config(git_diff_ui_config);
|
||||||
|
diff_setup(&rev.diffopt);
|
||||||
rev.diff = 1;
|
rev.diff = 1;
|
||||||
rev.diffopt.recursive = 1;
|
rev.diffopt.recursive = 1;
|
||||||
rev.simplify_history = 0;
|
rev.simplify_history = 0;
|
||||||
@ -64,8 +65,9 @@ int cmd_show(int argc, const char **argv, char **envp)
|
|||||||
{
|
{
|
||||||
struct rev_info rev;
|
struct rev_info rev;
|
||||||
|
|
||||||
git_config(git_diff_ui_config);
|
|
||||||
init_revisions(&rev);
|
init_revisions(&rev);
|
||||||
|
git_config(git_diff_ui_config);
|
||||||
|
diff_setup(&rev.diffopt);
|
||||||
rev.diff = 1;
|
rev.diff = 1;
|
||||||
rev.diffopt.recursive = 1;
|
rev.diffopt.recursive = 1;
|
||||||
rev.combine_merges = 1;
|
rev.combine_merges = 1;
|
||||||
@ -81,8 +83,9 @@ int cmd_log(int argc, const char **argv, char **envp)
|
|||||||
{
|
{
|
||||||
struct rev_info rev;
|
struct rev_info rev;
|
||||||
|
|
||||||
git_config(git_diff_ui_config);
|
|
||||||
init_revisions(&rev);
|
init_revisions(&rev);
|
||||||
|
git_config(git_diff_ui_config);
|
||||||
|
diff_setup(&rev.diffopt);
|
||||||
rev.always_show_header = 1;
|
rev.always_show_header = 1;
|
||||||
cmd_log_init(argc, argv, envp, &rev);
|
cmd_log_init(argc, argv, envp, &rev);
|
||||||
return cmd_log_walk(&rev);
|
return cmd_log_walk(&rev);
|
||||||
|
Loading…
Reference in New Issue
Block a user