def _setitem(self, cpv, values):
s = cpv.rfind("/")
fp = os.path.join(self.location,cpv[:s],".update.%i.%s" % (os.getpid(), cpv[s+1:]))
try: myf=open(fp, "w")
except IOError, ie:
if ie.errno == 2:
try:
self._ensure_dirs(cpv)
myf=open(fp,"w")
except (OSError, IOError),e:
raise cache_errors.CacheCorruption(cpv, e)
except OSError, e:
raise cache_errors.CacheCorruption(cpv, e)
for k, v in values.items():
if k != "_mtime_":
myf.writelines("%s=%s\n" % (k, v))
myf.close()
self._ensure_access(fp, mtime=values["_mtime_"])
#update written. now we move it.
new_fp = os.path.join(self.location,cpv)
try: os.rename(fp, new_fp)
except (OSError, IOError), e:
os.remove(fp)
raise cache_errors.CacheCorruption(cpv, e)
Is there a scoping error because myf is assigned in a try -> except block?
see below.
TB:
phases failed
Traceback (most recent call last):
File "./State.py", line 18, in ?
print pkg.data.get("RDEPEND","")
File "/home/skyfw/code/svn/savior/portage/ebuild/ebuild_src.py", line 91, in __getattr__
return super(package, self).__getattr__(key)
File "/home/skyfw/code/svn/savior/portage/package/metadata.py", line 53, in __getattr__
data = self._fetch_metadata()
File "/home/skyfw/code/svn/savior/portage/ebuild/ebuild_src.py", line 111, in _fetch_metadata
data = self._parent._update_metadata(self)
File "/home/skyfw/code/svn/savior/portage/ebuild/ebuild_src.py", line 147, in _update_metadata
self._cache[pkg.cpvstr] = mydata
File "/home/skyfw/code/svn/savior/portage/cache/template.py", line 62, in __setitem__
self._setitem(cpv, d)
File "/home/skyfw/code/svn/savior/portage/cache/metadata.py", line 86, in _setitem
flat_hash.database._setitem(self, cpv, values)
File "/home/skyfw/code/svn/savior/portage/cache/flat_hash.py", line 66, in _setitem
myf.writelines("%s=%s\n" % (k, v))
UnboundLocalError: local variable 'myf' referenced before assignment