Add libbe.ui.util.user.get_fallback_fullname() and use pwd when possible.
authorW. Trevor King <wking@drexel.edu>
Thu, 14 Apr 2011 18:13:36 +0000 (14:13 -0400)
committerW. Trevor King <wking@drexel.edu>
Thu, 14 Apr 2011 18:13:41 +0000 (14:13 -0400)
This patch is based on Julien Muchembled's pwd suggestions.

libbe/storage/vcs/base.py
libbe/storage/vcs/git.py
libbe/ui/util/user.py

index aba6159da47b04e280997f55afde3a914443ba29..3ff6e7e1c2222df5a85f1e9c1046d9a9ae1d8faa 100644 (file)
@@ -537,7 +537,7 @@ class VCS (libbe.storage.base.VersionedStorage):
             self.user_id = self._vcs_get_user_id()
             if self.user_id == None:
                 # guess missing info
-                name = libbe.ui.util.user.get_fallback_username()
+                name = libbe.ui.util.user.get_fallback_fullname()
                 email = libbe.ui.util.user.get_fallback_email()
                 self.user_id = libbe.ui.util.user.create_user_id(name, email)
         return self.user_id
index 5c173033d12672135c5818d015297c50630fc5d6..6de1d5622c27239ec3de67b129b3d9ee09d8979a 100644 (file)
@@ -74,7 +74,7 @@ class Git(base.VCS):
         if name != '' or email != '': # got something!
             # guess missing info, if necessary
             if name == '':
-                name = _user.get_fallback_username()
+                name = _user.get_fallback_fullname()
             if email == '':
                 email = _user.get_fallback_email()
             return _user.create_user_id(name, email)
index 35665e4d366a39b6cc29b482a69e229d9f45735d..f2c7511d578966ad7096397b581525ca787cc634 100644 (file)
@@ -28,24 +28,46 @@ are human-readable tags refering to objects.
 
 try:
     from email.utils import formataddr, parseaddr
-except ImportErrror: # adjust to old python < 2.5
+except ImportErrror:  # adjust to old python < 2.5
     from email.Utils import formataddr, parseaddr
 import os
+try:
+    import pwd
+except ImportError:  # handle non-Unix systems
+    pwd = None
 import re
 from socket import gethostname
 
 import libbe
 import libbe.storage.util.config
 
+
 def get_fallback_username():
     """Return a username extracted from environmental variables.
     """
     name = None
-    for env in ["LOGNAME", "USERNAME"]:
+    for env in ['LOGNAME', 'USERNAME']:
+        if os.environ.has_key(env):
+            name = os.environ[env]
+            break
+    if name is None and pwd:
+        pw_ent = pwd.getpwuid(os.getuid())
+        name = pw_ent.pw_name
+    assert name is not None
+    return name
+
+def get_fallback_fullname():
+    """Return a full name extracted from environmental variables.
+    """
+    name = None
+    for env in ['FULLNAME']:
         if os.environ.has_key(env):
             name = os.environ[env]
             break
-    assert name != None
+    if name is None and pwd:
+        pw_ent = pwd.getpwuid(os.getuid())
+        name = pw_ent.pw_gecos.split(',', 1)[0]
+    assert name is not None
     return name
 
 def get_fallback_email():
@@ -122,7 +144,7 @@ def get_user_id(storage=None):
         user = storage.get_user_id()
         if user != None:
             return user
-    name = get_fallback_username()
+    name = get_fallback_fullname()
     email = get_fallback_email()
     user = create_user_id(name, email)
     return user