소스 검색

move code from borg.helpers.usergroup to borg.platform.posix

Emmo Emminghaus 6 년 전
부모
커밋
b997d5ba5b

+ 1 - 1
src/borg/archive.py

@@ -29,7 +29,7 @@ from .helpers import Manifest
 from .helpers import hardlinkable
 from .helpers import ChunkIteratorFileWrapper, open_item
 from .helpers import Error, IntegrityError, set_ec
-from .helpers import uid2user, user2uid, gid2group, group2gid
+from .platform import uid2user, user2uid, gid2group, group2gid
 from .helpers import parse_timestamp, to_localtime
 from .helpers import OutputTimestamp, format_timedelta, format_file_size, file_status, FileSize
 from .helpers import safe_encode, safe_decode, make_path_safe, remove_surrogates

+ 0 - 1
src/borg/helpers/__init__.py

@@ -16,7 +16,6 @@ from .parseformat import *  # NOQA
 from .process import *  # NOQA
 from .progress import *  # NOQA
 from .time import *  # NOQA
-from .usergroup import *  # NOQA
 from .yes import *  # NOQA
 
 from .msgpack import is_slow_msgpack, int_to_bigint, bigint_to_int, get_limited_unpacker

+ 2 - 3
src/borg/helpers/parseformat.py

@@ -19,7 +19,6 @@ logger = create_logger()
 from .errors import Error
 from .fs import get_keys_dir
 from .time import OutputTimestamp, format_time, to_localtime, safe_timestamp, safe_s
-from .usergroup import uid2user
 from .. import __version__ as borg_version
 from .. import __version_tuple__ as borg_version_tuple
 from ..constants import *  # NOQA
@@ -179,7 +178,7 @@ def format_line(format, data):
 
 def replace_placeholders(text):
     """Replace placeholders in text with their values."""
-    from ..platform import fqdn, hostname
+    from ..platform import fqdn, hostname, getosusername
     current_time = datetime.now(timezone.utc)
     data = {
         'pid': os.getpid(),
@@ -188,7 +187,7 @@ def replace_placeholders(text):
         'hostname': hostname,
         'now': DatetimeWrapper(current_time.astimezone(None)),
         'utcnow': DatetimeWrapper(current_time),
-        'user': uid2user(os.getuid(), os.getuid()),
+        'user': getosusername(),
         'uuid4': str(uuid.uuid4()),
         'borgversion': borg_version,
         'borgmajor': '%d' % borg_version_tuple[:1],

+ 0 - 50
src/borg/helpers/usergroup.py

@@ -1,50 +0,0 @@
-import grp
-import pwd
-from functools import lru_cache
-
-
-@lru_cache(maxsize=None)
-def uid2user(uid, default=None):
-    try:
-        return pwd.getpwuid(uid).pw_name
-    except KeyError:
-        return default
-
-
-@lru_cache(maxsize=None)
-def user2uid(user, default=None):
-    try:
-        return user and pwd.getpwnam(user).pw_uid
-    except KeyError:
-        return default
-
-
-@lru_cache(maxsize=None)
-def gid2group(gid, default=None):
-    try:
-        return grp.getgrgid(gid).gr_name
-    except KeyError:
-        return default
-
-
-@lru_cache(maxsize=None)
-def group2gid(group, default=None):
-    try:
-        return group and grp.getgrnam(group).gr_gid
-    except KeyError:
-        return default
-
-
-def posix_acl_use_stored_uid_gid(acl):
-    """Replace the user/group field with the stored uid/gid
-    """
-    from .parseformat import safe_decode, safe_encode
-    entries = []
-    for entry in safe_decode(acl).split('\n'):
-        if entry:
-            fields = entry.split(':')
-            if len(fields) == 4:
-                entries.append(':'.join([fields[0], fields[3], fields[2]]))
-            else:
-                entries.append(entry)
-    return safe_encode('\n'.join(entries))

+ 1 - 0
src/borg/platform/__init__.py

@@ -19,6 +19,7 @@ if not sys.platform.startswith(('win32', )):
     from .posix import process_alive, local_pid_alive
     # posix swidth implementation works for: linux, freebsd, darwin, openindiana, cygwin
     from .posix import swidth
+    from .posix import uid2user, user2uid, gid2group, group2gid, getosusername
 
 if sys.platform.startswith('linux'):  # pragma: linux only
     from .linux import API_VERSION as OS_API_VERSION

+ 1 - 1
src/borg/platform/darwin.pyx

@@ -2,7 +2,7 @@ import os
 
 from libc.stdint cimport uint32_t
 
-from ..helpers import user2uid, group2gid
+from .posix import user2uid, group2gid
 from ..helpers import safe_decode, safe_encode
 from .xattr import _listxattr_inner, _getxattr_inner, _setxattr_inner, split_string0
 

+ 1 - 1
src/borg/platform/freebsd.pyx

@@ -1,6 +1,6 @@
 import os
 
-from ..helpers import posix_acl_use_stored_uid_gid
+from .posix import posix_acl_use_stored_uid_gid
 from ..helpers import safe_encode, safe_decode
 from .xattr import _listxattr_inner, _getxattr_inner, _setxattr_inner, split_lstring
 

+ 2 - 2
src/borg/platform/linux.pyx

@@ -3,8 +3,8 @@ import re
 import stat
 import subprocess
 
-from ..helpers import posix_acl_use_stored_uid_gid
-from ..helpers import user2uid, group2gid
+from .posix import posix_acl_use_stored_uid_gid
+from .posix import user2uid, group2gid
 from ..helpers import safe_decode, safe_encode
 from .base import SyncFile as BaseSyncFile
 from .base import safe_fadvise

+ 58 - 0
src/borg/platform/posix.pyx

@@ -1,5 +1,10 @@
 import errno
 import os
+# begin moved form helpers/usergroup.py
+import grp
+import pwd
+from functools import lru_cache
+# end moved
 
 from libc.errno cimport errno as c_errno
 
@@ -61,3 +66,56 @@ def local_pid_alive(pid):
             return False
         # Any other error (eg. permissions) means that the process ID refers to a live process.
         return True
+
+# begin moved form helpers/usergroup.py
+
+@lru_cache(maxsize=None)
+def uid2user(uid, default=None):
+    try:
+        return pwd.getpwuid(uid).pw_name
+    except KeyError:
+        return default
+
+
+@lru_cache(maxsize=None)
+def user2uid(user, default=None):
+    try:
+        return user and pwd.getpwnam(user).pw_uid
+    except KeyError:
+        return default
+
+
+@lru_cache(maxsize=None)
+def gid2group(gid, default=None):
+    try:
+        return grp.getgrgid(gid).gr_name
+    except KeyError:
+        return default
+
+
+@lru_cache(maxsize=None)
+def group2gid(group, default=None):
+    try:
+        return group and grp.getgrnam(group).gr_gid
+    except KeyError:
+        return default
+
+
+def posix_acl_use_stored_uid_gid(acl):
+    """Replace the user/group field with the stored uid/gid
+    """
+    from ..helpers import safe_decode, safe_encode
+    entries = []
+    for entry in safe_decode(acl).split('\n'):
+        if entry:
+            fields = entry.split(':')
+            if len(fields) == 4:
+                entries.append(':'.join([fields[0], fields[3], fields[2]]))
+            else:
+                entries.append(entry)
+    return safe_encode('\n'.join(entries))
+#end moved
+
+def getosusername():
+    """Return the os user name."""
+    return uid2user(os.getuid(), os.getuid())