Bug #192341 - Eliminate the dependency on py-freebsd by implementing
authorZac Medico <zmedico@gentoo.org>
Wed, 26 Sep 2007 03:30:54 +0000 (03:30 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 26 Sep 2007 03:30:54 +0000 (03:30 -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.

svn path=/main/trunk/; revision=7808

pym/portage/__init__.py

index f9ef92c123e061c782acdf30c23e688704649040..db377fda56e64193c7e438b18fcfac1ee3539139 100644 (file)
@@ -42,10 +42,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 portage.cache.cache_errors import CacheError