X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=builtin-log.c;h=db1912a05be425d1f4430aafee5f2bca844dd104;hb=2186d566a6c2dfb2f168ae608bbb2e0e77122d7e;hp=0027998f1014b0e25f130fcdb53dc47fdc617c1e;hpb=8ac80a5701780547404523a84f4b1ae67bfa6823;p=git.git diff --git a/builtin-log.c b/builtin-log.c index 0027998f..db1912a0 100644 --- a/builtin-log.c +++ b/builtin-log.c @@ -11,6 +11,9 @@ #include "log-tree.h" #include "builtin.h" +/* this is in builtin-diff.c */ +void add_head(struct rev_info *revs); + static int cmd_log_wc(int argc, const char **argv, char **envp, struct rev_info *rev) { @@ -20,6 +23,13 @@ static int cmd_log_wc(int argc, const char **argv, char **envp, rev->commit_format = CMIT_FMT_DEFAULT; rev->verbose_header = 1; argc = setup_revisions(argc, argv, rev, "HEAD"); + if (rev->always_show_header) { + if (rev->diffopt.pickaxe || rev->diffopt.filter) { + rev->always_show_header = 0; + if (rev->diffopt.output_format == DIFF_FORMAT_RAW) + rev->diffopt.output_format = DIFF_FORMAT_NO_OUTPUT; + } + } if (argc > 1) die("unrecognized argument: %s", argv[1]); @@ -138,6 +148,7 @@ int cmd_format_patch(int argc, const char **argv, char **envp) int nr = 0, total, i, j; int use_stdout = 0; int numbered = 0; + int start_number = -1; int keep_subject = 0; init_revisions(&rev); @@ -161,7 +172,14 @@ int cmd_format_patch(int argc, const char **argv, char **envp) else if (!strcmp(argv[i], "-n") || !strcmp(argv[i], "--numbered")) numbered = 1; - else if (!strcmp(argv[i], "-k") || + else if (!strncmp(argv[i], "--start-number=", 15)) + start_number = strtol(argv[i] + 15, NULL, 10); + else if (!strcmp(argv[i], "--start-number")) { + i++; + if (i == argc) + die("Need a number for --start-number"); + start_number = strtol(argv[i], NULL, 10); + } else if (!strcmp(argv[i], "-k") || !strcmp(argv[i], "--keep-subject")) { keep_subject = 1; rev.total = -1; @@ -173,18 +191,30 @@ int cmd_format_patch(int argc, const char **argv, char **envp) argv[i + 1]); output_directory = strdup(argv[i + 1]); i++; - } else + } + else if (!strcmp(argv[i], "--attach")) + rev.mime_boundary = git_version_string; + else if (!strncmp(argv[i], "--attach=", 9)) + rev.mime_boundary = argv[i] + 9; + else argv[j++] = argv[i]; } argc = j; - if (numbered && keep_subject < 0) + if (start_number < 0) + start_number = 1; + if (numbered && keep_subject) die ("-n and -k are mutually exclusive."); argc = setup_revisions(argc, argv, &rev, "HEAD"); if (argc > 1) die ("unrecognized argument: %s", argv[1]); + if (rev.pending_objects && rev.pending_objects->next == NULL) { + rev.pending_objects->item->flags |= UNINTERESTING; + add_head(&rev); + } + if (!use_stdout) realstdout = fdopen(dup(1), "w"); @@ -199,18 +229,33 @@ int cmd_format_patch(int argc, const char **argv, char **envp) } total = nr; if (numbered) - rev.total = total; + rev.total = total + start_number - 1; while (0 <= --nr) { int shown; commit = list[nr]; - rev.nr = total - nr; + rev.nr = total - nr + (start_number - 1); if (!use_stdout) reopen_stdout(commit, rev.nr, keep_subject); shown = log_tree_commit(&rev, commit); free(commit->buffer); commit->buffer = NULL; - if (shown) - printf("-- \n%s\n\n", git_version_string); + + /* We put one extra blank line between formatted + * patches and this flag is used by log-tree code + * to see if it needs to emit a LF before showing + * the log; when using one file per patch, we do + * not want the extra blank line. + */ + if (!use_stdout) + rev.shown_one = 0; + if (shown) { + if (rev.mime_boundary) + printf("\n--%s%s--\n\n\n", + mime_boundary_leader, + rev.mime_boundary); + else + printf("-- \n%s\n\n", git_version_string); + } if (!use_stdout) fclose(stdout); }