From: Junio C Hamano <gitster@pobox.com>
To: Jeff King <peff@peff.net>
Cc: Hu Keping <hukeping@huawei.com>,
git@vger.kernel.org, zhengjunling@huawei.com,
zhuangbiaowei@huawei.com, git@stormcloud9.net,
rafa.almas@gmail.com, l.s.r@web.de
Subject: Re: [PATCH] Lengthening FORMAT_PATCH_NAME_MAX to 80
Date: Fri, 06 Nov 2020 12:50:47 -0800 [thread overview]
Message-ID: <xmqqwnyydxaw.fsf@gitster.c.googlers.com> (raw)
In-Reply-To: <xmqqimajijwa.fsf@gitster.c.googlers.com> (Junio C. Hamano's message of "Thu, 05 Nov 2020 13:16:53 -0800")
Junio C Hamano <gitster@pobox.com> writes:
> A devil's advocate thinks that we should shorten it (and rename it
> to format-patch-subject-prefix-length or something) instead. That
> way, "ls" output can show more than one files on a single line even
> on a 80-column terminal. The leading digits already guarantee the
> uniqueness anyway.
>
> I do not mind getting rid of the "FORMAT_PATCH_NAME_MAX" constant
> and replacing it with a variable that defaults to 64 and can be
> tweaked by a command line option and/or a configuration variable.
> It does not feel it is worth the effort to replace one hardcoded
> constant with another hardcoded constant.
So here is my lunch-time hack for the day. Totally untested beyond
"it comiples and links".
A new configuration variable format.patchnamemax and a new command
line option --filename-max-length=<n> overrides the hardcoded
constant 64, which is the default. A value that is unreasonably
small is corrected to a hardcoded floor value of 8.
No new tests added nor documentation updated.
builtin/log.c | 21 ++++++++++++++-------
log-tree.c | 2 +-
log-tree.h | 1 -
revision.h | 1 +
4 files changed, 16 insertions(+), 9 deletions(-)
diff --git c/builtin/log.c w/builtin/log.c
index 0a7ed4bef9..d938fba27e 100644
--- c/builtin/log.c
+++ w/builtin/log.c
@@ -37,6 +37,8 @@
#define MAIL_DEFAULT_WRAP 72
#define COVER_FROM_AUTO_MAX_SUBJECT_LEN 100
+#define FORMAT_PATCH_NAME_MIN 8
+#define FORMAT_PATCH_NAME_MAX 64
/* Set a default date-time format for git log ("log.date" config variable) */
static const char *default_date_mode = NULL;
@@ -50,6 +52,7 @@ static int decoration_style;
static int decoration_given;
static int use_mailmap_config = 1;
static const char *fmt_patch_subject_prefix = "PATCH";
+static int fmt_patch_name_max = FORMAT_PATCH_NAME_MAX;
static const char *fmt_pretty;
static const char * const builtin_log_usage[] = {
@@ -150,6 +153,7 @@ static void cmd_log_init_defaults(struct rev_info *rev)
rev->abbrev_commit = default_abbrev_commit;
rev->show_root_diff = default_show_root;
rev->subject_prefix = fmt_patch_subject_prefix;
+ rev->patch_name_max = fmt_patch_name_max;
rev->show_signature = default_show_signature;
rev->encode_email_headers = default_encode_email_headers;
rev->diffopt.flags.allow_textconv = 1;
@@ -454,6 +458,12 @@ static int git_log_config(const char *var, const char *value, void *cb)
return git_config_string(&fmt_pretty, var, value);
if (!strcmp(var, "format.subjectprefix"))
return git_config_string(&fmt_patch_subject_prefix, var, value);
+ if (!strcmp(var, "format.patchnamemax")) {
+ fmt_patch_name_max = git_config_int(var, value);
+ if (fmt_patch_name_max < FORMAT_PATCH_NAME_MIN)
+ fmt_patch_name_max = FORMAT_PATCH_NAME_MIN;
+ return 0;
+ }
if (!strcmp(var, "format.encodeemailheaders")) {
default_encode_email_headers = git_config_bool(var, value);
return 0;
@@ -955,15 +965,9 @@ static int open_next_file(struct commit *commit, const char *subject,
struct rev_info *rev, int quiet)
{
struct strbuf filename = STRBUF_INIT;
- int suffix_len = strlen(rev->patch_suffix) + 1;
if (output_directory) {
strbuf_addstr(&filename, output_directory);
- if (filename.len >=
- PATH_MAX - FORMAT_PATCH_NAME_MAX - suffix_len) {
- strbuf_release(&filename);
- return error(_("name of output directory is too long"));
- }
strbuf_complete(&filename, '/');
}
@@ -1751,6 +1755,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
N_("start numbering patches at <n> instead of 1")),
OPT_INTEGER('v', "reroll-count", &reroll_count,
N_("mark the series as Nth re-roll")),
+ OPT_INTEGER(0, "filename-max-length", &fmt_patch_name_max,
+ N_("max length of output filename")),
OPT_CALLBACK_F(0, "rfc", &rev, NULL,
N_("Use [RFC PATCH] instead of [PATCH]"),
PARSE_OPT_NOARG | PARSE_OPT_NONEG, rfc_callback),
@@ -1822,6 +1828,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
init_display_notes(¬es_opt);
git_config(git_format_config, NULL);
repo_init_revisions(the_repository, &rev, prefix);
+ rev.subject_prefix = fmt_patch_subject_prefix;
rev.show_notes = show_notes;
memcpy(&rev.notes_opt, ¬es_opt, sizeof(notes_opt));
rev.commit_format = CMIT_FMT_EMAIL;
@@ -1831,7 +1838,6 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
rev.diff = 1;
rev.max_parents = 1;
rev.diffopt.flags.recursive = 1;
- rev.subject_prefix = fmt_patch_subject_prefix;
memset(&s_r_opt, 0, sizeof(s_r_opt));
s_r_opt.def = "HEAD";
s_r_opt.revarg_opt = REVARG_COMMITTISH;
@@ -1935,6 +1941,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
rev.diffopt.output_format |= DIFF_FORMAT_PATCH;
rev.zero_commit = zero_commit;
+ rev.patch_name_max = fmt_patch_name_max;
if (!rev.diffopt.flags.text && !no_binary_diff)
rev.diffopt.flags.binary = 1;
diff --git c/log-tree.c w/log-tree.c
index 1927f917ce..fd0dde97ec 100644
--- c/log-tree.c
+++ w/log-tree.c
@@ -367,7 +367,7 @@ void fmt_output_subject(struct strbuf *filename,
const char *suffix = info->patch_suffix;
int nr = info->nr;
int start_len = filename->len;
- int max_len = start_len + FORMAT_PATCH_NAME_MAX - (strlen(suffix) + 1);
+ int max_len = start_len + info->patch_name_max - (strlen(suffix) + 1);
if (0 < info->reroll_count)
strbuf_addf(filename, "v%d-", info->reroll_count);
diff --git c/log-tree.h w/log-tree.h
index 8fa79289ec..1e8c91dbf2 100644
--- c/log-tree.h
+++ w/log-tree.h
@@ -33,7 +33,6 @@ void log_write_email_headers(struct rev_info *opt, struct commit *commit,
int maybe_multipart);
void load_ref_decorations(struct decoration_filter *filter, int flags);
-#define FORMAT_PATCH_NAME_MAX 64
void fmt_output_commit(struct strbuf *, struct commit *, struct rev_info *);
void fmt_output_subject(struct strbuf *, const char *subject, struct rev_info *);
void fmt_output_email_subject(struct strbuf *, struct rev_info *);
diff --git c/revision.h w/revision.h
index f6bf860d19..086ff10280 100644
--- c/revision.h
+++ w/revision.h
@@ -238,6 +238,7 @@ struct rev_info {
const char *extra_headers;
const char *log_reencode;
const char *subject_prefix;
+ int patch_name_max;
int no_inline;
int show_log_size;
struct string_list *mailmap;
next prev parent reply other threads:[~2020-11-06 20:51 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-05 20:15 [PATCH] Lengthening FORMAT_PATCH_NAME_MAX to 80 Hu Keping
2020-11-05 15:01 ` Jeff King
2020-11-05 21:16 ` Junio C Hamano
2020-11-06 8:51 ` hukeping
2020-11-06 17:45 ` Junio C Hamano
2020-11-06 20:50 ` Junio C Hamano [this message]
2020-11-06 21:56 ` [PATCH] format-patch: make output filename configurable Junio C Hamano
2020-11-06 22:05 ` Eric Sunshine
2020-11-09 19:23 ` [PATCH v2] " Junio C Hamano
2020-11-10 0:23 ` Jeff King
2020-11-10 1:43 ` Junio C Hamano
2020-11-10 2:31 ` hukeping
2020-11-10 2:37 ` Junio C Hamano
2020-11-10 4:44 ` hukeping
2020-11-10 5:40 ` 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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqwnyydxaw.fsf@gitster.c.googlers.com \
--to=gitster@pobox.com \
--cc=git@stormcloud9.net \
--cc=git@vger.kernel.org \
--cc=hukeping@huawei.com \
--cc=l.s.r@web.de \
--cc=peff@peff.net \
--cc=rafa.almas@gmail.com \
--cc=zhengjunling@huawei.com \
--cc=zhuangbiaowei@huawei.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.
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 NNTP newsgroup(s).