diff options
author | Johannes Schindelin <Johannes.Schindelin@gmx.de> | 2008-03-11 10:56:30 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-03-11 19:57:56 -0700 |
commit | fc99469a2b786676ffe48d5966d71cea3613b716 (patch) | |
tree | 028afe90d4f8331a37f82b42169cbefd98f2ec9b /builtin-tag.c | |
parent | git rebase --abort: always restore the right commit (diff) | |
download | tgif-fc99469a2b786676ffe48d5966d71cea3613b716.tar.xz |
launch_editor(): allow spaces in the filename
The construct
sh -c "$0 \"$@\"" <editor> <file>
does not pick up quotes in <editor>, so you cannot give path to the
editor that has a shell IFS whitespace in it, and also give it initial
set of parameters and flags. Replace $0 with <editor> to fix this issue.
This fixes
git config core.editor '"c:/Program Files/What/Ever.exe"'
In other words, you can specify an editor with spaces in its path using a
config containing something like this:
[core]
editor = \"c:/Program Files/Darn/Spaces.exe\"
NOTE: we cannot just replace the $0 with \"$0\", because we still want
this to work:
[core]
editor = emacs -nw
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin-tag.c')
-rw-r--r-- | builtin-tag.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/builtin-tag.c b/builtin-tag.c index 4a4a88c10b..9a59caf70d 100644 --- a/builtin-tag.c +++ b/builtin-tag.c @@ -50,12 +50,15 @@ void launch_editor(const char *path, struct strbuf *buffer, const char *const *e size_t len = strlen(editor); int i = 0; const char *args[6]; + struct strbuf arg0; + strbuf_init(&arg0, 0); if (strcspn(editor, "$ \t'") != len) { /* there are specials */ + strbuf_addf(&arg0, "%s \"$@\"", editor); args[i++] = "sh"; args[i++] = "-c"; - args[i++] = "$0 \"$@\""; + args[i++] = arg0.buf; } args[i++] = editor; args[i++] = path; @@ -63,6 +66,7 @@ void launch_editor(const char *path, struct strbuf *buffer, const char *const *e if (run_command_v_opt_cd_env(args, 0, NULL, env)) die("There was a problem with the editor %s.", editor); + strbuf_release(&arg0); } if (!buffer) |