X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git.c;h=5209b04de50b23c2410573dae285e156ed25f833;hb=1b9bc5a7b7434d771726011613a00cb202bd9f44;hp=8776088af349b70784a78d30cec4f2445f8594eb;hpb=55275b3812af3fe84516f176e589100232aef4f5;p=git.git diff --git a/git.c b/git.c index 8776088a..5209b04d 100644 --- a/git.c +++ b/git.c @@ -15,8 +15,8 @@ #include "cache.h" #include "commit.h" -#include "revision.h" #include "diff.h" +#include "revision.h" #include "log-tree.h" #ifndef PATH_MAX @@ -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; @@ -337,14 +344,16 @@ static int cmd_log(int argc, const char **argv, char **envp) opt.ignore_merges = 0; if (opt.dense_combined_merges) 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 (shown && do_diff && commit_format != CMIT_FMT_ONELINE) + putchar('\n'); fputs(commit_prefix, stdout); if (abbrev_commit && abbrev) fputs(find_unique_abbrev(commit->object.sha1, abbrev), @@ -377,9 +386,13 @@ 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) + if (do_diff) { + printf("---\n"); log_tree_commit(&opt, commit); + } + shown = 1; + free(commit->buffer); + commit->buffer = NULL; } free(buf); return 0; @@ -398,6 +411,12 @@ static void handle_internal_command(int argc, const char **argv, char **envp) }; int i; + /* Turn "git cmd --help" into "git help cmd" */ + if (argc > 1 && !strcmp(argv[1], "--help")) { + argv[1] = argv[0]; + argv[0] = cmd = "help"; + } + for (i = 0; i < ARRAY_SIZE(commands); i++) { struct cmd_struct *p = commands+i; if (strcmp(p->cmd, cmd))