add -i, send-email, svn, p4, etc: use "git var GIT_EDITOR"
authorJonathan Nieder <jrnieder@gmail.com>
Sat, 31 Oct 2009 01:42:34 +0000 (20:42 -0500)
committerJunio C Hamano <gitster@pobox.com>
Fri, 13 Nov 2009 20:20:50 +0000 (12:20 -0800)
Use the new "git var GIT_EDITOR" feature to decide what editor to
use, instead of duplicating its logic elsewhere. This should make
the behavior of commands in edge cases (e.g., editor names with
spaces) a little more consistent.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config.txt
Documentation/git-commit.txt
Documentation/git-send-email.txt
contrib/fast-import/git-p4
git-add--interactive.perl
git-send-email.perl
git-sh-setup.sh
git-svn.perl
index d1e2120e15b37a14eec5b3d1de9752da8f6ad7af..5181b7762946b011bff51c152393631f72d5d294 100644 (file)
@@ -387,9 +387,7 @@ core.editor::
        Commands such as `commit` and `tag` that lets you edit
        messages by launching an editor uses the value of this
        variable when it is set, and the environment variable
        Commands such as `commit` and `tag` that lets you edit
        messages by launching an editor uses the value of this
        variable when it is set, and the environment variable
-       `GIT_EDITOR` is not set.  The order of preference is
-       `GIT_EDITOR` environment, `core.editor`, `VISUAL` and
-       `EDITOR` environment variables and then finally `vi`.
+       `GIT_EDITOR` is not set.  See linkgit:git-var[1].
 
 core.pager::
        The command that git will use to paginate output.  Can
 
 core.pager::
        The command that git will use to paginate output.  Can
index 0578a40d841348b5ae484e1fe15ce637ecc4b830..3ea80c820fb404d7b00436f9820fe8701f056ebf 100644 (file)
@@ -323,7 +323,7 @@ ENVIRONMENT AND CONFIGURATION VARIABLES
 The editor used to edit the commit log message will be chosen from the
 GIT_EDITOR environment variable, the core.editor configuration variable, the
 VISUAL environment variable, or the EDITOR environment variable (in that
 The editor used to edit the commit log message will be chosen from the
 GIT_EDITOR environment variable, the core.editor configuration variable, the
 VISUAL environment variable, or the EDITOR environment variable (in that
-order).
+order).  See linkgit:git-var[1] for details.
 
 HOOKS
 -----
 
 HOOKS
 -----
index 767cf4d4bdcdfbb6e76b3680b0e89af2186d632a..c85d7f4385b91ce296c0247e3c9b93059abff19d 100644 (file)
@@ -60,8 +60,8 @@ The --bcc option must be repeated for each user you want on the bcc list.
 The --cc option must be repeated for each user you want on the cc list.
 
 --compose::
 The --cc option must be repeated for each user you want on the cc list.
 
 --compose::
-       Use $GIT_EDITOR, core.editor, $VISUAL, or $EDITOR to edit an
-       introductory message for the patch series.
+       Invoke a text editor (see GIT_EDITOR in linkgit:git-var[1])
+       to edit an introductory message for the patch series.
 +
 When '--compose' is used, git send-email will use the From, Subject, and
 In-Reply-To headers specified in the message. If the body of the message
 +
 When '--compose' is used, git send-email will use the From, Subject, and
 In-Reply-To headers specified in the message. If the body of the message
index e710219ca52af3c90c28bb90273d062a26543864..48059d0aa74fe5f4c14bd74f599d449335ef8519 100755 (executable)
@@ -729,13 +729,10 @@ class P4Submit(Command):
             tmpFile.write(submitTemplate + separatorLine + diff + newdiff)
             tmpFile.close()
             mtime = os.stat(fileName).st_mtime
             tmpFile.write(submitTemplate + separatorLine + diff + newdiff)
             tmpFile.close()
             mtime = os.stat(fileName).st_mtime
-            defaultEditor = "vi"
-            if platform.system() == "Windows":
-                defaultEditor = "notepad"
             if os.environ.has_key("P4EDITOR"):
                 editor = os.environ.get("P4EDITOR")
             else:
             if os.environ.has_key("P4EDITOR"):
                 editor = os.environ.get("P4EDITOR")
             else:
