Skip to content

Commit

Permalink
Merge branch 'jc/ident'
Browse files Browse the repository at this point in the history
* 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.
  • Loading branch information
Junio C Hamano committed Feb 21, 2006
2 parents 0f73e92 + e3b59a4 commit 6ead397
Show file tree
Hide file tree
Showing 8 changed files with 45 additions and 16 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
4 changes: 3 additions & 1 deletion git-am.sh
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
#!/bin/sh
#
#
# Copyright (c) 2005, 2006 Junio C Hamano

USAGE='[--signoff] [--dotest=<dir>] [--utf8] [--binary] [--3way] <mbox>
or, when resuming [--skip | --resolved]'
. git-sh-setup

git var GIT_COMMITTER_IDENT >/dev/null || exit

stop_here () {
echo "$1" >"$dotest/next"
exit 1
Expand Down
2 changes: 2 additions & 0 deletions git-applymbox.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
USAGE='[-u] [-k] [-q] [-m] (-c .dotest/<num> | mbox) [signoff]'
. git-sh-setup

git var GIT_COMMITTER_IDENT >/dev/null || exit

keep_subject= query_apply= continue= utf8= resume=t
while case "$#" in 0) break ;; esac
do
Expand Down
5 changes: 5 additions & 0 deletions git-merge.sh
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,8 @@ case "$#,$common,$no_commit" in
1,*,)
# We are not doing octopus, not fast forward, and have only
# one common. See if it is really trivial.
git var GIT_COMMITTER_IDENT >/dev/null || exit

echo "Trying really trivial in-index merge..."
git-update-index --refresh 2>/dev/null
if git-read-tree --trivial -m -u $common $head "$1" &&
Expand Down Expand Up @@ -179,6 +181,9 @@ case "$#,$common,$no_commit" in
;;
esac

# We are going to make a new commit.
git var GIT_COMMITTER_IDENT >/dev/null || exit

case "$use_strategies" in
'')
case "$#" in
Expand Down
3 changes: 3 additions & 0 deletions git-resolve.sh
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ case "$common" in
;;
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.
LF='
'
Expand Down
33 changes: 25 additions & 8 deletions ident.c
Original file line number Diff line number Diff line change
Expand Up @@ -156,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 @@ -168,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 @@ -187,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 6ead397

Please sign in to comment.