mirror of
https://github.com/git/git
synced 2024-08-24 18:26:02 +00:00
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>
This commit is contained in:
parent
4201bb5f7e
commit
fc99469a2b
|
@ -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)
|
||||
|
|
|
@ -89,6 +89,33 @@ do
|
|||
'
|
||||
done
|
||||
|
||||
test_expect_success 'editor with a space' '
|
||||
|
||||
if echo "echo space > \"\$1\"" > "e space.sh"
|
||||
then
|
||||
chmod a+x "e space.sh" &&
|
||||
GIT_EDITOR="./e\ space.sh" git commit --amend &&
|
||||
test space = "$(git show -s --pretty=format:%s)"
|
||||
else
|
||||
say "Skipping; FS does not support spaces in filenames"
|
||||
fi
|
||||
|
||||
'
|
||||
|
||||
unset GIT_EDITOR
|
||||
test_expect_success 'core.editor with a space' '
|
||||
|
||||
if test -f "e space.sh"
|
||||
then
|
||||
git config core.editor \"./e\ space.sh\" &&
|
||||
git commit --amend &&
|
||||
test space = "$(git show -s --pretty=format:%s)"
|
||||
else
|
||||
say "Skipping; FS does not support spaces in filenames"
|
||||
fi
|
||||
|
||||
'
|
||||
|
||||
TERM="$OLD_TERM"
|
||||
|
||||
test_done
|
||||
|
|
Loading…
Reference in a new issue