| /* | |
| * GIT - The information manager from hell | |
| * | |
| * Copyright (C) Eric Biederman, 2005 | |
| */ | |
| #include "builtin.h" | |
| static const char var_usage[] = "git var (-l | <variable>)"; | |
| static const char *editor(int flag) | |
| { | |
| const char *pgm = git_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); | |
| if (!pgm) | |
| pgm = "cat"; | |
| return pgm; | |
| } | |
| struct git_var { | |
| const char *name; | |
| const char *(*read)(int); | |
| }; | |
| static struct git_var git_vars[] = { | |
| { "GIT_COMMITTER_IDENT", git_committer_info }, | |
| { "GIT_AUTHOR_IDENT", git_author_info }, | |
| { "GIT_EDITOR", editor }, | |
| { "GIT_PAGER", pager }, | |
| { "", NULL }, | |
| }; | |
| static void list_vars(void) | |
| { | |
| struct git_var *ptr; | |
| const char *val; | |
| for (ptr = git_vars; ptr->read; ptr++) | |
| if ((val = ptr->read(0))) | |
| printf("%s=%s\n", ptr->name, val); | |
| } | |
| 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 val; | |
| } | |
| static int show_config(const char *var, const char *value, void *cb) | |
| { | |
| if (value) | |
| printf("%s=%s\n", var, value); | |
| else | |
| printf("%s\n", var); | |
| return git_default_config(var, value, cb); | |
| } | |
| int cmd_var(int argc, const char **argv, const char *prefix) | |
| { | |
| const char *val = NULL; | |
| if (argc != 2) | |
| usage(var_usage); | |
| if (strcmp(argv[1], "-l") == 0) { | |
| git_config(show_config, NULL); | |
| list_vars(); | |
| return 0; | |
| } | |
| git_config(git_default_config, NULL); | |
| val = read_var(argv[1]); | |
| if (!val) | |
| usage(var_usage); | |
| printf("%s\n", val); | |
| return 0; | |
| } |