@@ -87,8 +87,11 @@ format.coverLetter::
generate a cover-letter only when there's more than one patch.
format.outputDirectory::
+format.<branch-name>.outputDirectory::
Set a custom directory to store the resulting files instead of the
- current working directory.
+ current working directory. If patches are being generated for
+ <branch-name>, the latter option takes priority if it exists,
+ otherwise we will fallback to the former.
format.useAutoBase::
A boolean value which lets you enable the `--base=auto` option of
@@ -359,12 +359,13 @@ with configuration variables.
------------
In addition, for a specific branch, you can add additional "To:" or
-"Cc:" headers.
+"Cc:" headers and change the patch output directory.
------------
[format "branch-name"]
to = <email>
cc = <email>
+ outputDirectory = <directory>
------------
DISCUSSION
@@ -1023,6 +1023,24 @@ static void show_diffstat(struct rev_info *rev,
fprintf(rev->diffopt.file, "\n");
}
+static const char *get_branch_output_dir(struct rev_info *rev, const char *branch_name)
+{
+ struct strbuf buf = STRBUF_INIT;
+ const char *output_directory;
+
+ if (!branch_name)
+ branch_name = find_branch_name(rev);
+
+ if (!branch_name || !*branch_name)
+ return NULL;
+
+ strbuf_addf(&buf, "format.%s.outputdirectory", branch_name);
+ git_config_get_string_const(buf.buf, &output_directory);
+ strbuf_release(&buf);
+
+ return output_directory;
+}
+
static void add_branch_headers(struct rev_info *rev, const char *branch_name)
{
struct strbuf buf = STRBUF_INIT;
@@ -1804,8 +1822,12 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
}
}
- if (!output_directory && !use_stdout)
- output_directory = config_output_directory;
+ if (!use_stdout) {
+ if (!output_directory)
+ output_directory = get_branch_output_dir(&rev, branch_name);
+ if (!output_directory)
+ output_directory = config_output_directory;
+ }
if (!use_stdout)
output_directory = set_outdir(prefix, output_directory);
@@ -1667,12 +1667,24 @@ test_expect_success 'format-patch format.outputDirectory option' '
test_line_count = $(ls patches | wc -l) list
'
-test_expect_success 'format-patch -o overrides format.outputDirectory' '
+test_expect_success 'format-patch format.side.outputDirectory option overrides format.outputDirectory' '
test_config format.outputDirectory patches &&
- rm -fr patches patchset &&
+ test_config format.side.outputDirectory sidepatches &&
+ rm -fr patches sidepatches &&
+ git format-patch master..side &&
+ git rev-list master..side >list &&
+ test_path_is_missing patches &&
+ test_line_count = $(ls sidepatches | wc -l) list
+'
+
+test_expect_success 'format-patch -o overrides format.outputDirectory and format.side.outputDirectory' '
+ test_config format.outputDirectory patches &&
+ test_config format.side.outputDirectory sidepatches &&
+ rm -fr patches sidepatches patchset &&
git format-patch master..side -o patchset &&
test_path_is_missing patches &&
- test_path_is_dir patchset
+ test_path_is_missing sidepatches &&
+ test_line_count = $(ls patchset | wc -l) list
'
test_expect_success 'format-patch --base' '
If a user wishes to have a per-branch output directory for patches, they must manually specify this on the command-line with `-o` for each invocation of format-patch. However, this can be cumbersome for a user to keep track of. Read `format.<branch-name>.outputDirectory` to give a branch-specific output directory that would override `format.outputDirectory`. Signed-off-by: Denton Liu <liu.denton@gmail.com> --- Documentation/config/format.txt | 5 ++++- Documentation/git-format-patch.txt | 3 ++- builtin/log.c | 26 ++++++++++++++++++++++++-- t/t4014-format-patch.sh | 18 +++++++++++++++--- 4 files changed, 45 insertions(+), 7 deletions(-)