ソースを参照

Only lookup entries in pwd once.

Jelmer Vernooij 2 年 前
コミット
a4238e5399
1 ファイル変更14 行追加6 行削除
  1. 14 6
      dulwich/repo.py

+ 14 - 6
dulwich/repo.py

@@ -136,25 +136,33 @@ class InvalidUserIdentity(Exception):
         self.identity = identity
 
 
+# TODO(jelmer): Cache?
 def _get_default_identity() -> Tuple[str, str]:
-    import getpass
     import socket
 
-    username = getpass.getuser()
+    for name in ('LOGNAME', 'USER', 'LNAME', 'USERNAME'):
+        username = os.environ.get(name)
+        if username:
+            break
+    else:
+        username = None
+
     try:
         import pwd
     except ImportError:
         fullname = None
     else:
         try:
-            gecos = pwd.getpwnam(username).pw_gecos  # type: ignore
-        except (KeyError, AttributeError):
+            entry = pwd.getpwuid(os.getuid())  # type: ignore
+        except KeyError:
             fullname = None
         else:
-            if gecos:
-                fullname = gecos.split(",")[0]
+            if getattr(entry, 'gecos', None):
+                fullname = entry.pw_gecos.split(",")[0]
             else:
                 fullname = None
+            if username is None:
+                username = entry.pw_name
     if not fullname:
         fullname = username
     email = os.environ.get("EMAIL")