diff options
author | Arfrever Frehtes Taifersar Arahesis <Arfrever@Gentoo.Org> | 2011-12-10 01:01:46 +0100 |
---|---|---|
committer | Arfrever Frehtes Taifersar Arahesis <Arfrever@Gentoo.Org> | 2011-12-10 01:01:46 +0100 |
commit | 4df21a13440d36a94e34ba421d1fb8bc77d35be0 (patch) | |
tree | 37376cc4e1850076bd9eb88109189577e4954c5d | |
parent | b5b277f1c03ceee6b00577a693e8c3f0b42d32aa (diff) | |
download | portage-4df21a13440d36a94e34ba421d1fb8bc77d35be0.tar.gz portage-4df21a13440d36a94e34ba421d1fb8bc77d35be0.tar.bz2 portage-4df21a13440d36a94e34ba421d1fb8bc77d35be0.zip |
portage.util.movefile._copyxattr(): Support usage of xattr module from
dev-python/pyxattr.
-rw-r--r-- | pym/portage/util/movefile.py | 45 |
1 files changed, 27 insertions, 18 deletions
diff --git a/pym/portage/util/movefile.py b/pym/portage/util/movefile.py index 9507d83a2..c777b24ba 100644 --- a/pym/portage/util/movefile.py +++ b/pym/portage/util/movefile.py @@ -28,27 +28,36 @@ if hasattr(_os, "getxattr"): for attr in _os.listxattr(src): _os.setxattr(dest, attr, _os.getxattr(src, attr)) else: - _devnull = open("/dev/null", "w") try: - subprocess.call(["getfattr", "--version"], stdout=_devnull) - subprocess.call(["setfattr", "--version"], stdout=_devnull) - _has_getfattr_and_setfattr = True - except OSError: - _has_getfattr_and_setfattr = False - _devnull.close() - if _has_getfattr_and_setfattr: + import xattr + except ImportError: + xattr = None + if xattr is not None: def _copyxattr(src, dest): - getfattr_process = subprocess.Popen(["getfattr", "-d", "--absolute-names", src], stdout=subprocess.PIPE) - getfattr_process.wait() - extended_attributes = getfattr_process.stdout.readlines() - getfattr_process.stdout.close() - if extended_attributes: - extended_attributes[0] = b"# file: " + _unicode_encode(dest) + b"\n" - setfattr_process = subprocess.Popen(["setfattr", "--restore=-"], stdin=subprocess.PIPE) - setfattr_process.communicate(input=b"".join(extended_attributes)) + for attr in xattr.list(src): + xattr.set(dest, attr, xattr.get(src, attr)) else: - def _copyxattr(src, dest): - pass + _devnull = open("/dev/null", "w") + try: + subprocess.call(["getfattr", "--version"], stdout=_devnull) + subprocess.call(["setfattr", "--version"], stdout=_devnull) + _has_getfattr_and_setfattr = True + except OSError: + _has_getfattr_and_setfattr = False + _devnull.close() + if _has_getfattr_and_setfattr: + def _copyxattr(src, dest): + getfattr_process = subprocess.Popen(["getfattr", "-d", "--absolute-names", src], stdout=subprocess.PIPE) + getfattr_process.wait() + extended_attributes = getfattr_process.stdout.readlines() + getfattr_process.stdout.close() + if extended_attributes: + extended_attributes[0] = b"# file: " + _unicode_encode(dest) + b"\n" + setfattr_process = subprocess.Popen(["setfattr", "--restore=-"], stdin=subprocess.PIPE) + setfattr_process.communicate(input=b"".join(extended_attributes)) + else: + def _copyxattr(src, dest): + pass def movefile(src, dest, newmtime=None, sstat=None, mysettings=None, hardlink_candidates=None, encoding=_encodings['fs']): |