diff options
author | Junio C Hamano <junkio@cox.net> | 2006-06-06 08:46:23 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-06-06 14:16:43 -0700 |
commit | efd0201684c6e9bf663811dc849590b8fe27b8b2 (patch) | |
tree | 300df6e8c90bca1c609dbbdf108f75ff2c108b4e /builtin-log.c | |
parent | 16cee38ae2bff93a4e4c512550fb4ccac035a3a1 (diff) | |
download | git-efd0201684c6e9bf663811dc849590b8fe27b8b2.tar.gz |
git-format-patch: add --output-directory long option again
Additionally notices and complains to an -o option without
directory or a duplicated -o option, -o and --stdout given
together. Also delays the creation of directory until all
arguments are parsed, so that the command does not leave an
empty directory behind when it exits after seeing an unrelated
invalid option.
[jc: originally from Dennis Stosberg but with minor fixes, and
documentation updates from Dennis.]
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'builtin-log.c')
-rw-r--r-- | builtin-log.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/builtin-log.c b/builtin-log.c index 6612f4c2a8..29a885121d 100644 --- a/builtin-log.c +++ b/builtin-log.c @@ -103,7 +103,7 @@ static int git_format_config(const char *var, const char *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) { @@ -206,14 +206,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")) { @@ -243,6 +243,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); @@ -293,8 +301,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; } |