diff options
author | Junio C Hamano <junkio@cox.net> | 2006-04-10 16:40:40 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-04-10 16:45:19 -0700 |
commit | 477f2b41310c4b1040a9e7f72720b9c39d82caf9 (patch) | |
tree | 2fa670faf473003114ea30ff7a3c2592354c72d2 | |
parent | a8baa7b9f5c8e338c09d63097f14372aca68e13f (diff) | |
download | git-477f2b41310c4b1040a9e7f72720b9c39d82caf9.tar.gz git-477f2b41310c4b1040a9e7f72720b9c39d82caf9.tar.xz |
git log --full-diff
Without this flag, "git log -p paths..." shows commits that
touch the specified paths, and diffs about the same specified
paths. With this, the full diff is shown for commits that touch
the specified paths.
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | git.c | 13 |
1 files changed, 12 insertions, 1 deletions
@@ -288,7 +288,9 @@ static int cmd_log(int argc, const char **argv, char **envp) int abbrev_commit = 0; const char *commit_prefix = "commit "; struct log_tree_opt opt; + int shown = 0; int do_diff = 0; + int full_diff = 0; init_log_tree_opt(&opt); argc = setup_revisions(argc, argv, &rev, "HEAD"); @@ -315,6 +317,10 @@ static int cmd_log(int argc, const char **argv, char **envp) else if (40 < abbrev) abbrev = 40; } + else if (!strcmp(arg, "--full-diff")) { + do_diff = 1; + full_diff = 1; + } else { int cnt = log_tree_opt_parse(&opt, argv+1, argc-1); if (0 < cnt) { @@ -328,6 +334,7 @@ static int cmd_log(int argc, const char **argv, char **envp) argc--; argv++; } + if (do_diff) { opt.diffopt.abbrev = abbrev; opt.verbose_header = 0; @@ -339,12 +346,16 @@ static int cmd_log(int argc, const char **argv, char **envp) opt.diffopt.output_format = DIFF_FORMAT_PATCH; if (opt.diffopt.output_format == DIFF_FORMAT_PATCH) opt.diffopt.recursive = 1; + if (!full_diff && rev.prune_data) + diff_tree_setup_paths(rev.prune_data, &opt.diffopt); diff_setup_done(&opt.diffopt); } prepare_revision_walk(&rev); setup_pager(); while ((commit = get_revision(&rev)) != NULL) { + if (commit_format != CMIT_FMT_ONELINE && shown) + putchar('\n'); fputs(commit_prefix, stdout); if (abbrev_commit && abbrev) fputs(find_unique_abbrev(commit->object.sha1, abbrev), @@ -377,9 +388,9 @@ static int cmd_log(int argc, const char **argv, char **envp) pretty_print_commit(commit_format, commit, ~0, buf, LOGSIZE, abbrev); printf("%s\n", buf); - if (do_diff) log_tree_commit(&opt, commit); + shown = 1; } free(buf); return 0; |