Eric W. Biederman | aed022a | 2005-07-14 18:55:09 -0600 | [diff] [blame] | 1 | /* |
| 2 | * GIT - The information manager from hell |
| 3 | * |
| 4 | * Copyright (C) Eric Biederman, 2005 |
| 5 | */ |
Stephen Boyd | c2e86ad | 2011-03-22 00:51:05 -0700 | [diff] [blame] | 6 | #include "builtin.h" |
Brandon Williams | b2141fc | 2017-06-14 11:07:36 -0700 | [diff] [blame] | 7 | #include "config.h" |
Eric W. Biederman | aed022a | 2005-07-14 18:55:09 -0600 | [diff] [blame] | 8 | |
Jonathan Nieder | 9fabb6d | 2010-02-14 05:55:53 -0600 | [diff] [blame] | 9 | static const char var_usage[] = "git var (-l | <variable>)"; |
Eric W. Biederman | aed022a | 2005-07-14 18:55:09 -0600 | [diff] [blame] | 10 | |
Jonathan Nieder | 44fcb49 | 2009-11-11 18:01:27 -0600 | [diff] [blame] | 11 | static const char *editor(int flag) |
| 12 | { |
| 13 | const char *pgm = git_editor(); |
| 14 | |
Jeff King | f9bc573 | 2012-05-24 19:28:40 -0400 | [diff] [blame] | 15 | if (!pgm && flag & IDENT_STRICT) |
Jonathan Nieder | 44fcb49 | 2009-11-11 18:01:27 -0600 | [diff] [blame] | 16 | die("Terminal is dumb, but EDITOR unset"); |
| 17 | |
| 18 | return pgm; |
| 19 | } |
| 20 | |
Jonathan Nieder | 6361824 | 2009-10-30 20:41:27 -0500 | [diff] [blame] | 21 | static const char *pager(int flag) |
| 22 | { |
Jonathan Nieder | 64778d2 | 2010-02-14 05:59:59 -0600 | [diff] [blame] | 23 | const char *pgm = git_pager(1); |
Jonathan Nieder | 6361824 | 2009-10-30 20:41:27 -0500 | [diff] [blame] | 24 | |
| 25 | if (!pgm) |
| 26 | pgm = "cat"; |
| 27 | return pgm; |
| 28 | } |
| 29 | |
Eric W. Biederman | aed022a | 2005-07-14 18:55:09 -0600 | [diff] [blame] | 30 | struct git_var { |
| 31 | const char *name; |
Junio C Hamano | 749be72 | 2006-02-18 20:31:05 -0800 | [diff] [blame] | 32 | const char *(*read)(int); |
Eric W. Biederman | aed022a | 2005-07-14 18:55:09 -0600 | [diff] [blame] | 33 | }; |
| 34 | static struct git_var git_vars[] = { |
| 35 | { "GIT_COMMITTER_IDENT", git_committer_info }, |
| 36 | { "GIT_AUTHOR_IDENT", git_author_info }, |
Jonathan Nieder | 44fcb49 | 2009-11-11 18:01:27 -0600 | [diff] [blame] | 37 | { "GIT_EDITOR", editor }, |
Jonathan Nieder | 6361824 | 2009-10-30 20:41:27 -0500 | [diff] [blame] | 38 | { "GIT_PAGER", pager }, |
Eric W. Biederman | aed022a | 2005-07-14 18:55:09 -0600 | [diff] [blame] | 39 | { "", NULL }, |
| 40 | }; |
| 41 | |
| 42 | static void list_vars(void) |
| 43 | { |
| 44 | struct git_var *ptr; |
Jonathan Nieder | 44fcb49 | 2009-11-11 18:01:27 -0600 | [diff] [blame] | 45 | const char *val; |
| 46 | |
Brian Gianforcaro | eeefa7c | 2009-09-01 01:35:10 -0400 | [diff] [blame] | 47 | for (ptr = git_vars; ptr->read; ptr++) |
Jonathan Nieder | 44fcb49 | 2009-11-11 18:01:27 -0600 | [diff] [blame] | 48 | if ((val = ptr->read(0))) |
| 49 | printf("%s=%s\n", ptr->name, val); |
Eric W. Biederman | aed022a | 2005-07-14 18:55:09 -0600 | [diff] [blame] | 50 | } |
| 51 | |
| 52 | static const char *read_var(const char *var) |
| 53 | { |
| 54 | struct git_var *ptr; |
| 55 | const char *val; |
| 56 | val = NULL; |
Brian Gianforcaro | eeefa7c | 2009-09-01 01:35:10 -0400 | [diff] [blame] | 57 | for (ptr = git_vars; ptr->read; ptr++) { |
Eric W. Biederman | aed022a | 2005-07-14 18:55:09 -0600 | [diff] [blame] | 58 | if (strcmp(var, ptr->name) == 0) { |
Jeff King | f9bc573 | 2012-05-24 19:28:40 -0400 | [diff] [blame] | 59 | val = ptr->read(IDENT_STRICT); |
Eric W. Biederman | aed022a | 2005-07-14 18:55:09 -0600 | [diff] [blame] | 60 | break; |
| 61 | } |
| 62 | } |
| 63 | return val; |
| 64 | } |
| 65 | |
Johannes Schindelin | ef90d6d | 2008-05-14 18:46:53 +0100 | [diff] [blame] | 66 | static int show_config(const char *var, const char *value, void *cb) |
Linus Torvalds | e1b1039 | 2005-10-11 18:47:34 -0700 | [diff] [blame] | 67 | { |
| 68 | if (value) |
| 69 | printf("%s=%s\n", var, value); |
| 70 | else |
| 71 | printf("%s\n", var); |
Johannes Schindelin | ef90d6d | 2008-05-14 18:46:53 +0100 | [diff] [blame] | 72 | return git_default_config(var, value, cb); |
Linus Torvalds | e1b1039 | 2005-10-11 18:47:34 -0700 | [diff] [blame] | 73 | } |
| 74 | |
Linus Torvalds | 55b6745 | 2010-01-21 20:21:55 -0800 | [diff] [blame] | 75 | int cmd_var(int argc, const char **argv, const char *prefix) |
Eric W. Biederman | aed022a | 2005-07-14 18:55:09 -0600 | [diff] [blame] | 76 | { |
Nguyễn Thái Ngọc Duy | 2bc8c1a | 2010-08-05 22:21:40 -0500 | [diff] [blame] | 77 | const char *val = NULL; |
| 78 | if (argc != 2) |
Eric W. Biederman | aed022a | 2005-07-14 18:55:09 -0600 | [diff] [blame] | 79 | usage(var_usage); |
Eric W. Biederman | aed022a | 2005-07-14 18:55:09 -0600 | [diff] [blame] | 80 | |
| 81 | if (strcmp(argv[1], "-l") == 0) { |
Johannes Schindelin | ef90d6d | 2008-05-14 18:46:53 +0100 | [diff] [blame] | 82 | git_config(show_config, NULL); |
Eric W. Biederman | aed022a | 2005-07-14 18:55:09 -0600 | [diff] [blame] | 83 | list_vars(); |
| 84 | return 0; |
| 85 | } |
Johannes Schindelin | ef90d6d | 2008-05-14 18:46:53 +0100 | [diff] [blame] | 86 | git_config(git_default_config, NULL); |
Eric W. Biederman | aed022a | 2005-07-14 18:55:09 -0600 | [diff] [blame] | 87 | val = read_var(argv[1]); |
| 88 | if (!val) |
| 89 | usage(var_usage); |
Junio C Hamano | a6080a0 | 2007-06-07 00:04:01 -0700 | [diff] [blame] | 90 | |
Eric W. Biederman | aed022a | 2005-07-14 18:55:09 -0600 | [diff] [blame] | 91 | printf("%s\n", val); |
Junio C Hamano | a6080a0 | 2007-06-07 00:04:01 -0700 | [diff] [blame] | 92 | |
Eric W. Biederman | aed022a | 2005-07-14 18:55:09 -0600 | [diff] [blame] | 93 | return 0; |
| 94 | } |