View | Details | Raw Unified
Collapse All | Expand All

(-) pym/portage.py (-9 / +34 lines)
 Lines 3367-3373    Link Here 
		return 1
		return 1
def dep_zapdeps(unreduced, reduced, myroot, use_binaries=0, trees=None,
def dep_zapdeps(unreduced, reduced, myroot, use_binaries=0, trees=None,
	return_all_deps=False):
	fakedb=None, return_all_deps=False):
	"""Takes an unreduced and reduced deplist and removes satisfied dependencies.
	"""Takes an unreduced and reduced deplist and removes satisfied dependencies.
	Returned deplist contains steps that must be taken to satisfy dependencies."""
	Returned deplist contains steps that must be taken to satisfy dependencies."""
	if trees is None:
	if trees is None:
 Lines 3384-3390    Link Here 
			if isinstance(dep, list):
			if isinstance(dep, list):
				unresolved += dep_zapdeps(dep, satisfied, myroot,
				unresolved += dep_zapdeps(dep, satisfied, myroot,
					use_binaries=use_binaries, trees=trees,
					use_binaries=use_binaries, trees=trees,
					return_all_deps=return_all_deps)
					fakedb=fakedb, return_all_deps=return_all_deps)
			elif not satisfied or return_all_deps:
			elif not satisfied or return_all_deps:
				unresolved.append(dep)
				unresolved.append(dep)
		return unresolved
		return unresolved
 Lines 3403-3409    Link Here 
	other = []
	other = []
	# Alias the trees we'll be checking availability against
	# Alias the trees we'll be checking availability against
	vardb = trees[myroot]["vartree"].dbapi
	if fakedb:
		vardb = fakedb
	else:
		vardb = trees[myroot]["vartree"].dbapi
	if use_binaries:
	if use_binaries:
		mydbapi = trees[myroot]["bintree"].dbapi
		mydbapi = trees[myroot]["bintree"].dbapi
	else:
	else:
 Lines 3414-3420    Link Here 
	for (dep, satisfied) in zip(deps, satisfieds):
	for (dep, satisfied) in zip(deps, satisfieds):
		if isinstance(dep, list):
		if isinstance(dep, list):
			atoms = dep_zapdeps(dep, satisfied, myroot,
			atoms = dep_zapdeps(dep, satisfied, myroot,
				use_binaries=use_binaries, trees=trees)
				use_binaries=use_binaries, trees=trees,
				fakedb=fakedb, return_all_deps=return_all_deps)
		else:
		else:
			atoms = [dep]
			atoms = [dep]
 Lines 3555-3562    Link Here 
	writemsg("mysplit:  %s\n" % (mysplit), 1)
	writemsg("mysplit:  %s\n" % (mysplit), 1)
	writemsg("mysplit2: %s\n" % (mysplit2), 1)
	writemsg("mysplit2: %s\n" % (mysplit2), 1)
	fakedb = None
	if return_all_deps:
		fakedb = mydbapi
	myzaps = dep_zapdeps(mysplit, mysplit2, myroot,
	myzaps = dep_zapdeps(mysplit, mysplit2, myroot,
		use_binaries=use_binaries, trees=trees, return_all_deps=return_all_deps)
		use_binaries=use_binaries, trees=trees,
		fakedb=fakedb, return_all_deps=return_all_deps)
	mylist = flatten(myzaps)
	mylist = flatten(myzaps)
	writemsg("myzaps:   %s\n" % (myzaps), 1)
	writemsg("myzaps:   %s\n" % (myzaps), 1)
	writemsg("mylist:   %s\n" % (mylist), 1)
	writemsg("mylist:   %s\n" % (mylist), 1)
 Lines 3998-4009    Link Here 
	def cpv_all(self):
	def cpv_all(self):
		return self.cpvdict.keys()
		return self.cpvdict.keys()
	def cpv_inject(self,mycpv):
	def cpv_inject(self, mycpv, myslot=None):
		"""Adds a cpv from the list of available packages."""
		"""Adds a cpv from the list of available packages."""
		mycp=cpv_getkey(mycpv)
		mycp=cpv_getkey(mycpv)
		self.cpvdict[mycpv]=1
		self.cpvdict[mycpv] = myslot
		if not self.cpdict.has_key(mycp):
		if myslot and mycp in self.cpdict:
			self.cpdict[mycp]=[]
			# If necessary, remove another package in the same SLOT.
			for cpv in self.cpdict[mycp]:
				if mycpv != cpv and myslot == self.cpvdict[cpv]:
					self.cpv_remove(cpv)
					break
		if mycp not in self.cpdict:
			self.cpdict[mycp] = []
		if not mycpv in self.cpdict[mycp]:
		if not mycpv in self.cpdict[mycp]:
			self.cpdict[mycp].append(mycpv)
			self.cpdict[mycp].append(mycpv)
 Lines 4029-4034    Link Here 
		if not len(self.cpdict[mycp]):
		if not len(self.cpdict[mycp]):
			del self.cpdict[mycp]
			del self.cpdict[mycp]
	def aux_get(self, mycpv, wants):
		if not self.cpv_exists(mycpv):
			raise KeyError(mycpv)
		values = []
		for x in wants:
			if x == "SLOT":
				values.append(self.cpvdict[mycpv])
			else:
				values.append("")
		return values
