@matheusbsbs / matheus-bagliano / commits / aae94ffbc1
Fork 0

commit: -F overrides -t

Commit dbd0f5c7 (Files given on the command line are relative to $cwd, 2008-08-06) introduced parse_options_fix_filename() as a quick fix for filename arguments used in the parse options API. git-commit was still broken. This means git commit -F log -t temp in a subdirectory would make git think the log message should be taken from temp instead of log. This is because parse_options_fix_filename() calls prefix_filename() which uses a single static char buffer to do its work. Making two calls with two char pointers causes the pointers to alias. To prevent aliasing, we duplicate the string returned by parse_options_fix_filename(). Signed-off-by: Stephen Boyd <bebarino@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Stephen Boyd committed May 23, 2009 at 11:53 UTC aae94ffbc138181777a942ef18daf52606df833d
2 files changed +14
builtin-commit.c
+4
@@ -699,7 +699,11 @@ static int parse_and_validate_options(int argc, const char *argv[],
699
700 argc = parse_options(argc, argv, builtin_commit_options, usage, 0);
701 logfile = parse_options_fix_filename(prefix, logfile);
702 + if (logfile)
703 + logfile = xstrdup(logfile);
704 template_file = parse_options_fix_filename(prefix, template_file);
705 + if (template_file)
706 + template_file = xstrdup(template_file);
707
708 if (force_author && !strchr(force_author, '>'))
709 force_author = find_author_by_nickname(force_author);
t/t7500-commit.sh
+10
@@ -183,4 +183,14 @@ test_expect_success 'commit message from stdin' '
183 commit_msg_is "Log with foo word"
184 '
185
186 +test_expect_success 'commit -F overrides -t' '
187 + (
188 + cd subdir &&
189 + echo "-F log" > f.log &&
190 + echo "-t template" > t.template &&
191 + git commit --allow-empty -F f.log -t t.template
192 + ) &&
193 + commit_msg_is "-F log"
194 +'
195 +
196 test_done