-                editor = os.environ.get("EDITOR", defaultEditor);
+                editor = read_pipe("git var GIT_EDITOR")
             system(editor + " " + fileName)
 
             response = "y"
             system(editor + " " + fileName)
 
             response = "y"
index 69aeaf03ec65922d8a3e5e092fab3d4b6ffcb63e..0c74e5c14ad15b3f90c2688b34637be5b70e3e0e 100755 (executable)
@@ -987,8 +987,7 @@ sub edit_hunk_manually {
 EOF
        close $fh;
 
 EOF
        close $fh;
 
-       my $editor = $ENV{GIT_EDITOR} || $repo->config("core.editor")
-               || $ENV{VISUAL} || $ENV{EDITOR} || "vi";
+       chomp(my $editor = run_cmd_pipe(qw(git var GIT_EDITOR)));
        system('sh', '-c', $editor.' "$@"', $editor, $hunkfile);
 
        if ($? != 0) {
        system('sh', '-c', $editor.' "$@"', $editor, $hunkfile);
 
        if ($? != 0) {
index a0279de687064c762a4ee24dfe2ed1922afab53a..4f5da4ecf253d79dd558e3c962c194fe3da46296 100755 (executable)
@@ -162,7 +162,8 @@ sub format_2822_time {
 
 # Handle interactive edition of files.
 my $multiedit;
 
 # Handle interactive edition of files.
 my $multiedit;
-my $editor = $ENV{GIT_EDITOR} || Git::config(@repo, "core.editor") || $ENV{VISUAL} || $ENV{EDITOR} || "vi";
+my $editor = Git::command_oneline('var', 'GIT_EDITOR');
+
 sub do_edit {
        if (defined($multiedit) && !$multiedit) {
                map {
 sub do_edit {
        if (defined($multiedit) && !$multiedit) {
                map {
index c41c2f7439724adc3dd13b92c86b25d254fc23b8..99cceeb858dcd2c83a040b0dd3117744e177e316 100755 (executable)
@@ -99,19 +99,12 @@ set_reflog_action() {
 }
 
 git_editor() {
 }
 
 git_editor() {
-       : "${GIT_EDITOR:=$(git config core.editor)}"
-       : "${GIT_EDITOR:=${VISUAL:-${EDITOR}}}"
-       case "$GIT_EDITOR,$TERM" in
-       ,dumb)
-               echo >&2 "No editor specified in GIT_EDITOR, core.editor, VISUAL,"
-               echo >&2 "or EDITOR. Tried to fall back to vi but terminal is dumb."
-               echo >&2 "Please set one of these variables to an appropriate"
-               echo >&2 "editor or run $0 with options that will not cause an"
-               echo >&2 "editor to be invoked (e.g., -m or -F for git-commit)."
-               exit 1
-               ;;
-       esac
-       eval "${GIT_EDITOR:=vi}" '"$@"'
+       if test -z "${GIT_EDITOR:+set}"
+       then
+               GIT_EDITOR="$(git var GIT_EDITOR)" || return $?
+       fi
+
+       eval "$GIT_EDITOR" '"$@"'
 }
 
 is_bare_repository () {
 }
 
 is_bare_repository () {
index 6a3b501d24ebaa50e297511ccf0b18e3bbd2bb16..42c9a728adc9e217bd06479562b72235454d7b54 100755 (executable)
@@ -1321,9 +1321,8 @@ sub get_commit_entry {
        close $log_fh or croak $!;
 
        if ($_edit || ($type eq 'tree')) {
        close $log_fh or croak $!;
 
        if ($_edit || ($type eq 'tree')) {
-               my $editor = $ENV{VISUAL} || $ENV{EDITOR} || 'vi';
-               # TODO: strip out spaces, comments, like git-commit.sh
-               system($editor, $commit_editmsg);
+               chomp(my $editor = command_oneline(qw(var GIT_EDITOR)));
+               system('sh', '-c', $editor.' "$@"', $editor, $commit_editmsg);
        }
        rename $commit_editmsg, $commit_msg or croak $!;
        {
        }
        rename $commit_editmsg, $commit_msg or croak $!;
        {