diff options
author | Junio C Hamano <gitster@pobox.com> | 2012-07-11 12:46:21 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-07-11 12:46:21 -0700 |
commit | 95c9eb8fcd4c9a72954c9d16b0d4c653a1f02085 (patch) | |
tree | 312bc55583092c4db0ce3e2634b58b1029a36f35 | |
parent | 9ca724933a8d50633699acf3e5731fa392e2ff36 (diff) | |
parent | af63b543ed9f7d606cdd2c7a3bcded4e2dc8dad4 (diff) | |
download | git-95c9eb8fcd4c9a72954c9d16b0d4c653a1f02085.tar.gz git-95c9eb8fcd4c9a72954c9d16b0d4c653a1f02085.tar.xz |
Merge branch 'jk/diff-no-index-pager' into maint
"git diff --no-index" did not work with pagers correctly.
* jk/diff-no-index-pager:
do not run pager with diff --no-index --quiet
fix pager.diff with diff --no-index
-rw-r--r-- | builtin.h | 2 | ||||
-rw-r--r-- | builtin/diff.c | 24 | ||||
-rw-r--r-- | diff-no-index.c | 11 |
3 files changed, 22 insertions, 15 deletions
@@ -41,6 +41,8 @@ int copy_note_for_rewrite(struct notes_rewrite_cfg *c, void finish_copy_notes_for_rewrite(struct notes_rewrite_cfg *c); extern int check_pager_config(const char *cmd); +struct diff_options; +extern void setup_diff_pager(struct diff_options *); extern int textconv_object(const char *path, unsigned mode, const unsigned char *sha1, char **buf, unsigned long *buf_size); diff --git a/builtin/diff.c b/builtin/diff.c index 9069dc41b..da8f6aac2 100644 --- a/builtin/diff.c +++ b/builtin/diff.c @@ -304,13 +304,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix) DIFF_OPT_SET(&rev.diffopt, RECURSIVE); - /* - * If the user asked for our exit code then don't start a - * pager or we would end up reporting its exit code instead. - */ - if (!DIFF_OPT_TST(&rev.diffopt, EXIT_WITH_STATUS) && - check_pager_config("diff") != 0) - setup_pager(); + setup_diff_pager(&rev.diffopt); /* * Do we have --cached and not have a pending object, then @@ -421,3 +415,19 @@ int cmd_diff(int argc, const char **argv, const char *prefix) refresh_index_quietly(); return result; } + +void setup_diff_pager(struct diff_options *opt) +{ + /* + * If the user asked for our exit code, then either they want --quiet + * or --exit-code. We should definitely not bother with a pager in the + * former case, as we will generate no output. Since we still properly + * report our exit code even when a pager is run, we _could_ run a + * pager with --exit-code. But since we have not done so historically, + * and because it is easy to find people oneline advising "git diff + * --exit-code" in hooks and other scripts, we do not do so. + */ + if (!DIFF_OPT_TST(opt, EXIT_WITH_STATUS) && + check_pager_config("diff") != 0) + setup_pager(); +} diff --git a/diff-no-index.c b/diff-no-index.c index f0b0010ae..77667b810 100644 --- a/diff-no-index.c +++ b/diff-no-index.c @@ -224,13 +224,6 @@ void diff_no_index(struct rev_info *revs, } } - /* - * If the user asked for our exit code then don't start a - * pager or we would end up reporting its exit code instead. - */ - if (!DIFF_OPT_TST(&revs->diffopt, EXIT_WITH_STATUS)) - setup_pager(); - if (prefix) { int len = strlen(prefix); const char *paths[3]; @@ -255,13 +248,15 @@ void diff_no_index(struct rev_info *revs, if (!revs->diffopt.output_format) revs->diffopt.output_format = DIFF_FORMAT_PATCH; - DIFF_OPT_SET(&revs->diffopt, EXIT_WITH_STATUS); DIFF_OPT_SET(&revs->diffopt, NO_INDEX); revs->max_count = -2; if (diff_setup_done(&revs->diffopt) < 0) die("diff_setup_done failed"); + setup_diff_pager(&revs->diffopt); + DIFF_OPT_SET(&revs->diffopt, EXIT_WITH_STATUS); + if (queue_diff(&revs->diffopt, revs->diffopt.pathspec.raw[0], revs->diffopt.pathspec.raw[1])) exit(1); |