From aed022ab4ca1055e1c962b73e14dbf41380f84a9 Mon Sep 17 00:00:00 2001 From: "Eric W. Biederman" Date: Thu, 14 Jul 2005 18:55:09 -0600 Subject: [PATCH] [PATCH] Add git-var a tool for reading interesting git variables. Sharing code between shell scripts and C is a challenge. The program git-var allows us to have a set of named values that a shell script can interrogate and a normal C program can simply call the functions that compute them. Allowing sharing when computing plain test values. Signed-off-by: Linus Torvalds --- Documentation/git-var.txt | 60 ++++++++++++++++++++++++++++++++++++ Documentation/git.txt | 3 ++ Makefile | 3 +- var.c | 65 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 Documentation/git-var.txt create mode 100644 var.c diff --git a/Documentation/git-var.txt b/Documentation/git-var.txt new file mode 100644 index 0000000000..5a27d44700 --- /dev/null +++ b/Documentation/git-var.txt @@ -0,0 +1,60 @@ +git-var(1) +================== +v0.1, July 2005 + +NAME +---- +git-var - Print the git users identity + + +SYNOPSIS +-------- +git-var [ -l | ] + +DESCRIPTION +----------- +Prints a git logical variable. + +-l causes the logical variables to be listed. + +EXAMPLE +-------- +$git-var GIT_AUTHOR_IDENT + +Eric W. Biederman 1121223278 -0600 + + +VARIABLES +---------- +GIT_AUTHOR_IDENT + The author of a piece of code. + +GIT_COMMITTER_IDENT + The person who put a piece of code into git. + +Diagnostics +----------- +You don't exist. Go away!:: + The passwd(5) gecos field couldn't be read +Your parents must have hated you!:: + The password(5) gecos field is longer than a giant static buffer. +Your sysadmin must hate you!:: + The password(5) name field is longer than a giant static buffer. + +See Also +-------- +link:git-commit-tree.html[git-commit-tree] +link:git-tag-script.html[git-tag-script] + +Author +------ +Written by Eric Biederman + +Documentation +-------------- +Documentation by Eric Biederman and the git-list . + +GIT +--- +Part of the link:git.html[git] suite + diff --git a/Documentation/git.txt b/Documentation/git.txt index 9e34146e3d..916a0b7f08 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -111,6 +111,9 @@ link:git-tar-tree.html[git-tar-tree]:: link:git-unpack-file.html[git-unpack-file]:: Creates a temporary file with a blob's contents +link:git-var.html[git-var]:: + Displays a git logical variable + link:git-verify-pack.html[git-verify-pack]:: Validates packed GIT archive files diff --git a/Makefile b/Makefile index 21dd582255..4bc3665f2d 100644 --- a/Makefile +++ b/Makefile @@ -48,7 +48,7 @@ PROG= git-update-cache git-diff-files git-init-db git-write-tree \ git-diff-stages git-rev-parse git-patch-id git-pack-objects \ git-unpack-objects git-verify-pack git-receive-pack git-send-pack \ git-prune-packed git-fetch-pack git-upload-pack git-clone-pack \ - git-show-index git-daemon + git-show-index git-daemon git-var all: $(PROG) @@ -148,6 +148,7 @@ git-receive-pack: receive-pack.c git-send-pack: send-pack.c git-prune-packed: prune-packed.c git-fetch-pack: fetch-pack.c +git-var: var.c git-http-pull: LIBS += -lcurl git-rev-list: LIBS += -lssl diff --git a/var.c b/var.c new file mode 100644 index 0000000000..488ec5147a --- /dev/null +++ b/var.c @@ -0,0 +1,65 @@ +/* + * GIT - The information manager from hell + * + * Copyright (C) Eric Biederman, 2005 + */ +#include "cache.h" +#include +#include +#include + +static char *var_usage = "git-var [-l | ]"; + +struct git_var { + const char *name; + char *(*read)(void); +}; +static struct git_var git_vars[] = { + { "GIT_COMMITTER_IDENT", git_committer_info }, + { "GIT_AUTHOR_IDENT", git_author_info }, + { "", NULL }, +}; + +static void list_vars(void) +{ + struct git_var *ptr; + for(ptr = git_vars; ptr->read; ptr++) { + printf("%s=%s\n", ptr->name, ptr->read()); + } +} + +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(); + break; + } + } + return val; +} + +int main(int argc, char **argv) +{ + const char *val; + if (argc != 2) { + usage(var_usage); + } + setup_ident(); + val = NULL; + + if (strcmp(argv[1], "-l") == 0) { + list_vars(); + return 0; + } + val = read_var(argv[1]); + if (!val) + usage(var_usage); + + printf("%s\n", val); + + return 0; +}