git-commit-vandalism/var.c
Junio C Hamano 749be728d4 Delay "empty ident" errors until they really matter.
Previous one warned people upfront to encourage fixing their
environment early, but some people just use repositories and git
tools read-only without making any changes, and in such a case
there is not much point insisting on them having a usable ident.

This round attempts to move the error until either "git-var"
asks for the ident explicitly or "commit-tree" wants to use it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-18 20:31:05 -08:00

79 lines
1.3 KiB
C

/*
* GIT - The information manager from hell
*
* Copyright (C) Eric Biederman, 2005
*/
#include "cache.h"
#include <stdio.h>
#include <errno.h>
#include <string.h>
static const char var_usage[] = "git-var [-l | <variable>]";
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 },
{ "", 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(0));
}
}
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(1);
break;
}
}
return val;
}
static int show_config(const char *var, const char *value)
{
if (value)
printf("%s=%s\n", var, value);
else
printf("%s\n", var);
return git_default_config(var, value);
}
int main(int argc, char **argv)
{
const char *val;
if (argc != 2) {
usage(var_usage);
}
setup_git_directory();
setup_ident();
val = NULL;
if (strcmp(argv[1], "-l") == 0) {
git_config(show_config);
list_vars();
return 0;
}
git_config(git_default_config);
val = read_var(argv[1]);
if (!val)
usage(var_usage);
printf("%s\n", val);
return 0;
}