Merge branch 'jc/format-patch-name-max'
The maximum length of output filenames "git format-patch" creates has become configurable (used to be capped at 64). * jc/format-patch-name-max: format-patch: make output filename configurable
This commit is contained in:
@ -37,6 +37,7 @@
|
||||
|
||||
#define MAIL_DEFAULT_WRAP 72
|
||||
#define COVER_FROM_AUTO_MAX_SUBJECT_LEN 100
|
||||
#define FORMAT_PATCH_NAME_MAX_DEFAULT 64
|
||||
|
||||
/* Set a default date-time format for git log ("log.date" config variable) */
|
||||
static const char *default_date_mode = NULL;
|
||||
@ -50,6 +51,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_DEFAULT;
|
||||
static const char *fmt_pretty;
|
||||
|
||||
static const char * const builtin_log_usage[] = {
|
||||
@ -150,6 +152,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;
|
||||
@ -457,6 +460,10 @@ 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.filenamemaxlength")) {
|
||||
fmt_patch_name_max = git_config_int(var, value);
|
||||
return 0;
|
||||
}
|
||||
if (!strcmp(var, "format.encodeemailheaders")) {
|
||||
default_encode_email_headers = git_config_bool(var, value);
|
||||
return 0;
|
||||
@ -958,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, '/');
|
||||
}
|
||||
|
||||
@ -1754,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),
|
||||
@ -1854,6 +1857,10 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
||||
PARSE_OPT_KEEP_ARGV0 | PARSE_OPT_KEEP_UNKNOWN |
|
||||
PARSE_OPT_KEEP_DASHDASH);
|
||||
|
||||
/* Make sure "0000-$sub.patch" gives non-negative length for $sub */
|
||||
if (fmt_patch_name_max <= strlen("0000-") + strlen(fmt_patch_suffix))
|
||||
fmt_patch_name_max = strlen("0000-") + strlen(fmt_patch_suffix);
|
||||
|
||||
if (cover_from_description_arg)
|
||||
cover_from_description_mode = parse_cover_from_description(cover_from_description_arg);
|
||||
|
||||
@ -1938,6 +1945,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;
|
||||
|
Reference in New Issue
Block a user