mailinfo: read local configuration
Since b9605bc4f2 ("config: only read .git/config from configured repos", 2016-09-12), we do not read from ".git/config" unless we know we are in a repository. "git mailinfo" however didn't do the repository discovery and instead relied on the old behaviour. This was mostly OK because it was merely run as a helper program by other porcelain scripts that first chdir's up to the root of the working tree. Teach the command to run a "gentle" version of repository discovery so that local configuration variables like mailinfo.scissors are honoured. Signed-off-by: Junio C Hamano <gitster@pobox.com>
Junio C Hamano committed
Nov 22, 2016 at 13:13 UTC
3f0ec0687d95e0f53c899f964d769ca1846874da
3 files changed
+29
-5
builtin/mailinfo.c
+15
-4
@@ -11,15 +11,20 @@
11
static const char mailinfo_usage[] =
12
"git mailinfo [-k | -b] [-m | --message-id] [-u | --encoding=<encoding> | -n] [--scissors | --no-scissors] <msg> <patch> < mail >info";
13
14
+static char *prefix_copy(const char *prefix, const char *filename)
15
+{
16
+ if (!prefix || is_absolute_path(filename))
17
+ return xstrdup(filename);
18
+ return xstrdup(prefix_filename(prefix, strlen(prefix), filename));
19
+}
20
+
21
int cmd_mailinfo(int argc, const char **argv, const char *prefix)
22
{
23
const char *def_charset;
24
struct mailinfo mi;
25
int status;
26
+ char *msgfile, *patchfile;
27
20
- /* NEEDSWORK: might want to do the optional .git/ directory
21
- * discovery
22
- */
28
setup_mailinfo(&mi);
29
30
def_charset = get_commit_output_encoding();
@@ -54,8 +59,14 @@ int cmd_mailinfo(int argc, const char **argv, const char *prefix)
59
60
mi.input = stdin;
61
mi.output = stdout;
57
- status = !!mailinfo(&mi, argv[1], argv[2]);
62
+
63
+ msgfile = prefix_copy(prefix, argv[1]);
64
+ patchfile = prefix_copy(prefix, argv[2]);
65
+
66
+ status = !!mailinfo(&mi, msgfile, patchfile);
67
clear_mailinfo(&mi);
68
69
+ free(msgfile);
70
+ free(patchfile);
71
return status;
72
}
git.c
+1
-1
@@ -445,7 +445,7 @@ static struct cmd_struct commands[] = {
445
{ "ls-files", cmd_ls_files, RUN_SETUP | SUPPORT_SUPER_PREFIX },
446
{ "ls-remote", cmd_ls_remote, RUN_SETUP_GENTLY },
447
{ "ls-tree", cmd_ls_tree, RUN_SETUP },
448
- { "mailinfo", cmd_mailinfo },
448
+ { "mailinfo", cmd_mailinfo, RUN_SETUP_GENTLY },
449
{ "mailsplit", cmd_mailsplit },
450
{ "merge", cmd_merge, RUN_SETUP | NEED_WORK_TREE },
451
{ "merge-base", cmd_merge_base, RUN_SETUP },
t/t5100-mailinfo.sh
+13
@@ -158,4 +158,17 @@ test_expect_success 'mailinfo handles rfc2822 comment' '
158
test_cmp "$DATA/comment.expect" comment/info
159
'
160
161
+test_expect_success 'mailinfo with mailinfo.scissors config' '
162
+ test_config mailinfo.scissors true &&
163
+ (
164
+ mkdir sub &&
165
+ cd sub &&
166
+ git mailinfo ../msg0014.sc ../patch0014.sc <../0014 >../info0014.sc
167
+ ) &&
168
+ test_cmp "$DATA/msg0014--scissors" msg0014.sc &&
169
+ test_cmp "$DATA/patch0014--scissors" patch0014.sc &&
170
+ test_cmp "$DATA/info0014--scissors" info0014.sc
171
+'
172
+
173
+
174
test_done