summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/git-commit-tree.txt5
-rw-r--r--Documentation/git-var.txt5
-rw-r--r--git-compat-util.h3
-rw-r--r--ident.c20
-rw-r--r--wrapper.c12
5 files changed, 20 insertions, 25 deletions
diff --git a/Documentation/git-commit-tree.txt b/Documentation/git-commit-tree.txt
index eb12b2dd91..eb8ee9999e 100644
--- a/Documentation/git-commit-tree.txt
+++ b/Documentation/git-commit-tree.txt
@@ -88,11 +88,6 @@ for one to be entered and terminated with ^D.
include::date-formats.txt[]
-Diagnostics
------------
-You don't exist. Go away!::
- The passwd(5) gecos field couldn't be read
-
Discussion
----------
diff --git a/Documentation/git-var.txt b/Documentation/git-var.txt
index 3f703e3775..67edf58689 100644
--- a/Documentation/git-var.txt
+++ b/Documentation/git-var.txt
@@ -59,11 +59,6 @@ ifdef::git-default-pager[]
The build you are using chose '{git-default-pager}' as the default.
endif::git-default-pager[]
-Diagnostics
------------
-You don't exist. Go away!::
- The passwd(5) gecos field couldn't be read
-
SEE ALSO
--------
linkgit:git-commit-tree[1]
diff --git a/git-compat-util.h b/git-compat-util.h
index ed11ad8119..5bd9ad7d2a 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -595,4 +595,7 @@ int rmdir_or_warn(const char *path);
*/
int remove_or_warn(unsigned int mode, const char *path);
+/* Get the passwd entry for the UID of the current process. */
+struct passwd *xgetpwuid_self(void);
+
#endif
diff --git a/ident.c b/ident.c
index 73a06a11fa..5aec073b96 100644
--- a/ident.c
+++ b/ident.c
@@ -100,12 +100,8 @@ static void copy_email(const struct passwd *pw, struct strbuf *email)
const char *ident_default_name(void)
{
- if (!git_default_name.len) {
- struct passwd *pw = getpwuid(getuid());
- if (!pw)
- die("You don't exist. Go away!");
- copy_gecos(pw, &git_default_name);
- }
+ if (!git_default_name.len)
+ copy_gecos(xgetpwuid_self(), &git_default_name);
return git_default_name.buf;
}
@@ -117,12 +113,8 @@ const char *ident_default_email(void)
if (email && email[0]) {
strbuf_addstr(&git_default_email, email);
user_ident_explicitly_given |= IDENT_MAIL_GIVEN;
- } else {
- struct passwd *pw = getpwuid(getuid());
- if (!pw)
- die("You don't exist. Go away!");
- copy_email(pw, &git_default_email);
- }
+ } else
+ copy_email(xgetpwuid_self(), &git_default_email);
}
return git_default_email.buf;
}
@@ -303,9 +295,7 @@ const char *fmt_ident(const char *name, const char *email,
fputs(env_hint, stderr);
die("empty ident %s <%s> not allowed", name, email);
}
- pw = getpwuid(getuid());
- if (!pw)
- die("You don't exist. Go away!");
+ pw = xgetpwuid_self();
name = pw->pw_name;
}
diff --git a/wrapper.c b/wrapper.c
index 6ccd0595f4..b5e33e49c7 100644
--- a/wrapper.c
+++ b/wrapper.c
@@ -402,3 +402,15 @@ int remove_or_warn(unsigned int mode, const char *file)
{
return S_ISGITLINK(mode) ? rmdir_or_warn(file) : unlink_or_warn(file);
}
+
+struct passwd *xgetpwuid_self(void)
+{
+ struct passwd *pw;
+
+ errno = 0;
+ pw = getpwuid(getuid());
+ if (!pw)
+ die(_("unable to look up current user in the passwd file: %s"),
+ errno ? strerror(errno) : _("no such user"));
+ return pw;
+}