X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=builtin-log.c;h=f4d974a7b8bfa0472a110273edf62b34b90902fe;hb=e968751573a4ded76201a0e4414ec36649a92dda;hp=ac4822deaf2549a0a972557c8e35ea5513a901d7;hpb=cf2251b60460e651a5e00afe9ef7c427ad296711;p=git.git diff --git a/builtin-log.c b/builtin-log.c index ac4822de..f4d974a7 100644 --- a/builtin-log.c +++ b/builtin-log.c @@ -51,6 +51,7 @@ int cmd_whatchanged(int argc, const char **argv, char **envp) init_revisions(&rev); rev.diff = 1; rev.diffopt.recursive = 1; + rev.simplify_history = 0; return cmd_log_wc(argc, argv, envp, &rev); } @@ -85,8 +86,25 @@ static int istitlechar(char c) (c >= '0' && c <= '9') || c == '.' || c == '_'; } +static char *extra_headers = NULL; +static int extra_headers_size = 0; + +static int git_format_config(const char *var, const char *value) +{ + if (!strcmp(var, "format.headers")) { + int len = strlen(value); + extra_headers_size += len + 1; + extra_headers = realloc(extra_headers, extra_headers_size); + extra_headers[extra_headers_size - len - 1] = 0; + strcat(extra_headers, value); + return 0; + } + return git_default_config(var, value); +} + + static FILE *realstdout = NULL; -static char *output_directory = NULL; +static const char *output_directory = NULL; static void reopen_stdout(struct commit *commit, int nr, int keep_subject) { @@ -95,7 +113,7 @@ static void reopen_stdout(struct commit *commit, int nr, int keep_subject) int len = 0; if (output_directory) { - strncpy(filename, output_directory, 1010); + safe_strncpy(filename, output_directory, 1010); len = strlen(filename); if (filename[len - 1] != '/') filename[len++] = '/'; @@ -162,6 +180,9 @@ int cmd_format_patch(int argc, const char **argv, char **envp) rev.ignore_merges = 1; rev.diffopt.output_format = DIFF_FORMAT_PATCH; + git_config(git_format_config); + rev.extra_headers = extra_headers; + /* * Parse the arguments before setup_revisions(), or something * like "git fmt-patch -o a123 HEAD^.." may fail; a123 is @@ -186,14 +207,14 @@ int cmd_format_patch(int argc, const char **argv, char **envp) keep_subject = 1; rev.total = -1; } - else if (!strcmp(argv[i], "-o")) { - if (argc < 3) - die ("Which directory?"); - if (mkdir(argv[i + 1], 0777) < 0 && errno != EEXIST) - die("Could not create directory %s", - argv[i + 1]); - output_directory = strdup(argv[i + 1]); + else if (!strcmp(argv[i], "--output-directory") || + !strcmp(argv[i], "-o")) { i++; + if (argc <= i) + die("Which directory?"); + if (output_directory) + die("Two output directories?"); + output_directory = argv[i]; } else if (!strcmp(argv[i], "--signoff") || !strcmp(argv[i], "-s")) { @@ -223,6 +244,14 @@ int cmd_format_patch(int argc, const char **argv, char **envp) if (argc > 1) die ("unrecognized argument: %s", argv[1]); + if (output_directory) { + if (use_stdout) + die("standard output, or directory, which one?"); + if (mkdir(output_directory, 0777) < 0 && errno != EEXIST) + die("Could not create directory %s", + output_directory); + } + if (rev.pending_objects && rev.pending_objects->next == NULL) { rev.pending_objects->item->flags |= UNINTERESTING; add_head(&rev); @@ -273,8 +302,6 @@ int cmd_format_patch(int argc, const char **argv, char **envp) if (!use_stdout) fclose(stdout); } - if (output_directory) - free(output_directory); free(list); return 0; }