Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
commit: Show committer if automatic
Browse files Browse the repository at this point in the history
To warn the user in case he/she might be using an unintended
committer identity.

Signed-off-by: Santi Béjar <sbejar@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
sbejar authored and gitster committed May 6, 2008
1 parent e83dbe8 commit bb1ae3f
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 3 deletions.
19 changes: 16 additions & 3 deletions builtin-commit.c
Expand Up @@ -446,6 +446,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix)
FILE *fp;
const char *hook_arg1 = NULL;
const char *hook_arg2 = NULL;
int ident_shown = 0;

if (!no_verify && run_hook(index_file, "pre-commit", NULL))
return 0;
Expand Down Expand Up @@ -527,6 +528,8 @@ static int prepare_to_commit(const char *index_file, const char *prefix)

determine_author_info();

/* This checks if committer ident is explicitly given */
git_committer_info(0);
if (use_editor) {
char *author_ident;
const char *committer_ident;
Expand Down Expand Up @@ -558,12 +561,22 @@ static int prepare_to_commit(const char *index_file, const char *prefix)
getenv("GIT_COMMITTER_EMAIL"));
if (strcmp(author_ident, committer_ident))
fprintf(fp,
"#\n"
"# Author: %s\n"
"#\n",
"%s"
"# Author: %s\n",
ident_shown++ ? "" : "#\n",
author_ident);
free(author_ident);

if (!user_ident_explicitly_given)
fprintf(fp,
"%s"
"# Committer: %s\n",
ident_shown++ ? "" : "#\n",
committer_ident);

if (ident_shown)
fprintf(fp, "#\n");

saved_color_setting = wt_status_use_color;
wt_status_use_color = 0;
commitable = run_status(fp, index_file, prefix, 1);
Expand Down
1 change: 1 addition & 0 deletions cache.h
Expand Up @@ -719,6 +719,7 @@ extern int config_error_nonbool(const char *);
#define MAX_GITNAME (1000)
extern char git_default_email[MAX_GITNAME];
extern char git_default_name[MAX_GITNAME];
extern int user_ident_explicitly_given;

extern const char *git_commit_encoding;
extern const char *git_log_output_encoding;
Expand Down
4 changes: 4 additions & 0 deletions config.c
Expand Up @@ -443,13 +443,17 @@ int git_default_config(const char *var, const char *value)
if (!value)
return config_error_nonbool(var);
strlcpy(git_default_name, value, sizeof(git_default_name));
if (git_default_email[0])
user_ident_explicitly_given = 1;
return 0;
}

if (!strcmp(var, "user.email")) {
if (!value)
return config_error_nonbool(var);
strlcpy(git_default_email, value, sizeof(git_default_email));
if (git_default_name[0])
user_ident_explicitly_given = 1;
return 0;
}

Expand Down
1 change: 1 addition & 0 deletions environment.c
Expand Up @@ -11,6 +11,7 @@

char git_default_email[MAX_GITNAME];
char git_default_name[MAX_GITNAME];
int user_ident_explicitly_given;
int trust_executable_bit = 1;
int quote_path_fully = 1;
int has_symlinks = 1;
Expand Down
3 changes: 3 additions & 0 deletions ident.c
Expand Up @@ -250,6 +250,9 @@ const char *git_author_info(int flag)

const char *git_committer_info(int flag)
{
if (getenv("GIT_COMMITTER_NAME") &&
getenv("GIT_COMMITTER_EMAIL"))
user_ident_explicitly_given = 1;
return fmt_ident(getenv("GIT_COMMITTER_NAME"),
getenv("GIT_COMMITTER_EMAIL"),
getenv("GIT_COMMITTER_DATE"),
Expand Down
15 changes: 15 additions & 0 deletions t/t7502-commit.sh
Expand Up @@ -166,6 +166,21 @@ test_expect_success 'author different from committer' '
test_cmp expect actual
'

sed -i '$d' expect
echo "# Committer:
#" >> expect
unset GIT_COMMITTER_EMAIL
unset GIT_COMMITTER_NAME

test_expect_success 'committer is automatic' '
echo >>negative &&
git commit -e -m "sample"
head -n 8 .git/COMMIT_EDITMSG | \
sed "s/^# Committer: .*/# Committer:/" >actual &&
test_cmp expect actual
'

pwd=`pwd`
cat >> .git/FAKE_EDITOR << EOF
#! /bin/sh
Expand Down

0 comments on commit bb1ae3f

Please sign in to comment.