From: Zac Medico Date: Wed, 26 Sep 2007 03:30:54 +0000 (-0000) Subject: Bug #192341 - Eliminate the dependency on py-freebsd by implementing X-Git-Tag: v2.2_pre1~778 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=c90c13bbbb1f6a4d7262c922b1413dadbf09eb5b;p=portage.git Bug #192341 - Eliminate the dependency on py-freebsd by implementing 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 --- diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index f9ef92c12..db377fda5 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -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