class bindbapi(fakedbapi):
class bindbapi(fakedbapi):
	def __init__(self, mybintree=None, settings=None):
	def __init__(self, mybintree=None, settings=None):
		self.bintree = mybintree
		self.bintree = mybintree
(-) bin/emerge (-30 / +8 lines)
 Lines 654-687    Link Here 
		self.outdatedpackages=[]
		self.outdatedpackages=[]
		self.mydbapi={}
		self.mydbapi={}
		self.mydbapi["/"] = portage.fakedbapi(settings=settings)
		self.mydbapi["/"] = portage.fakedbapi(settings=settings)
		self.pkg_slots={"/" : {}}
		allcpv = self.trees["/"]["vartree"].getallcpv()
		allcpv = self.trees["/"]["vartree"].getallcpv()
		if "empty" not in self.myparams or self.target_root != "/":
		if "empty" not in self.myparams or self.target_root != "/":
			for pkg in allcpv:
			for pkg in allcpv:
				self.mydbapi["/"].cpv_inject(pkg)
				myslot = self.trees["/"]["vartree"].dbapi.aux_get(pkg, ["SLOT"])[0]
		for pkg in allcpv:
				self.mydbapi["/"].cpv_inject(pkg, myslot=myslot)
			myslot = self.trees["/"]["vartree"].dbapi.aux_get(pkg, ["SLOT"])[0]
			mykey = portage.dep_getkey(pkg)
			if mykey in self.pkg_slots["/"]:
				self.pkg_slots["/"][mykey][myslot] = pkg
			else:
				self.pkg_slots["/"][mykey] = {myslot:pkg}
		if self.target_root != "/":
		if self.target_root != "/":
			self.pkg_slots[self.target_root] = {}
			allcpv = self.trees[self.target_root]["vartree"].getallcpv()
			allcpv = self.trees[self.target_root]["vartree"].getallcpv()
			self.mydbapi[self.target_root] = \
			self.mydbapi[self.target_root] = \
				portage.fakedbapi(settings=settings)
				portage.fakedbapi(settings=settings)
			if "empty" not in self.myparams:
			if "empty" not in self.myparams:
				for pkg in allcpv:
				for pkg in allcpv:
					self.mydbapi[self.target_root].cpv_inject(pkg)
					myslot = self.trees[self.target_root]["vartree"].dbapi.aux_get(pkg, ["SLOT"])[0]
			for pkg in allcpv:
					self.mydbapi[self.target_root].cpv_inject(pkg, myslot=myslot)
				myslot = self.trees[self.target_root]["vartree"].dbapi.aux_get(
					pkg, ["SLOT"])[0]
				mykey = portage.dep_getkey(pkg)
				if mykey in self.pkg_slots[self.target_root]:
					self.pkg_slots[self.target_root][mykey][myslot] = pkg
				else:
					self.pkg_slots[self.target_root][mykey] = {myslot:pkg}
		if "--usepkg" in self.myopts:
		if "--usepkg" in self.myopts:
			trees["/"]["bintree"].populate(
			trees["/"]["bintree"].populate(
				"--getbinpkg" in self.myopts, "--getbinpkgonly" in self.myopts)
				"--getbinpkg" in self.myopts, "--getbinpkgonly" in self.myopts)
 Lines 750-762    Link Here 
			return 1
			return 1
		else:
		else:
			mydbapi = self.trees[myroot][self.pkg_tree_map[mytype]].dbapi
			mydbapi = self.trees[myroot][self.pkg_tree_map[mytype]].dbapi
			if addme:
				myslot = mydbapi.aux_get(mykey, ["SLOT"])[0]
				depkey = portage.dep_getkey(mykey)
				if depkey in self.pkg_slots:
					self.pkg_slots[myroot][depkey][myslot] = mykey
				else:
					self.pkg_slots[myroot][depkey] = {myslot : mykey}
		if myuse is None:
		if myuse is None:
			self.pkgsettings[myroot].setcpv(mykey)
			self.pkgsettings[myroot].setcpv(mykey)
 Lines 1082-1088    Link Here 
			if p_status == "merge":
			if p_status == "merge":
				""" This fakedbapi data is used in dep_check calls to determine
				""" This fakedbapi data is used in dep_check calls to determine
				satisfied deps via dep_wordreduce"""
				satisfied deps via dep_wordreduce"""
				self.mydbapi[p_root].cpv_inject(p_key)
				myslot = self.trees[p_root][self.pkg_tree_map[p_type]].dbapi.aux_get(p_key, ["SLOT"])[0]
				self.mydbapi[p_root].cpv_inject(p_key, myslot=myslot)
				# Update old-style virtuals if this package provides any.
				# Update old-style virtuals if this package provides any.
				# These are needed for dep_virtual calls inside dep_check.
				# These are needed for dep_virtual calls inside dep_check.
 Lines 1255-1263    Link Here 
			dep_virtual calls inside dep_check."""
			dep_virtual calls inside dep_check."""
			mykey = portage.dep_getkey(mydep)
			mykey = portage.dep_getkey(mydep)
			valid = False
			valid = False
			pkgs = self.pkg_slots[myroot].get(mykey, None)
			if portage.match_from_list(mydep,
			if pkgs and portage.match_from_list(mydep,
				self.mydbapi[myroot].cp_list(mykey)):
				[pkgs[myslot] for myslot in pkgs]):
				valid = True
				valid = True
			if not valid:
			if not valid:
				self.digraph.remove(blocker)
				self.digraph.remove(blocker)