Skip to content

Commit

Permalink
git-format-patch: add --output-directory long option again
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Junio C Hamano committed Jun 6, 2006
1 parent 16cee38 commit efd0201
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 12 deletions.
3 changes: 1 addition & 2 deletions Documentation/git-format-patch.txt
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,7 @@ OPTIONS
-------
-o|--output-directory <dir>::
Use <dir> to store the resulting files, instead of the
current working directory. This option is ignored if
--stdout is specified.
current working directory.

-n|--numbered::
Name output in '[PATCH n/m]' format.
Expand Down
26 changes: 16 additions & 10 deletions builtin-log.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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")) {
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit efd0201

Please sign in to comment.