All pastes #28576 Raw Edit

Anonymous

public text v1 · immutable
#28576 ·published 2005-11-13 15:52 UTC
rendered paste body
	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