summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-04-15 18:43:23 +0000
committerZac Medico <zmedico@gentoo.org>2009-04-15 18:43:23 +0000
commitccea8172b47c34eb64e298c1a66a8199423d5e07 (patch)
treea3261457ffaeb9d412edf8760e3ab50c11e9d3a9
parent75a69ebffffbb8f442e976f21846ed9f70c7d76d (diff)
downloadportage-ccea8172b47c34eb64e298c1a66a8199423d5e07.tar.gz
portage-ccea8172b47c34eb64e298c1a66a8199423d5e07.tar.bz2
portage-ccea8172b47c34eb64e298c1a66a8199423d5e07.zip
Bug #266211 - Handle ESTALE like ENOENT in fetch and locking code. Thanks to
Krzysztof Olędzki <ole+gentoo@ans.pl> for the initial patch. svn path=/main/trunk/; revision=13347
-rw-r--r--pym/portage/__init__.py17
-rw-r--r--pym/portage/locks.py4
2 files changed, 11 insertions, 10 deletions
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index 59f541058..0b65570c0 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -3924,7 +3924,7 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
try:
mysize = os.stat(myfile_path).st_size
except OSError, e:
- if e.errno != errno.ENOENT:
+ if e.errno not in (errno.ENOENT, errno.ESTALE):
raise
del e
mysize = 0
@@ -4036,7 +4036,7 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
try:
os.unlink(myfile_path)
except OSError, e:
- if e.errno != errno.ENOENT:
+ if e.errno not in (errno.ENOENT, errno.ESTALE):
raise
del e
os.symlink(readonly_file, myfile_path)
@@ -4051,14 +4051,14 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
" %(file)s\n" % {"file":myfile}))
break
except (IOError, OSError), e:
- if e.errno != errno.ENOENT:
+ if e.errno not in (errno.ENOENT, errno.ESTALE):
raise
del e
try:
mystat = os.stat(myfile_path)
except OSError, e:
- if e.errno != errno.ENOENT:
+ if e.errno not in (errno.ENOENT, errno.ESTALE):
raise
del e
else:
@@ -4202,7 +4202,7 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
try:
mysize = os.stat(myfile_path).st_size
except OSError, e:
- if e.errno != errno.ENOENT:
+ if e.errno not in (errno.ENOENT, errno.ESTALE):
raise
del e
mysize = 0
@@ -4226,7 +4226,7 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
try:
mystat = os.stat(myfile_path)
except OSError, e:
- if e.errno != errno.ENOENT:
+ if e.errno not in (errno.ENOENT, errno.ESTALE):
raise
del e
fetched = 0
@@ -4238,7 +4238,8 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
try:
os.unlink(myfile_path)
except OSError, e:
- if e.errno != errno.ENOENT:
+ if e.errno not in \
+ (errno.ENOENT, errno.ESTALE):
raise
del e
fetched = 0
@@ -4292,7 +4293,7 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
try:
mystat = os.stat(myfile_path)
except OSError, e:
- if e.errno != errno.ENOENT:
+ if e.errno not in (errno.ENOENT, errno.ESTALE):
raise
del e
fetched = 0
diff --git a/pym/portage/locks.py b/pym/portage/locks.py
index 36bc085bf..05a65644f 100644
--- a/pym/portage/locks.py
+++ b/pym/portage/locks.py
@@ -74,7 +74,7 @@ def lockfile(mypath, wantnewlockfile=0, unlinkfile=0,
if os.stat(lockfilename).st_gid != portage_gid:
os.chown(lockfilename, -1, portage_gid)
except OSError, e:
- if e.errno == errno.ENOENT: # No such file or directory
+ if e.errno in (errno.ENOENT, errno.ESTALE):
return lockfile(mypath,
wantnewlockfile=wantnewlockfile,
unlinkfile=unlinkfile, waiting_msg=waiting_msg,
@@ -164,7 +164,7 @@ def _fstat_nlink(fd):
try:
return os.fstat(fd).st_nlink
except EnvironmentError, e:
- if e.errno == errno.ENOENT:
+ if e.errno in (errno.ENOENT, errno.ESTALE):
# Some filesystems such as CIFS return
# ENOENT which means st_nlink == 0.
return 0