summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-02-01 22:41:13 +0000
committerZac Medico <zmedico@gentoo.org>2007-02-01 22:41:13 +0000
commitef5a5b15f7810d596cc40812275c19db0241e420 (patch)
tree021804ea2b16975761a85f16b524e2487af45cfc /pym
parent63028c3860101e4272b9e78cdd47f2c2eabe1b32 (diff)
downloadportage-ef5a5b15f7810d596cc40812275c19db0241e420.tar.gz
portage-ef5a5b15f7810d596cc40812275c19db0241e420.tar.bz2
portage-ef5a5b15f7810d596cc40812275c19db0241e420.zip
For bug #153109, replace our old chflags module with the one provided by the py-freebsd package. Thanks to Diego Pettenò <flameeyes@gentoo.org> for the initial patch.
svn path=/main/trunk/; revision=5870
Diffstat (limited to 'pym')
-rw-r--r--pym/portage/__init__.py41
1 files changed, 13 insertions, 28 deletions
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index 25c676f8e..bfdf79b0d 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -42,12 +42,12 @@ except ImportError, e:
sys.stderr.write(" "+str(e)+"\n\n");
raise
-try:
- # XXX: This should get renamed to bsd_chflags, I think.
- import chflags
- bsd_chflags = chflags
-except ImportError:
- bsd_chflags = None
+bsd_chflags = None
+if os.uname()[0] in ["FreeBSD"]:
+ try:
+ import freebsd as bsd_chflags
+ except ImportError:
+ pass
try:
from portage.cache.cache_errors import CacheError
@@ -3769,24 +3769,12 @@ def movefile(src,dest,newmtime=None,sstat=None,mysettings=None):
destexists=0
if bsd_chflags:
- # Check that we can actually unset schg etc flags...
- # Clear the flags on source and destination; we'll reinstate them after merging
if destexists and dstat.st_flags != 0:
- if bsd_chflags.lchflags(dest, 0) < 0:
- writemsg("!!! Couldn't clear flags on file being merged: \n ",
- noiselevel=-1)
- # We might have an immutable flag on the parent dir; save and clear.
- pflags=bsd_chflags.lgetflags(os.path.dirname(dest))
+ bsd_chflags.lchflags(dest, 0)
+ pflags = os.stat(os.path.dirname(dest)).st_flags
if pflags != 0:
bsd_chflags.lchflags(os.path.dirname(dest), 0)
- if (destexists and bsd_chflags.lhasproblems(dest) > 0) or \
- bsd_chflags.lhasproblems(os.path.dirname(dest)) > 0:
- # This is bad: we can't merge the file with these flags set.
- writemsg("!!! Can't merge file "+dest+" because of flags set\n",
- noiselevel=-1)
- return None
-
if destexists:
if stat.S_ISLNK(dstat[stat.ST_MODE]):
try:
@@ -3889,10 +3877,8 @@ def movefile(src,dest,newmtime=None,sstat=None,mysettings=None):
if bsd_chflags:
# Restore the flags we saved before moving
- if pflags and bsd_chflags.lchflags(os.path.dirname(dest), pflags) < 0:
- writemsg("!!! Couldn't restore flags (%s) on '%s'\n" % \
- (str(pflags), os.path.dirname(dest)), noiselevel=-1)
- return None
+ if pflags:
+ bsd_chflags.lchflags(os.path.dirname(dest), pflags)
return newmtime
@@ -7617,10 +7603,9 @@ class dblink:
if bsd_chflags:
# Save then clear flags on dest.
- dflags=bsd_chflags.lgetflags(mydest)
- if dflags != 0 and bsd_chflags.lchflags(mydest, 0) < 0:
- writemsg("!!! Couldn't clear flags on '"+mydest+"'.\n",
- noiselevel=-1)
+ dflags = os.lstat(mydest).st_flags
+ if dflags != 0:
+ bsd_chflags.lchflags(mydest, 0)
if not os.access(mydest, os.W_OK):
pkgstuff = pkgsplit(self.pkg)