summaryrefslogtreecommitdiff
path: root/builtin
diff options
context:
space:
mode:
authorĐoàn Trần Công Danh <congdanhqx@gmail.com>2021-05-06 15:02:18 (GMT)
committerJunio C Hamano <gitster@pobox.com>2021-05-06 21:40:25 (GMT)
commitd582992e80aa29c37cb449922e713a0c288ffe91 (patch)
treef2c60a7d73adc4ecf519308118cf37ee7ec1bcd8 /builtin
parent7e391989789db82983665667013a46eabc6fc570 (diff)
downloadgit-d582992e80aa29c37cb449922e713a0c288ffe91.zip
git-d582992e80aa29c37cb449922e713a0c288ffe91.tar.gz
git-d582992e80aa29c37cb449922e713a0c288ffe91.tar.bz2
mailinfo: load default metainfo_charset lazily
In a later change, we will use parse_option to parse mailinfo's options. In mailinfo, both "-u", "-n", and "--encoding" try to set the same field, with "-u" reset that field to some default value from configuration variable "i18n.commitEncoding". Let's delay the setting of that field until we finish processing all options. By doing that, "i18n.commitEncoding" can be parsed on demand. More importantly, it cleans the way for using parse_option. This change introduces some inconsistent brackets "{}" in "if/else if" construct, however, we will rewrite them in the next few changes. Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r--builtin/mailinfo.c40
1 files changed, 31 insertions, 9 deletions
diff --git a/builtin/mailinfo.c b/builtin/mailinfo.c
index cfb667a..77f9617 100644
--- a/builtin/mailinfo.c
+++ b/builtin/mailinfo.c
@@ -11,17 +11,25 @@
static const char mailinfo_usage[] =
"git mailinfo [-k | -b] [-m | --message-id] [-u | --encoding=<encoding> | -n] [--scissors | --no-scissors] <msg> <patch> < mail >info";
+struct metainfo_charset
+{
+ enum {
+ CHARSET_DEFAULT,
+ CHARSET_NO_REENCODE,
+ CHARSET_EXPLICIT,
+ } policy;
+ const char *charset;
+};
+
int cmd_mailinfo(int argc, const char **argv, const char *prefix)
{
- const char *def_charset;
+ struct metainfo_charset meta_charset;
struct mailinfo mi;
int status;
char *msgfile, *patchfile;
setup_mailinfo(&mi);
-
- def_charset = get_commit_output_encoding();
- mi.metainfo_charset = def_charset;
+ meta_charset.policy = CHARSET_DEFAULT;
while (1 < argc && argv[1][0] == '-') {
if (!strcmp(argv[1], "-k"))
@@ -31,12 +39,13 @@ int cmd_mailinfo(int argc, const char **argv, const char *prefix)
else if (!strcmp(argv[1], "-m") || !strcmp(argv[1], "--message-id"))
mi.add_message_id = 1;
else if (!strcmp(argv[1], "-u"))
- mi.metainfo_charset = def_charset;
+ meta_charset.policy = CHARSET_DEFAULT;
else if (!strcmp(argv[1], "-n"))
- mi.metainfo_charset = NULL;
- else if (starts_with(argv[1], "--encoding="))
- mi.metainfo_charset = argv[1] + 11;
- else if (!strcmp(argv[1], "--scissors"))
+ meta_charset.policy = CHARSET_NO_REENCODE;
+ else if (starts_with(argv[1], "--encoding=")) {
+ meta_charset.policy = CHARSET_EXPLICIT;
+ meta_charset.charset = argv[1] + 11;
+ } else if (!strcmp(argv[1], "--scissors"))
mi.use_scissors = 1;
else if (!strcmp(argv[1], "--no-scissors"))
mi.use_scissors = 0;
@@ -50,6 +59,19 @@ int cmd_mailinfo(int argc, const char **argv, const char *prefix)
if (argc != 3)
usage(mailinfo_usage);
+ switch (meta_charset.policy) {
+ case CHARSET_DEFAULT:
+ mi.metainfo_charset = get_commit_output_encoding();
+ break;
+ case CHARSET_NO_REENCODE:
+ mi.metainfo_charset = NULL;
+ break;
+ case CHARSET_EXPLICIT:
+ break;
+ default:
+ BUG("invalid meta_charset.policy");
+ }
+
mi.input = stdin;
mi.output = stdout;