All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Sean Allred via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Sean Allred <allred.sean@gmail.com>,
	Sean Allred <code@seanallred.com>,
	Sean Allred <allred.sean@gmail.com>
Subject: [PATCH v2] var: add GIT_SEQUENCE_EDITOR variable
Date: Sat, 17 Dec 2022 23:09:59 +0000	[thread overview]
Message-ID: <pull.1424.v2.git.1671318599482.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1424.git.1668972017089.gitgitgadget@gmail.com>

From: Sean Allred <allred.sean@gmail.com>

The editor program used by Git when editing the sequencer "todo" file
is determined by examining a few environment variables and also
affected by configuration variables. Introduce "git var
GIT_SEQUENCE_EDITOR" to give users access to the final result of the
logic without having to know the exact details.

This is very similar in spirit to 44fcb497 (Teach git var about
GIT_EDITOR, 2009-11-11) that introduced "git var GIT_EDITOR".

Signed-off-by: Sean Allred <allred.sean@gmail.com>
---
    var: add GIT_SEQUENCE_EDITOR variable
    
    In my case, I'm overriding the sequence editor in git rebase -i to do
    some pre-processing on the todo file, but I'd still like to open up the
    editor for further manipulation/verification of the todo steps. Just
    using GIT_EDITOR here will clobber folks' expectations that their
    custom-built sequence editor pops up (e.g. VSCode or Git Cola).
    
    Changes since v1:
    
     * rebased on current main
     * following new, simplified patterns from my previous pull-request
       merged in d8184580

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1424%2Fvermiculus%2Fsa%2Fgit-var-sequence-editor-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1424/vermiculus/sa/git-var-sequence-editor-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/1424

Range-diff vs v1:

 1:  aa5ac73ab39 ! 1:  c9683fabf3d var: add GIT_SEQUENCE_EDITOR variable
     @@ Metadata
       ## Commit message ##
          var: add GIT_SEQUENCE_EDITOR variable
      
     -    Provides the same benefits to scripts as exposing GIT_EDITOR, but
     -    allows distinguishing the 'sequence' editor from the 'core' editor.
     +    The editor program used by Git when editing the sequencer "todo" file
     +    is determined by examining a few environment variables and also
     +    affected by configuration variables. Introduce "git var
     +    GIT_SEQUENCE_EDITOR" to give users access to the final result of the
     +    logic without having to know the exact details.
      
     -    See also 44fcb4977cbae67f4698306ccfe982420ceebcbf.
     +    This is very similar in spirit to 44fcb497 (Teach git var about
     +    GIT_EDITOR, 2009-11-11) that introduced "git var GIT_EDITOR".
      
          Signed-off-by: Sean Allred <allred.sean@gmail.com>
      
     @@ Documentation/git-var.txt: ifdef::git-default-editor[]
       endif::git-default-editor[]
       
      +GIT_SEQUENCE_EDITOR::
     -+    Text editor for use by Git sequencer commands. Like `GIT_EDITOR`,
     -+    the value is meant to be interpreted by the shell when it is used.
     -+    The order of preference is the `$GIT_SEQUENCE_EDITOR` environment
     -+    variable, then `sequence.editor` configuration, and then the value
     -+    of `git var GIT_EDITOR`.
     ++    Text editor used to edit the 'todo' file while running `git rebase
     ++    -i`. Like `GIT_EDITOR`, the value is meant to be interpreted by
     ++    the shell when it is used. The order of preference is the
     ++    `$GIT_SEQUENCE_EDITOR` environment variable, then
     ++    `sequence.editor` configuration, and then the value of `git var
     ++    GIT_EDITOR`.
      +
       GIT_PAGER::
           Text viewer for use by Git commands (e.g., 'less').  The value
     @@ Documentation/git-var.txt: ifdef::git-default-editor[]
      
       ## builtin/var.c ##
      @@ builtin/var.c: static const char *editor(int flag)
     - 	return pgm;
     + 	return git_editor();
       }
       
      +static const char *sequence_editor(int flag)
      +{
     -+	const char *pgm = git_sequence_editor();
     -+
     -+	if (!pgm && flag & IDENT_STRICT)
     -+		die("Terminal is dumb, but EDITOR unset");
     -+
     -+	return pgm;
     ++	return git_sequence_editor();
      +}
      +
       static const char *pager(int flag)
     @@ builtin/var.c: static struct git_var git_vars[] = {
       	{ "", NULL },
      
       ## t/t0007-git-var.sh ##
     -@@ t/t0007-git-var.sh: test_expect_success 'get GIT_DEFAULT_BRANCH with configuration' '
     +@@ t/t0007-git-var.sh: test_expect_success 'get GIT_EDITOR with configuration and environment variable
       	)
       '
       


 Documentation/git-var.txt |  8 ++++++++
 builtin/var.c             |  6 ++++++
 t/t0007-git-var.sh        | 38 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 52 insertions(+)

