var: format variable structure with C99 initializers
[git/debian.git] / builtin / var.c
blob379564a399d6ca293960a2d9560c4f8418e2dea1
1 /*
2 * GIT - The information manager from hell
4 * Copyright (C) Eric Biederman, 2005
5 */
6 #include "builtin.h"
7 #include "config.h"
8 #include "editor.h"
9 #include "ident.h"
10 #include "pager.h"
11 #include "refs.h"
13 static const char var_usage[] = "git var (-l | <variable>)";
15 static const char *editor(int ident_flag UNUSED)
17 return git_editor();
20 static const char *sequence_editor(int ident_flag UNUSED)
22 return git_sequence_editor();
25 static const char *pager(int ident_flag UNUSED)
27 const char *pgm = git_pager(1);
29 if (!pgm)
30 pgm = "cat";
31 return pgm;
34 static const char *default_branch(int ident_flag UNUSED)
36 return git_default_branch_name(1);
39 static const char *shell_path(int ident_flag UNUSED)
41 return SHELL_PATH;
44 struct git_var {
45 const char *name;
46 const char *(*read)(int);
48 static struct git_var git_vars[] = {
50 .name = "GIT_COMMITTER_IDENT",
51 .read = git_committer_info,
54 .name = "GIT_AUTHOR_IDENT",
55 .read = git_author_info,
58 .name = "GIT_EDITOR",
59 .read = editor,
62 .name = "GIT_SEQUENCE_EDITOR",
63 .read = sequence_editor,
66 .name = "GIT_PAGER",
67 .read = pager,
70 .name = "GIT_DEFAULT_BRANCH",
71 .read = default_branch,
74 .name = "GIT_SHELL_PATH",
75 .read = shell_path,
78 .name = "",
79 .read = NULL,
83 static void list_vars(void)
85 struct git_var *ptr;
86 const char *val;
88 for (ptr = git_vars; ptr->read; ptr++)
89 if ((val = ptr->read(0)))
90 printf("%s=%s\n", ptr->name, val);
93 static const struct git_var *get_git_var(const char *var)
95 struct git_var *ptr;
96 for (ptr = git_vars; ptr->read; ptr++) {
97 if (strcmp(var, ptr->name) == 0) {
98 return ptr;
101 return NULL;
104 static int show_config(const char *var, const char *value, void *cb)
106 if (value)
107 printf("%s=%s\n", var, value);
108 else
109 printf("%s\n", var);
110 return git_default_config(var, value, cb);
113 int cmd_var(int argc, const char **argv, const char *prefix UNUSED)
115 const struct git_var *git_var;
116 const char *val;
118 if (argc != 2)
119 usage(var_usage);
121 if (strcmp(argv[1], "-l") == 0) {
122 git_config(show_config, NULL);
123 list_vars();
124 return 0;
126 git_config(git_default_config, NULL);
128 git_var = get_git_var(argv[1]);
129 if (!git_var)
130 usage(var_usage);
132 val = git_var->read(IDENT_STRICT);
133 if (!val)
134 return 1;
136 printf("%s\n", val);
138 return 0;