You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
1.7 KiB
94 lines
1.7 KiB
/* |
|
* 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; |
|
}
|
|
|