diff --git a/Documentation/git-var.txt b/Documentation/git-var.txt
index 0ab5bfa7d72..f40202b8e3a 100644
--- a/Documentation/git-var.txt
+++ b/Documentation/git-var.txt
@@ -50,6 +50,14 @@ ifdef::git-default-editor[]
     The build you are using chose '{git-default-editor}' as the default.
 endif::git-default-editor[]
 
+GIT_SEQUENCE_EDITOR::
+    Text editor used to edit the 'todo' file while running `git rebase
+    -i`. Like `GIT_EDITOR`, the value is meant to be interpreted by
+    the shell when it is used. The order of preference is the
+    `$GIT_SEQUENCE_EDITOR` environment variable, then
+    `sequence.editor` configuration, and then the value of `git var
+    GIT_EDITOR`.
+
 GIT_PAGER::
     Text viewer for use by Git commands (e.g., 'less').  The value
     is meant to be interpreted by the shell.  The order of preference
diff --git a/builtin/var.c b/builtin/var.c
index a1a2522126f..a80c1df86fd 100644
--- a/builtin/var.c
+++ b/builtin/var.c
@@ -14,6 +14,11 @@ static const char *editor(int flag)
 	return git_editor();
 }
 
+static const char *sequence_editor(int flag)
+{
+	return git_sequence_editor();
+}
+
 static const char *pager(int flag)
 {
 	const char *pgm = git_pager(1);
@@ -36,6 +41,7 @@ static struct git_var git_vars[] = {
 	{ "GIT_COMMITTER_IDENT", git_committer_info },
 	{ "GIT_AUTHOR_IDENT",   git_author_info },
 	{ "GIT_EDITOR", editor },
+	{ "GIT_SEQUENCE_EDITOR", sequence_editor },
 	{ "GIT_PAGER", pager },
 	{ "GIT_DEFAULT_BRANCH", default_branch },
 	{ "", NULL },
diff --git a/t/t0007-git-var.sh b/t/t0007-git-var.sh
index 433d242897c..eeb8539c1bc 100755
--- a/t/t0007-git-var.sh
+++ b/t/t0007-git-var.sh
@@ -109,6 +109,44 @@ test_expect_success 'get GIT_EDITOR with configuration and environment variable
 	)
 '
 
+test_expect_success 'get GIT_SEQUENCE_EDITOR without configuration' '
+	(
+		sane_unset GIT_SEQUENCE_EDITOR &&
+		git var GIT_EDITOR >expect &&
+		git var GIT_SEQUENCE_EDITOR >actual &&
+		test_cmp expect actual
+	)
+'
+
+test_expect_success 'get GIT_SEQUENCE_EDITOR with configuration' '
+	test_config sequence.editor foo &&
+	(
+		sane_unset GIT_SEQUENCE_EDITOR &&
+		echo foo >expect &&
+		git var GIT_SEQUENCE_EDITOR >actual &&
+		test_cmp expect actual
+	)
+'
+
+test_expect_success 'get GIT_SEQUENCE_EDITOR with environment variable' '
+	(
+		sane_unset GIT_SEQUENCE_EDITOR &&
+		echo bar >expect &&
+		GIT_SEQUENCE_EDITOR=bar git var GIT_SEQUENCE_EDITOR >actual &&
+		test_cmp expect actual
+	)
+'
+
+test_expect_success 'get GIT_SEQUENCE_EDITOR with configuration and environment variable' '
+	test_config sequence.editor foo &&
+	(
+		sane_unset GIT_SEQUENCE_EDITOR &&
+		echo bar >expect &&
+		GIT_SEQUENCE_EDITOR=bar git var GIT_SEQUENCE_EDITOR >actual &&
+		test_cmp expect actual
+	)
+'
+
 # For git var -l, we check only a representative variable;
 # testing the whole output would make our test too brittle with
 # respect to unrelated changes in the test suite's environment.

base-commit: 57e2c6ebbe7108b35ba30184dcbcb6c34c929ad8
-- 
gitgitgadget

      parent reply	other threads:[~2022-12-17 23:10 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-20 19:20 [PATCH] var: add GIT_SEQUENCE_EDITOR variable Sean Allred via GitGitGadget
2022-11-21  8:09 ` Junio C Hamano
2022-11-23 12:21   ` Sean Allred
2022-12-17 23:09 ` Sean Allred via GitGitGadget [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=pull.1424.v2.git.1671318599482.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=allred.sean@gmail.com \
    --cc=code@seanallred.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.