Browse Source

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>
maint
Junio C Hamano 19 years ago
parent
commit
589e4f93c7
  1. 4
      cache.h
  2. 4
      commit-tree.c
  3. 47
      ident.c
  4. 6
      var.c

4
cache.h

@ -246,8 +246,8 @@ void datestamp(char *buf, int bufsize); @@ -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;

4
commit-tree.c

@ -118,8 +118,8 @@ int main(int argc, char **argv) @@ -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)

47
ident.c

@ -46,15 +46,6 @@ static void copy_gecos(struct passwd *w, char *name, int sz) @@ -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;
@ -66,11 +57,6 @@ int setup_ident(void) @@ -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)
@ -170,8 +156,18 @@ static int copy(char *buf, int size, int offset, const char *src) @@ -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];
@ -182,9 +178,14 @@ static const char *get_ident(const char *name, const char *email, @@ -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)
@ -201,16 +202,18 @@ static const char *get_ident(const char *name, const char *email, @@ -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
var.c

@ -12,7 +12,7 @@ static const char var_usage[] = "git-var [-l | <variable>]"; @@ -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 },
@ -24,7 +24,7 @@ static void list_vars(void) @@ -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));
}
}

@ -35,7 +35,7 @@ static const char *read_var(const char *var) @@ -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;
}
}

Loading…
Cancel
Save