Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 229069
Collapse All | Expand All

(-)pym/_emerge/__init__.py (+47 lines)
Lines 20-25 Link Here
20
except KeyboardInterrupt:
20
except KeyboardInterrupt:
21
	sys.exit(1)
21
	sys.exit(1)
22
22
23
import gc
23
import os, stat
24
import os, stat
24
import platform
25
import platform
25
26
Lines 1773-1778 Link Here
1773
		self._cp_map = {}
1774
		self._cp_map = {}
1774
		self._cpv_map = {}
1775
		self._cpv_map = {}
1775
1776
1777
	def clear(self):
1778
		"""
1779
		Remove all packages.
1780
		"""
1781
		if self._cpv_map:
1782
			self._clear_cache()
1783
			self._cp_map.clear()
1784
			self._cpv_map.clear()
1785
1776
	def copy(self):
1786
	def copy(self):
1777
		obj = PackageVirtualDbapi(self.settings)
1787
		obj = PackageVirtualDbapi(self.settings)
1778
		obj._match_cache = self._match_cache.copy()
1788
		obj._match_cache = self._match_cache.copy()
Lines 3828-3833 Link Here
3828
			retlist.reverse()
3849
			retlist.reverse()
3829
		return retlist
3850
		return retlist
3830
3851
3852
	def break_refs(self, mergelist):
3853
		"""
3854
		Take a mergelist like that returned from self.altlist() and
3855
		break any references that lead back to the depgraph. This is
3856
		useful if you want to hold references to packages without
3857
		also holding the depgraph on the heap.
3858
		"""
3859
		for node in mergelist:
3860
			if not isinstance(node, Package):
3861
				continue
3862
3863
			# The visible packages cache has fullfilled it's purpose
3864
			# and it's no longer needed, so free the memory.
3865
			node.root_config.visible_pkgs.clear()
3866
3867
			if isinstance(node.root_config.trees["vartree"], FakeVartree):
3868
				# The FakeVartree references the _package_cache which
3869
				# references the depgraph. So that Package instances don't
3870
				# hold the depgraph and FakeVartree on the heap, replace
3871
				# the FakeVartree reference with the real vartree.
3872
				node.root_config.trees["vartree"] = \
3873
					self._trees_orig[node.root]["vartree"]
3874
3831
	def _resolve_conflicts(self):
3875
	def _resolve_conflicts(self):
3832
		if not self._complete_graph():
3876
		if not self._complete_graph():
3833
			raise self._unknown_internal_error()
3877
			raise self._unknown_internal_error()
Lines 8738-8744 Link Here
8738
				mtimedb.filename = None
8782
				mtimedb.filename = None
8739
				time.sleep(3) # allow the parent to have first fetch
8783
				time.sleep(3) # allow the parent to have first fetch
8740
			mymergelist = mydepgraph.altlist()
8784
			mymergelist = mydepgraph.altlist()
8785
			mydepgraph.break_refs(mymergelist)
8741
			del mydepgraph
8786
			del mydepgraph
8787
			clear_caches(trees)
8788
8742
			retval = mergetask.merge(mymergelist, favorites, mtimedb)
8789
			retval = mergetask.merge(mymergelist, favorites, mtimedb)
8743
			merge_count = mergetask.curval
8790
			merge_count = mergetask.curval
8744
		else:
8791
		else:
Lines 8779-8785 Link Here
8779
8826
8780
			pkglist = mydepgraph.altlist()
8827
			pkglist = mydepgraph.altlist()
8781
			mydepgraph.saveNomergeFavorites()
8828
			mydepgraph.saveNomergeFavorites()
8829
			mydepgraph.break_refs(pkglist)
8782
			del mydepgraph
8830
			del mydepgraph
8831
			clear_caches(trees)
8832
8783
			mergetask = MergeTask(settings, trees, myopts)
8833
			mergetask = MergeTask(settings, trees, myopts)
8784
			retval = mergetask.merge(pkglist, favorites, mtimedb)
8834
			retval = mergetask.merge(pkglist, favorites, mtimedb)
8785
			merge_count = mergetask.curval
8835
			merge_count = mergetask.curval
Lines 8903-8908 Link Here
8903
		settings = trees[myroot]["vartree"].settings
8953
		settings = trees[myroot]["vartree"].settings
8904
		settings.validate()
8954
		settings.validate()
8905
8955
8956
def clear_caches(trees):
8957
	for d in trees.itervalues():
8958
		d["porttree"].dbapi.melt()
8959
		d["porttree"].dbapi._aux_cache.clear()
8960
		d["bintree"].dbapi._aux_cache.clear()
8961
		d["bintree"].dbapi._clear_cache()
8962
	gc.collect()
8963
8906
def load_emerge_config(trees=None):
8964
def load_emerge_config(trees=None):
8907
	kwargs = {}
8965
	kwargs = {}
8908
	for k, envvar in (("config_root", "PORTAGE_CONFIGROOT"), ("target_root", "ROOT")):
8966
	for k, envvar in (("config_root", "PORTAGE_CONFIGROOT"), ("target_root", "ROOT")):

Return to bug 229069