git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/4] commit: -F overrides -t

From
Stephen Boyd <bebarino@gmail.com>
Date
May 23, 2009, 18:53 UTC
Message-ID
<1243104793-3254-2-git-send-email-bebarino@gmail.com>
In-Reply-To
<1243104793-3254-1-git-send-email-bebarino@gmail.com>

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>
---
 builtin-commit.c  |    4 ++++
 t/t7500-commit.sh |   10 ++++++++++
 2 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/builtin-commit.c b/builtin-commit.c
index 81371b1..baaa75c 100644
--- a/builtin-commit.c
+++ b/builtin-commit.c
@@ -699,7 +699,11 @@ static int parse_and_validate_options(int argc, const char *argv[],
 
 	argc = parse_options(argc, argv, builtin_commit_options, usage, 0);
 	logfile = parse_options_fix_filename(prefix, logfile);
+	if (logfile)
+		logfile = xstrdup(logfile);
 	template_file = parse_options_fix_filename(prefix, template_file);
+	if (template_file)
+		template_file = xstrdup(template_file);
 
 	if (force_author && !strchr(force_author, '>'))
 		force_author = find_author_by_nickname(force_author);
diff --git a/t/t7500-commit.sh b/t/t7500-commit.sh
index 5998baf..8eec0fa 100755
--- a/t/t7500-commit.sh
+++ b/t/t7500-commit.sh
@@ -183,4 +183,14 @@ test_expect_success 'commit message from stdin' '
 	commit_msg_is "Log with foo word"
 '
 
+test_expect_success 'commit -F overrides -t' '
+	(
+		cd subdir &&
+		echo "-F log" > f.log &&
+		echo "-t template" > t.template &&
+		git commit --allow-empty -F f.log -t t.template
+	) &&
+	commit_msg_is "-F log"
+'
+
 test_done
-- 
1.6.3.1.145.gb74d77
Previous: Stephen BoydNext: Stephen Boyd
Message 2 of 5 in “Add OPT_FILENAME to parse-opts”
  1. 0/4 Add OPT_FILENAME to parse-optsStephen Boyd, May 23, 2009
  2. 1/4 commit: -F overrides -tStephen Boyd, May 23, 2009
  3. 2/4 apply, fmt-merge-msg: use relative filenamesStephen Boyd, May 23, 2009
  4. 3/4 parse-opts: prepare for OPT_FILENAMEStephen Boyd, May 23, 2009
  5. 4/4 parse-opts: add OPT_FILENAME and transition builtinsStephen Boyd, May 23, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.