From: Sean Allred <allred.sean@xxxxxxxxx> Provides the same benefits to scripts as exposing GIT_EDITOR, but allows distinguishing the 'sequence' editor from the 'core' editor. See also 44fcb4977cbae67f4698306ccfe982420ceebcbf. Signed-off-by: Sean Allred <allred.sean@xxxxxxxxx> --- 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). Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1424%2Fvermiculus%2Fsa%2Fgit-var-sequence-editor-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1424/vermiculus/sa/git-var-sequence-editor-v1 Pull-Request: https://github.com/gitgitgadget/git/pull/1424 Documentation/git-var.txt | 7 +++++++ builtin/var.c | 11 +++++++++++ t/t0007-git-var.sh | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) diff --git a/Documentation/git-var.txt b/Documentation/git-var.txt index 6aa521fab23..764a94b2a1f 100644 --- a/Documentation/git-var.txt +++ b/Documentation/git-var.txt @@ -49,6 +49,13 @@ 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 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`. + 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 491db274292..9a2d31dc4aa 100644 --- a/builtin/var.c +++ b/builtin/var.c @@ -19,6 +19,16 @@ static const char *editor(int flag) return pgm; } +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; +} + static const char *pager(int flag) { const char *pgm = git_pager(1); @@ -41,6 +51,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 e56f4b9ac59..3199285fa7b 100755 --- a/t/t0007-git-var.sh +++ b/t/t0007-git-var.sh @@ -47,6 +47,44 @@ test_expect_success 'get GIT_DEFAULT_BRANCH with configuration' ' ) ' +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: a0789512c5a4ae7da935cd2e419f253cb3cb4ce7 -- gitgitgadget