summaryrefslogtreecommitdiffstats
path: root/pym/portage_locks.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-03-27 04:33:23 +0000
committerZac Medico <zmedico@gentoo.org>2008-03-27 04:33:23 +0000
commitd622d5478c0cb651b5e561f0485ac9d4d200ef6c (patch)
treecdf8ee2f906f365486fc55f1e2c0f167cf67ca09 /pym/portage_locks.py
parent07f7ba64e55c52e14f8509fc519cb0648f5c6a55 (diff)
downloadportage-d622d5478c0cb651b5e561f0485ac9d4d200ef6c.tar.gz
portage-d622d5478c0cb651b5e561f0485ac9d4d200ef6c.tar.bz2
portage-d622d5478c0cb651b5e561f0485ac9d4d200ef6c.zip
Make --noreplace take precedence over --newuse, as suggested by wolf31o2.
(trunk r9512:9514) svn path=/main/branches/2.1.2/; revision=9515
Diffstat (limited to 'pym/portage_locks.py')
-rw-r--r--pym/portage_locks.py22
1 files changed, 19 insertions, 3 deletions
diff --git a/pym/portage_locks.py b/pym/portage_locks.py
index 9b17c60e3..340096a7c 100644
--- a/pym/portage_locks.py
+++ b/pym/portage_locks.py
@@ -79,7 +79,7 @@ def lockfile(mypath, wantnewlockfile=0, unlinkfile=0, waiting_msg=None):
except IOError, e:
if "errno" not in dir(e):
raise
- if e.errno == errno.EAGAIN:
+ if e.errno in (errno.EACCES, errno.EAGAIN):
# resource temp unavailable; eg, someone beat us to the lock.
if waiting_msg is None:
if isinstance(mypath, int):
@@ -111,7 +111,7 @@ def lockfile(mypath, wantnewlockfile=0, unlinkfile=0, waiting_msg=None):
if type(lockfilename) == types.StringType and \
- myfd != HARDLINK_FD and os.fstat(myfd).st_nlink == 0:
+ myfd != HARDLINK_FD and _fstat_nlink(myfd) == 0:
# The file was deleted on us... Keep trying to make one...
os.close(myfd)
portage_util.writemsg("lockfile recurse\n",1)
@@ -122,6 +122,22 @@ def lockfile(mypath, wantnewlockfile=0, unlinkfile=0, waiting_msg=None):
portage_util.writemsg(str((lockfilename,myfd,unlinkfile))+"\n",1)
return (lockfilename,myfd,unlinkfile,locking_method)
+def _fstat_nlink(fd):
+ """
+ @param fd: an open file descriptor
+ @type fd: Integer
+ @rtype: Integer
+ @return: the current number of hardlinks to the file
+ """
+ try:
+ return os.fstat(fd).st_nlink
+ except EnvironmentError, e:
+ if e.errno == errno.ENOENT:
+ # Some filesystems such as CIFS return
+ # ENOENT which means st_nlink == 0.
+ return 0
+ raise
+
def unlockfile(mytuple):
import fcntl
@@ -167,7 +183,7 @@ def unlockfile(mytuple):
# We won the lock, so there isn't competition for it.
# We can safely delete the file.
portage_util.writemsg("Got the lockfile...\n",1)
- if os.fstat(myfd).st_nlink == 1:
+ if _fstat_nlink(myfd) == 1:
os.unlink(lockfilename)
portage_util.writemsg("Unlinked lockfile...\n",1)
locking_method(myfd,fcntl.LOCK_UN)