[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 <torvalds@osdl.org>
This commit is contained in:
Eric W. Biederman 2005-07-14 18:55:09 -06:00 committed by Linus Torvalds
parent 7a868a8414
commit aed022ab4c
4 changed files with 130 additions and 1 deletions

60
Documentation/git-var.txt Normal file
View File

@ -0,0 +1,60 @@
git-var(1)
==================
v0.1, July 2005
NAME
----
git-var - Print the git users identity
SYNOPSIS
--------
git-var [ -l | <variable> ]
DESCRIPTION
-----------
Prints a git logical variable.
-l causes the logical variables to be listed.
EXAMPLE
--------
$git-var GIT_AUTHOR_IDENT
Eric W. Biederman <ebiederm@lnxi.com> 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 <ebiederm@xmission.com>
Documentation
--------------
Documentation by Eric Biederman and the git-list <git@vger.kernel.org>.
GIT
---
Part of the link:git.html[git] suite

View File

@ -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

View File

@ -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

65
var.c Normal file
View File

@ -0,0 +1,65 @@
/*
* GIT - The information manager from hell
*
* Copyright (C) Eric Biederman, 2005
*/
#include "cache.h"
#include <stdio.h>
#include <errno.h>
#include <string.h>
static char *var_usage = "git-var [-l | <variable>]";
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;
}