/* * GIT - The information manager from hell * * Copyright (C) Eric Biederman, 2005 */ #include "builtin.h" #include "config.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; }