From: Denton Liu <liu.denton@gmail.com>
To: Git Mailing List <git@vger.kernel.org>
Cc: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
"Junio C Hamano" <gitster@pobox.com>
Subject: [PATCH v3 8/8] format-patch: read branch-specific output directory
Date: Tue, 21 May 2019 22:44:41 -0400 [thread overview]
Message-ID: <b23c3c16f752242a25245cdbfb97b26598d47dc0.1558492582.git.liu.denton@gmail.com> (raw)
In-Reply-To: <cover.1558492582.git.liu.denton@gmail.com>
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(-)
diff --git a/Documentation/config/format.txt b/Documentation/config/format.txt
index 95e255347a..df67a83183 100644
--- a/Documentation/config/format.txt
+++ b/Documentation/config/format.txt
@@ -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
diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt
index 707b4bdc6b..346f1229d8 100644
--- a/Documentation/git-format-patch.txt
+++ b/Documentation/git-format-patch.txt
@@ -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
diff --git a/builtin/log.c b/builtin/log.c
index 97980881ec..a1fe8b994a 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -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);
diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
index 23c467e95b..147934922c 100755
--- a/t/t4014-format-patch.sh
+++ b/t/t4014-format-patch.sh
@@ -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' '
--
2.22.0.rc1.169.g49223abbf8
next prev parent reply other threads:[~2019-05-22 2:44 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-05 16:24 [PATCH 0/7] teach branch-specific options for format-patch Denton Liu
2019-05-05 16:24 ` [PATCH 1/7] t4014: clean up style Denton Liu
2019-05-05 16:24 ` [PATCH 2/7] Doc: add more detail for git-format-patch Denton Liu
2019-05-05 16:24 ` [PATCH 3/7] branch.c: extract read_branch_config function Denton Liu
2019-05-05 16:24 ` [PATCH 4/7] format-patch: make cover letter subject configurable Denton Liu
2019-05-05 16:24 ` [PATCH 5/7] format-patch: move extra_headers logic later Denton Liu
2019-05-05 16:24 ` [PATCH 6/7] string-list: create string_list_append_all Denton Liu
2019-05-05 16:24 ` [PATCH 7/7] format-patch: read branch-specific To: and Cc: headers Denton Liu
2019-05-07 8:56 ` [PATCH 0/7] teach branch-specific options for format-patch Junio C Hamano
2019-05-07 14:19 ` Denton Liu
2019-05-07 15:05 ` Junio C Hamano
2019-05-07 15:21 ` Denton Liu
2019-05-07 15:46 ` Ævar Arnfjörð Bjarmason
2019-05-08 1:45 ` Junio C Hamano
2019-05-31 2:00 ` [RFC PATCH] config: learn the "onbranch:" includeIf condition Denton Liu
2019-05-31 12:58 ` Johannes Schindelin
2019-05-31 13:16 ` Denton Liu
2019-05-31 17:23 ` Johannes Schindelin
2019-05-31 18:44 ` Denton Liu
2019-05-31 19:33 ` [PATCH v2] " Denton Liu
2019-05-31 20:14 ` Johannes Schindelin
2019-06-05 8:02 ` Johannes Schindelin
2019-06-05 10:08 ` Duy Nguyen
2019-06-05 21:21 ` [PATCH v3] " Denton Liu
2019-06-06 12:52 ` Johannes Schindelin
2019-05-17 0:27 ` [PATCH v2 0/6] teach branch-specific options for format-patch Denton Liu
2019-05-17 0:27 ` [PATCH v2 1/6] t4014: clean up style Denton Liu
2019-05-17 0:27 ` [PATCH v2 2/6] Doc: add more detail for git-format-patch Denton Liu
2019-05-17 0:27 ` [PATCH v2 3/6] format-patch: make cover letter subject configurable Denton Liu
2019-05-17 0:27 ` [PATCH v2 4/6] format-patch: move extra_headers logic later Denton Liu
2019-05-17 0:27 ` [PATCH v2 5/6] string-list: create string_list_append_all Denton Liu
2019-05-17 0:27 ` [PATCH v2 6/6] format-patch: read branch-specific To: and Cc: headers Denton Liu
2019-05-17 4:12 ` [PATCH v2 0/6] teach branch-specific options for format-patch Junio C Hamano
2019-05-17 7:25 ` Denton Liu
2019-05-17 16:54 ` Denton Liu
2019-05-22 2:44 ` [PATCH v3 0/8] " Denton Liu
2019-05-22 2:44 ` [PATCH v3 1/8] t4014: clean up style Denton Liu
2019-05-22 2:44 ` [PATCH v3 2/8] Doc: add more detail for git-format-patch Denton Liu
2019-05-22 2:44 ` [PATCH v3 3/8] format-patch: infer cover letter from branch description Denton Liu
2019-05-22 2:44 ` [PATCH v3 4/8] format-patch: move extra_headers logic later Denton Liu
2019-05-22 2:44 ` [PATCH v3 5/8] string-list: create string_list_append_all Denton Liu
2019-05-22 2:44 ` [PATCH v3 6/8] format-patch: read branch-specific To: and Cc: headers Denton Liu
2019-05-22 2:44 ` [PATCH v3 7/8] format-patch: move output_directory logic later Denton Liu
2019-05-22 2:44 ` Denton Liu [this message]
2019-05-31 0:30 ` [PATCH v3 0/8] teach branch-specific options for format-patch Denton Liu
2019-06-14 21:56 ` [RESEND PATCH " Denton Liu
2019-06-14 21:56 ` [RESEND PATCH v3 1/8] t4014: clean up style Denton Liu
2019-06-14 21:56 ` [RESEND PATCH v3 2/8] Doc: add more detail for git-format-patch Denton Liu
2019-06-14 21:56 ` [RESEND PATCH v3 3/8] format-patch: infer cover letter from branch description Denton Liu
2019-06-14 21:56 ` [RESEND PATCH v3 4/8] format-patch: move extra_headers logic later Denton Liu
2019-06-14 21:56 ` [RESEND PATCH v3 5/8] string-list: create string_list_append_all Denton Liu
2019-06-14 21:56 ` [RESEND PATCH v3 6/8] format-patch: read branch-specific To: and Cc: headers Denton Liu
2019-06-14 21:56 ` [RESEND PATCH v3 7/8] format-patch: move output_directory logic later Denton Liu
2019-06-14 21:56 ` [RESEND PATCH v3 8/8] format-patch: read branch-specific output directory Denton Liu
2019-10-15 9:06 ` [PATCH v6 0/3] format-patch: learn --infer-cover-subject option (also t4014 cleanup) Denton Liu
2019-10-15 9:06 ` [PATCH v6 1/3] format-patch: replace erroneous and condition Denton Liu
2019-10-15 9:06 ` [PATCH v6 2/3] format-patch: use enum variables Denton Liu
2019-10-15 9:06 ` [PATCH v6 3/3] format-patch: teach --cover-from-description option Denton Liu
2019-10-16 1:28 ` [PATCH v6 0/3] format-patch: learn --infer-cover-subject option (also t4014 cleanup) Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b23c3c16f752242a25245cdbfb97b26598d47dc0.1558492582.git.liu.denton@gmail.com \
--to=liu.denton@gmail.com \
--cc=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).