mirror of
https://github.com/git/git.git
synced 2024-11-05 08:47:56 +01:00
Merge branch 'jc/ident'
* jc/ident: Keep Porcelainish from failing by broken ident after making changes. Delay "empty ident" errors until they really matter. Make "empty ident" error message a bit more helpful.
This commit is contained in:
commit
6ead3972f5
8 changed files with 45 additions and 16 deletions
4
cache.h
4
cache.h
|
@ -246,8 +246,8 @@ void datestamp(char *buf, int bufsize);
|
||||||
unsigned long approxidate(const char *);
|
unsigned long approxidate(const char *);
|
||||||
|
|
||||||
extern int setup_ident(void);
|
extern int setup_ident(void);
|
||||||
extern const char *git_author_info(void);
|
extern const char *git_author_info(int);
|
||||||
extern const char *git_committer_info(void);
|
extern const char *git_committer_info(int);
|
||||||
|
|
||||||
struct checkout {
|
struct checkout {
|
||||||
const char *base_dir;
|
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]));
|
add_buffer(&buffer, &size, "parent %s\n", sha1_to_hex(parent_sha1[i]));
|
||||||
|
|
||||||
/* Person/date information */
|
/* Person/date information */
|
||||||
add_buffer(&buffer, &size, "author %s\n", git_author_info());
|
add_buffer(&buffer, &size, "author %s\n", git_author_info(1));
|
||||||
add_buffer(&buffer, &size, "committer %s\n\n", git_committer_info());
|
add_buffer(&buffer, &size, "committer %s\n\n", git_committer_info(1));
|
||||||
|
|
||||||
/* And add the comment */
|
/* And add the comment */
|
||||||
while (fgets(comment, sizeof(comment), stdin) != NULL)
|
while (fgets(comment, sizeof(comment), stdin) != NULL)
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#
|
#
|
||||||
#
|
# Copyright (c) 2005, 2006 Junio C Hamano
|
||||||
|
|
||||||
USAGE='[--signoff] [--dotest=<dir>] [--utf8] [--binary] [--3way] <mbox>
|
USAGE='[--signoff] [--dotest=<dir>] [--utf8] [--binary] [--3way] <mbox>
|
||||||
or, when resuming [--skip | --resolved]'
|
or, when resuming [--skip | --resolved]'
|
||||||
. git-sh-setup
|
. git-sh-setup
|
||||||
|
|
||||||
|
git var GIT_COMMITTER_IDENT >/dev/null || exit
|
||||||
|
|
||||||
stop_here () {
|
stop_here () {
|
||||||
echo "$1" >"$dotest/next"
|
echo "$1" >"$dotest/next"
|
||||||
exit 1
|
exit 1
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
USAGE='[-u] [-k] [-q] [-m] (-c .dotest/<num> | mbox) [signoff]'
|
USAGE='[-u] [-k] [-q] [-m] (-c .dotest/<num> | mbox) [signoff]'
|
||||||
. git-sh-setup
|
. git-sh-setup
|
||||||
|
|
||||||
|
git var GIT_COMMITTER_IDENT >/dev/null || exit
|
||||||
|
|
||||||
keep_subject= query_apply= continue= utf8= resume=t
|
keep_subject= query_apply= continue= utf8= resume=t
|
||||||
while case "$#" in 0) break ;; esac
|
while case "$#" in 0) break ;; esac
|
||||||
do
|
do
|
||||||
|
|
|
@ -142,6 +142,8 @@ case "$#,$common,$no_commit" in
|
||||||
1,*,)
|
1,*,)
|
||||||
# We are not doing octopus, not fast forward, and have only
|
# We are not doing octopus, not fast forward, and have only
|
||||||
# one common. See if it is really trivial.
|
# one common. See if it is really trivial.
|
||||||
|
git var GIT_COMMITTER_IDENT >/dev/null || exit
|
||||||
|
|
||||||
echo "Trying really trivial in-index merge..."
|
echo "Trying really trivial in-index merge..."
|
||||||
git-update-index --refresh 2>/dev/null
|
git-update-index --refresh 2>/dev/null
|
||||||
if git-read-tree --trivial -m -u $common $head "$1" &&
|
if git-read-tree --trivial -m -u $common $head "$1" &&
|
||||||
|
@ -179,6 +181,9 @@ case "$#,$common,$no_commit" in
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# We are going to make a new commit.
|
||||||
|
git var GIT_COMMITTER_IDENT >/dev/null || exit
|
||||||
|
|
||||||
case "$use_strategies" in
|
case "$use_strategies" in
|
||||||
'')
|
'')
|
||||||
case "$#" in
|
case "$#" in
|
||||||
|
|
|
@ -50,6 +50,9 @@ case "$common" in
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# We are going to make a new commit.
|
||||||
|
git var GIT_COMMITTER_IDENT >/dev/null || exit
|
||||||
|
|
||||||
# Find an optimum merge base if there are more than one candidates.
|
# Find an optimum merge base if there are more than one candidates.
|
||||||
LF='
|
LF='
|
||||||
'
|
'
|
||||||
|
|
33
ident.c
33
ident.c
|
@ -156,8 +156,18 @@ static int copy(char *buf, int size, int offset, const char *src)
|
||||||
return offset;
|
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,
|
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];
|
static char buffer[1000];
|
||||||
char date[50];
|
char date[50];
|
||||||
|
@ -168,9 +178,14 @@ static const char *get_ident(const char *name, const char *email,
|
||||||
if (!email)
|
if (!email)
|
||||||
email = git_default_email;
|
email = git_default_email;
|
||||||
|
|
||||||
if (!*name || !*email)
|
if (!*name) {
|
||||||
die("empty ident %s <%s> not allowed",
|
if (name == git_default_name && env_hint) {
|
||||||
name, email);
|
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);
|
strcpy(date, git_default_date);
|
||||||
if (date_str)
|
if (date_str)
|
||||||
|
@ -187,16 +202,18 @@ static const char *get_ident(const char *name, const char *email,
|
||||||
return buffer;
|
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"),
|
return get_ident(getenv("GIT_AUTHOR_NAME"),
|
||||||
getenv("GIT_AUTHOR_EMAIL"),
|
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"),
|
return get_ident(getenv("GIT_COMMITTER_NAME"),
|
||||||
getenv("GIT_COMMITTER_EMAIL"),
|
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 {
|
struct git_var {
|
||||||
const char *name;
|
const char *name;
|
||||||
const char *(*read)(void);
|
const char *(*read)(int);
|
||||||
};
|
};
|
||||||
static struct git_var git_vars[] = {
|
static struct git_var git_vars[] = {
|
||||||
{ "GIT_COMMITTER_IDENT", git_committer_info },
|
{ "GIT_COMMITTER_IDENT", git_committer_info },
|
||||||
|
@ -24,7 +24,7 @@ static void list_vars(void)
|
||||||
{
|
{
|
||||||
struct git_var *ptr;
|
struct git_var *ptr;
|
||||||
for(ptr = git_vars; ptr->read; 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;
|
val = NULL;
|
||||||
for(ptr = git_vars; ptr->read; ptr++) {
|
for(ptr = git_vars; ptr->read; ptr++) {
|
||||||
if (strcmp(var, ptr->name) == 0) {
|
if (strcmp(var, ptr->name) == 0) {
|
||||||
val = ptr->read();
|
val = ptr->read(1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue