On Wed, Jan 13, 2016 at 8:20 AM, Stephen P. Smith <ischis2@cox.net> wrote:
Thanks. This version is also:
Reviewed-by: Eric Sunshine <sunshine@sunshineco.com>
(A note for future submissions of other patches: Once a person has
given a Reviewed-by:, you're welcome to include the Reviewed-by: in a
re-roll provided that the re-roll doesn't change anything which would
obviously invalidate the Reviewed-by:. In this particular case, for
instance, v6 merely fixed a couple very minor nits mentioned in my v5
review, so it would have been perfectly acceptable to include my
Reviewed-by: in v6.)
Show 95 quoted lines
> Documentation/config.txt | 4 ++++
> Documentation/git-format-patch.txt | 6 +++++-
> builtin/log.c | 6 ++++++
> t/t4014-format-patch.sh | 15 +++++++++++++++
> 4 files changed, 30 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/config.txt b/Documentation/config.txt
> index f617886..e92a0ee 100644
> --- a/Documentation/config.txt
> +++ b/Documentation/config.txt
> @@ -1243,6 +1243,10 @@ format.coverLetter::
> format-patch is invoked, but in addition can be set to "auto", to
> generate a cover-letter only when there's more than one patch.
>
> +format.outputDirectory::
> + Set a custom directory to store the resulting files instead of the
> + current working directory.
> +
> filter.<driver>.clean::
> The command which is used to convert the content of a worktree
> file to a blob upon checkin. See linkgit:gitattributes[5] for
> diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt
> index e3cdaeb..64c2803 100644
> --- a/Documentation/git-format-patch.txt
> +++ b/Documentation/git-format-patch.txt
> @@ -57,7 +57,11 @@ The names of the output files are printed to standard
> output, unless the `--stdout` option is specified.
>
> If `-o` is specified, output files are created in <dir>. Otherwise
> -they are created in the current working directory.
> +they are created in the current working directory. The default path
> +can be set with the 'format.outputDirectory' configuration option.
> +The `-o` option takes precedence over `format.outputDirectory`.
> +To store patches in the current working directory even when
> +`format.outputDirectory` points elsewhere, use `-o .`.
>
> By default, the subject of a single patch is "[PATCH] " followed by
> the concatenation of lines from the commit message up to the first blank
> diff --git a/builtin/log.c b/builtin/log.c
> index e00cea7..0d738d6 100644
> --- a/builtin/log.c
> +++ b/builtin/log.c
> @@ -699,6 +699,7 @@ static int do_signoff;
> static const char *signature = git_version_string;
> static const char *signature_file;
> static int config_cover_letter;
> +static const char *config_output_directory;
>
> enum {
> COVER_UNSET,
> @@ -777,6 +778,8 @@ static int git_format_config(const char *var, const char *value, void *cb)
> config_cover_letter = git_config_bool(var, value) ? COVER_ON : COVER_OFF;
> return 0;
> }
> + if (!strcmp(var, "format.outputdirectory"))
> + return git_config_string(&config_output_directory, var, value);
>
> return git_log_config(var, value, cb);
> }
> @@ -1391,6 +1394,9 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
> if (rev.show_notes)
> init_display_notes(&rev.notes_opt);
>
> + if (!output_directory && !use_stdout)
> + output_directory = config_output_directory;
> +
> if (!use_stdout)
> output_directory = set_outdir(prefix, output_directory);
> else
> diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
> index 646c475..3b99434 100755
> --- a/t/t4014-format-patch.sh
> +++ b/t/t4014-format-patch.sh
> @@ -1445,4 +1445,19 @@ test_expect_success 'From line has expected format' '
> test_cmp from filtered
> '
>
> +test_expect_success 'format-patch format.outputDirectory option' '
> + test_config format.outputDirectory patches &&
> + rm -fr patches &&
> + git format-patch master..side &&
> + test $(git rev-list master..side | wc -l) -eq $(ls patches | wc -l)
> +'
> +
> +test_expect_success 'format-patch -o overrides format.outputDirectory' '
> + test_config format.outputDirectory patches &&
> + rm -fr patches patchset &&
> + git format-patch master..side -o patchset &&
> + test_path_is_missing patches &&
> + test_path_is_dir patchset
> +'
> +
> test_done
> --
> 2.7.0-rc2