Skip to content

Commit

Permalink
Delay "empty ident" errors until they really matter.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Junio C Hamano committed Feb 22, 2006
1 parent 2fb4a21 commit 589e4f9
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 29 deletions.
4 changes: 2 additions & 2 deletions cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -246,8 +246,8 @@ void datestamp(char *buf, int bufsize);
unsigned long approxidate(const char *);

extern int setup_ident(void);
extern const char *git_author_info(void);
extern const char *git_committer_info(void);
extern const char *git_author_info(int);
extern const char *git_committer_info(int);

struct checkout {
const char *base_dir;
Expand Down
4 changes: 2 additions & 2 deletions commit-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,8 @@ int main(int argc, char **argv)
add_buffer(&buffer, &size, "parent %s\n", sha1_to_hex(parent_sha1[i]));

/* Person/date information */
add_buffer(&buffer, &size, "author %s\n", git_author_info());
add_buffer(&buffer, &size, "committer %s\n\n", git_committer_info());
add_buffer(&buffer, &size, "author %s\n", git_author_info(1));
add_buffer(&buffer, &size, "committer %s\n\n", git_committer_info(1));

/* And add the comment */
while (fgets(comment, sizeof(comment), stdin) != NULL)
Expand Down
47 changes: 25 additions & 22 deletions ident.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,15 +46,6 @@ static void copy_gecos(struct passwd *w, char *name, int sz)

}

static const char au_env[] = "GIT_AUTHOR_NAME";
static const char co_env[] = "GIT_COMMITTER_NAME";
static const char env_hint[] =
"\n*** Environment problem:\n"
"*** Your name cannot be determined from your system services (gecos).\n"
"*** You would need to set %s and %s\n"
"*** environment variables; otherwise you won't be able to perform\n"
"*** certain operations because of \"empty ident\" errors.\n\n";

int setup_ident(void)
{
int len;
Expand All @@ -66,11 +57,6 @@ int setup_ident(void)
/* Get the name ("gecos") */
copy_gecos(pw, git_default_name, sizeof(git_default_name));

if (!*git_default_name) {
if (!getenv(au_env) || !getenv(co_env))
fprintf(stderr, env_hint, au_env, co_env);
}

/* Make up a fake email address (name + '@' + hostname [+ '.' + domainname]) */
len = strlen(pw->pw_name);
if (len > sizeof(git_default_email)/2)
Expand Down Expand Up @@ -170,8 +156,18 @@ static int copy(char *buf, int size, int offset, const char *src)
return offset;
}

static const char au_env[] = "GIT_AUTHOR_NAME";
static const char co_env[] = "GIT_COMMITTER_NAME";
static const char *env_hint =
"\n*** Environment problem:\n"
"*** Your name cannot be determined from your system services (gecos).\n"
"*** You would need to set %s and %s\n"
"*** environment variables; otherwise you won't be able to perform\n"
"*** certain operations because of \"empty ident\" errors.\n"
"*** Alternatively, you can use user.name configuration variable.\n\n";

static const char *get_ident(const char *name, const char *email,
const char *date_str)
const char *date_str, int error_on_no_name)
{
static char buffer[1000];
char date[50];
Expand All @@ -182,9 +178,14 @@ static const char *get_ident(const char *name, const char *email,
if (!email)
email = git_default_email;

if (!*name || !*email)
die("empty ident %s <%s> not allowed",
name, email);
if (!*name) {
if (name == git_default_name && env_hint) {
fprintf(stderr, env_hint, au_env, co_env);
env_hint = NULL; /* warn only once, for "git-var -l" */
}
if (error_on_no_name)
die("empty ident %s <%s> not allowed", name, email);
}

strcpy(date, git_default_date);
if (date_str)
Expand All @@ -201,16 +202,18 @@ static const char *get_ident(const char *name, const char *email,
return buffer;
}

const char *git_author_info(void)
const char *git_author_info(int error_on_no_name)
{
return get_ident(getenv("GIT_AUTHOR_NAME"),
getenv("GIT_AUTHOR_EMAIL"),
getenv("GIT_AUTHOR_DATE"));
getenv("GIT_AUTHOR_DATE"),
error_on_no_name);
}

const char *git_committer_info(void)
const char *git_committer_info(int error_on_no_name)
{
return get_ident(getenv("GIT_COMMITTER_NAME"),
getenv("GIT_COMMITTER_EMAIL"),
getenv("GIT_COMMITTER_DATE"));
getenv("GIT_COMMITTER_DATE"),
error_on_no_name);
}
6 changes: 3 additions & 3 deletions var.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ static const char var_usage[] = "git-var [-l | <variable>]";

struct git_var {
const char *name;
const char *(*read)(void);
const char *(*read)(int);
};
static struct git_var git_vars[] = {
{ "GIT_COMMITTER_IDENT", git_committer_info },
Expand All @@ -24,7 +24,7 @@ static void list_vars(void)
{
struct git_var *ptr;
for(ptr = git_vars; ptr->read; ptr++) {
printf("%s=%s\n", ptr->name, ptr->read());
printf("%s=%s\n", ptr->name, ptr->read(0));
}
}

Expand All @@ -35,7 +35,7 @@ static const char *read_var(const char *var)
val = NULL;
for(ptr = git_vars; ptr->read; ptr++) {
if (strcmp(var, ptr->name) == 0) {
val = ptr->read();
val = ptr->read(1);
break;
}
}
Expand Down

0 comments on commit 589e4f9

Please sign in to comment.