]>
Commit | Line | Data |
---|---|---|
aed022ab EB |
1 | /* |
2 | * GIT - The information manager from hell | |
3 | * | |
4 | * Copyright (C) Eric Biederman, 2005 | |
5 | */ | |
6 | #include "cache.h" | |
2fb3f6db | 7 | #include "exec_cmd.h" |
aed022ab | 8 | |
5354a56f | 9 | static const char var_usage[] = "git var [-l | <variable>]"; |
aed022ab | 10 | |
44fcb497 JN |
11 | static const char *editor(int flag) |
12 | { | |
13 | const char *pgm = git_editor(); | |
14 | ||
15 | if (!pgm && flag & IDENT_ERROR_ON_NO_NAME) | |
16 | die("Terminal is dumb, but EDITOR unset"); | |
17 | ||
18 | return pgm; | |
19 | } | |
20 | ||
63618245 JN |
21 | static const char *pager(int flag) |
22 | { | |
23 | const char *pgm = git_pager(); | |
24 | ||
25 | if (!pgm) | |
26 | pgm = "cat"; | |
27 | return pgm; | |
28 | } | |
29 | ||
aed022ab EB |
30 | struct git_var { |
31 | const char *name; | |
749be728 | 32 | const char *(*read)(int); |
aed022ab EB |
33 | }; |
34 | static struct git_var git_vars[] = { | |
35 | { "GIT_COMMITTER_IDENT", git_committer_info }, | |
36 | { "GIT_AUTHOR_IDENT", git_author_info }, | |
44fcb497 | 37 | { "GIT_EDITOR", editor }, |
63618245 | 38 | { "GIT_PAGER", pager }, |
aed022ab EB |
39 | { "", NULL }, |
40 | }; | |
41 | ||
42 | static void list_vars(void) | |
43 | { | |
44 | struct git_var *ptr; | |
44fcb497 JN |
45 | const char *val; |
46 | ||
eeefa7c9 | 47 | for (ptr = git_vars; ptr->read; ptr++) |
44fcb497 JN |
48 | if ((val = ptr->read(0))) |
49 | printf("%s=%s\n", ptr->name, val); | |
aed022ab EB |
50 | } |
51 | ||
52 | static const char *read_var(const char *var) | |
53 | { | |
54 | struct git_var *ptr; | |
55 | const char *val; | |
56 | val = NULL; | |
eeefa7c9 | 57 | for (ptr = git_vars; ptr->read; ptr++) { |
aed022ab | 58 | if (strcmp(var, ptr->name) == 0) { |
774751a8 | 59 | val = ptr->read(IDENT_ERROR_ON_NO_NAME); |
aed022ab EB |
60 | break; |
61 | } | |
62 | } | |
63 | return val; | |
64 | } | |
65 | ||
ef90d6d4 | 66 | static int show_config(const char *var, const char *value, void *cb) |
e1b10391 LT |
67 | { |
68 | if (value) | |
69 | printf("%s=%s\n", var, value); | |
70 | else | |
71 | printf("%s\n", var); | |
ef90d6d4 | 72 | return git_default_config(var, value, cb); |
e1b10391 LT |
73 | } |
74 | ||
aed022ab EB |
75 | int main(int argc, char **argv) |
76 | { | |
77 | const char *val; | |
2fba8366 | 78 | int nongit; |
aed022ab EB |
79 | if (argc != 2) { |
80 | usage(var_usage); | |
81 | } | |
5d318ce6 | 82 | |
2fb3f6db SP |
83 | git_extract_argv0_path(argv[0]); |
84 | ||
2fba8366 | 85 | setup_git_directory_gently(&nongit); |
aed022ab EB |
86 | val = NULL; |
87 | ||
88 | if (strcmp(argv[1], "-l") == 0) { | |
ef90d6d4 | 89 | git_config(show_config, NULL); |
aed022ab EB |
90 | list_vars(); |
91 | return 0; | |
92 | } | |
ef90d6d4 | 93 | git_config(git_default_config, NULL); |
aed022ab EB |
94 | val = read_var(argv[1]); |
95 | if (!val) | |
96 | usage(var_usage); | |
a6080a0a | 97 | |
aed022ab | 98 | printf("%s\n", val); |
a6080a0a | 99 | |
aed022ab EB |
100 | return 0; |
101 | } |