|  | /* | 
|  | * GIT - The information manager from hell | 
|  | * | 
|  | * Copyright (C) Eric Biederman, 2005 | 
|  | */ | 
|  | #include "cache.h" | 
|  | #include "exec_cmd.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_ERROR_ON_NO_NAME) | 
|  | 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_ERROR_ON_NO_NAME); | 
|  | 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; | 
|  | int nongit; | 
|  | if (argc != 2) { | 
|  | usage(var_usage); | 
|  | } | 
|  |  | 
|  | setup_git_directory_gently(&nongit); | 
|  | val = NULL; | 
|  |  | 
|  | 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; | 
|  | } |