This patch series makes a few distinct improvements to git-var to support the change to git_editor() prompted [here][1] and ultimately support that patch to introduce GIT_SEQUENCE_EDITOR as a handled logical variable. Changes since v1: * Fix a whitespace issue in var.c:editor() (where I have my editor configured to use spaces instead of tabs; whoops) * Squash this down to two patches as suggested. I typically organize my commits to make it clear they don't actively break something, but I can certainly see the value in organizing them differently when there is already an extremely robust body of automated tests like there is for Git. * Rebased on current main; no conflicts. Sean Allred (2): var: do not print usage() with a correct invocation var: allow GIT_EDITOR to return null Documentation/git-var.txt | 3 +- builtin/var.c | 26 +++++++-------- t/t0007-git-var.sh | 69 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 15 deletions(-) base-commit: c000d916380bb59db69c78546928eadd076b9c7d Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1434%2Fvermiculus%2Fsa%2Fvar-improvements-v2 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1434/vermiculus/sa/var-improvements-v2 Pull-Request: https://github.com/gitgitgadget/git/pull/1434 Range-diff vs v1: 1: d5f571f0bb3 ! 1: a7ff842a3e8 var: do not print usage() with a correct invocation @@ builtin/var.c: static void list_vars(void) printf("%s=%s\n", ptr->name, val); } +-static const char *read_var(const char *var) +static const struct git_var *get_git_var(const char *var) -+{ -+ struct git_var *ptr; -+ for (ptr = git_vars; ptr->read; ptr++) { -+ if (strcmp(var, ptr->name) == 0) { -+ return ptr; -+ } -+ } -+ return NULL; -+} -+ - static const char *read_var(const char *var) { struct git_var *ptr; +- const char *val; +- val = NULL; + for (ptr = git_vars; ptr->read; ptr++) { + if (strcmp(var, ptr->name) == 0) { +- val = ptr->read(IDENT_STRICT); +- break; ++ return ptr; + } + } +- return val; ++ return NULL; + } + + static int show_config(const char *var, const char *value, void *cb) @@ builtin/var.c: static int show_config(const char *var, const char *value, void *cb) int cmd_var(int argc, const char **argv, const char *prefix) @@ builtin/var.c: int cmd_var(int argc, const char **argv, const char *prefix) return 0; } git_config(git_default_config, NULL); +- val = read_var(argv[1]); +- if (!val) + + git_var = get_git_var(argv[1]); + if (!git_var) -+ usage(var_usage); -+ - val = read_var(argv[1]); - if (!val) -- usage(var_usage); -+ return 1; + usage(var_usage); ++ val = git_var->read(IDENT_STRICT); ++ if (!val) ++ return 1; ++ printf("%s\n", val); + return 0; 2: 905b109b458 < -: ----------- var: remove read_var 3: 8d49a718038 ! 2: 427cb7b55ac var: allow GIT_EDITOR to return null @@ builtin/var.c: static const char var_usage[] = "git var (-l | <variable>)"; - die("Terminal is dumb, but EDITOR unset"); - - return pgm; -+ return git_editor(); ++ return git_editor(); } static const char *pager(int flag) -- gitgitgadget