Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-02-19 07:31:05 +0300
committerJunio C Hamano <junkio@cox.net>2006-02-19 07:31:05 +0300
commit749be728d469e9a0acfdc020feff17c2da510083 (patch)
treebfaa47fb2b07de070b3bb5c58915faba3c3cb13d
parent925f9187697acfdbd7dbfe15e8420e1d3a671433 (diff)
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>
-rw-r--r--cache.h4
-rw-r--r--commit-tree.c4
-rw-r--r--ident.c47
-rw-r--r--var.c6
4 files changed, 32 insertions, 29 deletions
diff --git a/cache.h b/cache.h
index b5db01f28d..da73fb37c3 100644
--- a/cache.h
+++ b/cache.h
@@ -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;
diff --git a/commit-tree.c b/commit-tree.c
index b1c8dca48d..88871b022d 100644
--- a/commit-tree.c
+++ b/commit-tree.c
@@ -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)
diff --git a/ident.c b/ident.c
index 09d4d716ce..7c81fe8d8b 100644
--- a/ident.c
+++ b/ident.c
@@ -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)
/* 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)
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,
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,
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);
}
diff --git a/var.c b/var.c
index 59da56da0f..a57a33b81a 100644
--- a/var.c
+++ b/var.c
@@ -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)
{
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)
val = NULL;
for(ptr = git_vars; ptr->read; ptr++) {
if (strcmp(var, ptr->name) == 0) {
- val = ptr->read();
+ val = ptr->read(1);
break;
}
}