Bug #192341 - Eliminate the dependency on py-freebsd by implementing
authorZac Medico <zmedico@gentoo.org>
Wed, 26 Sep 2007 04:49:11 +0000 (04:49 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 26 Sep 2007 04:49:11 +0000 (04:49 -0000)
it's chflags() and lchflags() functions as wrappers around the
chflags command (which should always be available in any case). The
functions are only called when merging/unmerging files that actually
have flags set so the performance difference should be negligible.
(trunk r7808)

svn path=/main/branches/2.1.2/; revision=7833

pym/portage.py

index 39ecb0dab8420cc15a23c59d8bb3acba710746ba..c7766e7c087676b98015edc20a177940e7a81f48 100644 (file)
@@ -44,10 +44,23 @@ except ImportError, e:
 
 bsd_chflags = None
 if os.uname()[0] in ["FreeBSD"]:
-       try:
-               import freebsd as bsd_chflags
-       except ImportError:
+       def bsd_chflags():
                pass
+       def _chflags(path, flags, opts=""):
+               cmd = "chflags %s %o '%s'" % (opts, flags, path)
+               status, output = commands.getstatusoutput(cmd)
+               retval = os.WEXITSTATUS(status)
+               if os.WIFEXITED(status) and retval == os.EX_OK:
+                       return
+               e = OSError(retval, output)
+               e.errno = retval
+               e.filename = path
+               e.message = output
+               raise e
+       def _lchflags(path, flags):
+               return _chflags(path, flags, opts="-h")
+       bsd_chflags.chflags = _chflags
+       bsd_chflags.lchflags = _lchflags
 
 try:
        from cache.cache_errors import CacheError