зеркало из https://github.com/microsoft/git.git
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>
This commit is contained in:
Родитель
2fb4a21074
Коммит
589e4f93c7
4
cache.h
4
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;
|
||||
|
|
|
@ -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
47
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);
|
||||
}
|
||||
|
|
6
var.c
6
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;
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче