Having 'format.outputDirectory' is convenient, but being able to process
all produced patches via a wildcard command is even more so. I.e.,
using an argument like '/*'. Neither '-o' nor
'format.outputDirectory' can be parameterized to produce a new unique
directory. Thus provide the new 'format.outputDirectoryCmd' configuration
to specify a command which does the job and puts the name to standard
output.
Signed-off-by: Bert Wesarg
---
Cc: Alexander Kuleshov
Cc: Eric Sunshine
---
Documentation/config/format.txt| 5 +
Documentation/git-format-patch.txt | 6 +-
builtin/log.c | 24 +++-
t/t4014-format-patch.sh| 24
4 files changed, 57 insertions(+), 2 deletions(-)
diff --git a/Documentation/config/format.txt b/Documentation/config/format.txt
index b6c96ece04..dcce2c67ef 100644
--- a/Documentation/config/format.txt
+++ b/Documentation/config/format.txt
@@ -82,6 +82,11 @@ format.outputDirectory::
Set a custom directory to store the resulting files instead of the
current working directory. All directory components will be created.
+format.outputDirectoryCmd::
+ The command which is used to name a custom directory to store the
+ resulting files instead of the current working directory. All directory
+ components will be created.
+
format.useAutoBase::
A boolean value which lets you enable the `--base=auto` option of
format-patch by default.
diff --git a/Documentation/git-format-patch.txt
b/Documentation/git-format-patch.txt
index f418f490aa..0da904255b 100644
--- a/Documentation/git-format-patch.txt
+++ b/Documentation/git-format-patch.txt
@@ -67,7 +67,11 @@ 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 .`. All directory
-components will be created.
+components will be created. The 'format.outputDirectoryCmd' configuration can
+be used to name a command to produce the directory name programmatically. The
+command should produce the name to its standard output. The
+`format.outputDirectory` configuration takes precedence over
+`format.outputDirectoryCmd`.
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 1ab9eb6b78..b102e86bea 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -774,6 +774,7 @@ static const char *signature = git_version_string;
static const char *signature_file;
static int config_cover_letter;
static const char *config_output_directory;
+static const char *config_output_directory_cmd;
enum {
COVER_UNSET,
@@ -856,6 +857,8 @@ static int git_format_config(const char *var, const char
*value, void *cb)
}
if (!strcmp(var, "format.outputdirectory"))
return git_config_string(&config_output_directory, var, value);
+ if (!strcmp(var, "format.outputdirectorycmd"))
+ return git_config_string(&config_output_directory_cmd, var,
value);
if (!strcmp(var, "format.useautobase")) {
base_auto = git_config_bool(var, value);
return 0;
@@ -1756,8 +1759,27 @@ 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)
+ if (!output_directory && !use_stdout) {
+ // outputDirectoryCmd can be preceeded by outputDirectory
+ if (!config_output_directory && config_output_directory_cmd) {
+ struct child_process cp = CHILD_PROCESS_INIT;
+ const char *argv[1];
+ struct strbuf buf = STRBUF_INIT;
+ int rc;
+
+ argv[0] = config_output_directory_cmd;
+ cp.argv = argv;
+ cp.use_shell = 1;
+ rc = capture_command(&cp, &buf, PATH_MAX);
+ if (rc)
+ die(_("outputDirectoryCmd command failed: "
+ "'%s'"), config_output_directory_cmd);
+ strbuf_setlen(&buf, strcspn(buf.buf, "\r\n"));
+ config_output_directory = strbuf_detach(&buf, NULL);
+ }
+
output_directory = config_output_directory;
+ }
if (!use_stdout)
output_directory = set_outdir(prefix, output_directory);
diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
index 43d608aa94..bf2547ce87 100755
--- a/t/t4014-format-patch.sh
+++ b/t/t4014-format-patch.sh
@@ -1664,6 +1664,30 @@ test_expect_success 'format-patch -o overrides
format.outputDirectory' '