From: Linus Torvalds Date: Fri, 22 Jan 2010 04:21:55 +0000 (-0800) Subject: make "git var" a built-in X-Git-Tag: v1.7.0-rc0~38 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=55b6745d633b9501576eb02183da0b0fb1cee964;p=git.git make "git var" a built-in Signed-off-by: Linus Torvalds Signed-off-by: Junio C Hamano --- diff --git a/Makefile b/Makefile index 6e7431e5b..4558c4627 100644 --- a/Makefile +++ b/Makefile @@ -397,7 +397,6 @@ PROGRAMS += git-shell$X PROGRAMS += git-show-index$X PROGRAMS += git-unpack-file$X PROGRAMS += git-upload-pack$X -PROGRAMS += git-var$X PROGRAMS += git-http-backend$X # List built-in command $C whose implementation cmd_$C() is not in @@ -704,6 +703,7 @@ BUILTIN_OBJS += builtin-update-index.o BUILTIN_OBJS += builtin-update-ref.o BUILTIN_OBJS += builtin-update-server-info.o BUILTIN_OBJS += builtin-upload-archive.o +BUILTIN_OBJS += builtin-var.o BUILTIN_OBJS += builtin-verify-pack.o BUILTIN_OBJS += builtin-verify-tag.o BUILTIN_OBJS += builtin-write-tree.o diff --git a/builtin-var.c b/builtin-var.c new file mode 100644 index 000000000..228051819 --- /dev/null +++ b/builtin-var.c @@ -0,0 +1,99 @@ +/* + * GIT - The information manager from hell + * + * Copyright (C) Eric Biederman, 2005 + */ +#include "cache.h" +#include "exec_cmd.h" + +static const char var_usage[] = "git var [-l | ]"; + +static const char *editor(int flag) +{ + const char *pgm = git_editor(); + + if (!pgm && flag & IDENT_ERROR_ON_NO_NAME) + die("Terminal is dumb, but EDITOR unset"); + + return pgm; +} + +static const char *pager(int flag) +{ + const char *pgm = git_pager(); + + 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_ERROR_ON_NO_NAME); + 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; + int nongit; + if (argc != 2) { + usage(var_usage); + } + + setup_git_directory_gently(&nongit); + val = NULL; + + 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; +} diff --git a/builtin.h b/builtin.h index f525e92a2..2d95c3b2f 100644 --- a/builtin.h +++ b/builtin.h @@ -106,6 +106,7 @@ extern int cmd_update_ref(int argc, const char **argv, const char *prefix); extern int cmd_update_server_info(int argc, const char **argv, const char *prefix); extern int cmd_upload_archive(int argc, const char **argv, const char *prefix); extern int cmd_upload_tar(int argc, const char **argv, const char *prefix); +extern int cmd_var(int argc, const char **argv, const char *prefix); extern int cmd_verify_tag(int argc, const char **argv, const char *prefix); extern int cmd_version(int argc, const char **argv, const char *prefix); extern int cmd_whatchanged(int argc, const char **argv, const char *prefix); diff --git a/git.c b/git.c index c13ec7273..cf7dd5d26 100644 --- a/git.c +++ b/git.c @@ -372,6 +372,7 @@ static void handle_internal_command(int argc, const char **argv) { "update-ref", cmd_update_ref, RUN_SETUP }, { "update-server-info", cmd_update_server_info, RUN_SETUP }, { "upload-archive", cmd_upload_archive }, + { "var", cmd_var }, { "verify-tag", cmd_verify_tag, RUN_SETUP }, { "version", cmd_version }, { "whatchanged", cmd_whatchanged, RUN_SETUP | USE_PAGER }, diff --git a/var.c b/var.c deleted file mode 100644 index d9892f85c..000000000 --- a/var.c +++ /dev/null @@ -1,101 +0,0 @@ -/* - * GIT - The information manager from hell - * - * Copyright (C) Eric Biederman, 2005 - */ -#include "cache.h" -#include "exec_cmd.h" - -static const char var_usage[] = "git var [-l | ]"; - -static const char *editor(int flag) -{ - const char *pgm = git_editor(); - - if (!pgm && flag & IDENT_ERROR_ON_NO_NAME) - die("Terminal is dumb, but EDITOR unset"); - - return pgm; -} - -static const char *pager(int flag) -{ - const char *pgm = git_pager(); - - 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_ERROR_ON_NO_NAME); - 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 main(int argc, char **argv) -{ - const char *val; - int nongit; - if (argc != 2) { - usage(var_usage); - } - - git_extract_argv0_path(argv[0]); - - setup_git_directory_gently(&nongit); - val = NULL; - - 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; -}