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

(-)portage.tree/bin/emerge (-13 / +45 lines)
Lines 655-670 Link Here
655
		self.outdatedpackages=[]
655
		self.outdatedpackages=[]
656
		self.mydbapi={}
656
		self.mydbapi={}
657
		self.mydbapi["/"] = portage.fakedbapi(settings=settings)
657
		self.mydbapi["/"] = portage.fakedbapi(settings=settings)
658
		self.pkg_slots={"/" : {}}
659
		allcpv = self.trees["/"]["vartree"].getallcpv()
658
		if "empty" not in self.myparams or self.target_root != "/":
660
		if "empty" not in self.myparams or self.target_root != "/":
659
			for pkg in self.trees["/"]["vartree"].getallcpv():
661
			for pkg in allcpv:
660
				self.mydbapi["/"].cpv_inject(pkg)
662
				self.mydbapi["/"].cpv_inject(pkg)
663
		for pkg in allcpv:
664
			myslot = self.trees["/"]["vartree"].dbapi.aux_get(pkg, ["SLOT"])[0]
665
			mykey = portage.dep_getkey(pkg)
666
			if mykey in self.pkg_slots["/"]:
667
				self.pkg_slots["/"][mykey][myslot] = pkg
668
			else:
669
				self.pkg_slots["/"][mykey] = {myslot:pkg}
661
		if self.target_root != "/":
670
		if self.target_root != "/":
671
			self.pkg_slots[self.target_root] = {}
672
			allcpv = self.trees[self.target_root]["vartree"].getallcpv()
662
			self.mydbapi[self.target_root] = \
673
			self.mydbapi[self.target_root] = \
663
				portage.fakedbapi(settings=settings)
674
				portage.fakedbapi(settings=settings)
664
			if "empty" not in self.myparams:
675
			if "empty" not in self.myparams:
665
				for pkg in self.trees[self.target_root]["vartree"].getallcpv():
676
				for pkg in allcpv:
666
					self.mydbapi[self.target_root].cpv_inject(pkg)
677
					self.mydbapi[self.target_root].cpv_inject(pkg)
667
678
			for pkg in allcpv:
679
				myslot = self.trees[self.target_root]["vartree"].dbapi.aux_get(pkg, ["SLOT"])[0]
680
				mykey = portage.dep_getkey(pkg)
681
				if mykey in self.pkg_slots[self.target_root]:
682
					self.pkg_slots[self.target_root][mykey][myslot] = pkg
683
				else:
684
					self.pkg_slots[self.target_root][mykey] = {myslot:pkg}
668
		if "--usepkg" in self.myopts:
685
		if "--usepkg" in self.myopts:
669
			trees["/"]["bintree"].populate(
686
			trees["/"]["bintree"].populate(
670
				"--getbinpkg" in self.myopts, "--getbinpkgonly" in self.myopts)
687
				"--getbinpkg" in self.myopts, "--getbinpkgonly" in self.myopts)
Lines 719-732 Link Here
719
			    We need to check vardbapi as well as the current depgraph for it.
736
			    We need to check vardbapi as well as the current depgraph for it.
720
			    Blocks are fatal if buildpkgonly is set. """
737
			    Blocks are fatal if buildpkgonly is set. """
721
			if addme and "--buildpkgonly" not in self.myopts and myparent:
738
			if addme and "--buildpkgonly" not in self.myopts and myparent:
722
				parent_root = myparent.split()[1]
739
				mybigkey[1] = myparent.split()[1]
723
				if self.mydbapi[parent_root].match(mykey) or \
740
				self.digraph.addnode(" ".join(mybigkey), myparent, soft_dep=soft_dep)
724
					self.trees[parent_root]["vartree"].dbapi.match(mykey):
725
					mybigkey.append(myparent.split()[2])
726
					self.digraph.addnode(" ".join(mybigkey), myparent, soft_dep=soft_dep)
727
			return 1
741
			return 1
728
		else:
742
		else:
729
			mydbapi = self.trees[myroot][self.pkg_tree_map[mytype]].dbapi
743
			mydbapi = self.trees[myroot][self.pkg_tree_map[mytype]].dbapi
744
			myslot = mydbapi.aux_get(mykey, ["SLOT"])[0]
745
			depkey = portage.dep_getkey(mykey)
746
			if depkey in self.pkg_slots:
747
				self.pkg_slots[myroot][depkey][myslot] = mykey
748
			else:
749
				self.pkg_slots[myroot][depkey] = {myslot : mykey}
730
750
731
		if myuse is None:
751
		if myuse is None:
732
			self.pkgsettings[myroot].setcpv(mykey)
752
			self.pkgsettings[myroot].setcpv(mykey)
Lines 975-980 Link Here
975
					missing += 1
995
					missing += 1
976
					print "Missing binary for:",xs[2]
996
					print "Missing binary for:",xs[2]
977
997
998
		self.validate_blockers()
999
		
978
		# We're true here unless we are missing binaries.
1000
		# We're true here unless we are missing binaries.
979
		return (not missing,myfavorites)
1001
		return (not missing,myfavorites)
980
1002
Lines 1196-1201 Link Here
1196
			print "Exiting...",myparent
1218
			print "Exiting...",myparent
1197
		return 1
1219
		return 1
1198
1220
1221
	def validate_blockers(self):
1222
		all_blockers = [node for node in self.digraph.all_nodes()
1223
				if node.split()[0] == "blocks"]
1224
		for blocker in all_blockers:
1225
			mytype,myroot,mydep = blocker.split()
1226
			mykey = portage.dep_getkey(mydep)
1227
			if mykey not in self.pkg_slots[myroot] or \
1228
					not portage.match_from_list(mydep, \
1229
					self.pkg_slots[myroot][mykey].values()):
1230
				self.digraph.remove(blocker)
1199
1231
1200
	def altlist(self, reversed=False):
1232
	def altlist(self, reversed=False):
1201
		mygraph=self.digraph.copy()
1233
		mygraph=self.digraph.copy()
Lines 1264-1269 Link Here
1264
			except ValueError:
1296
			except ValueError:
1265
				missing_atoms.append(mydep)
1297
				missing_atoms.append(mydep)
1266
1298
1299
		self.validate_blockers()
1300
1267
		if world_problems:
1301
		if world_problems:
1268
			print "\n!!! Problems have been detected with your world file"
1302
			print "\n!!! Problems have been detected with your world file"
1269
			print "!!! Please run "+green("emaint --check world")+"\n"
1303
			print "!!! Please run "+green("emaint --check world")+"\n"
Lines 1442-1457 Link Here
1442
				addl=""+red("B")+"  "+fetch+"  "
1476
				addl=""+red("B")+"  "+fetch+"  "
1443
				resolved = self.trees[x[1]]["vartree"].resolve_key(x[2])
1477
				resolved = self.trees[x[1]]["vartree"].resolve_key(x[2])
1444
				print "["+x[0]+" "+addl+"]",red(resolved),
1478
				print "["+x[0]+" "+addl+"]",red(resolved),
1479
				block_parents = ", ".join(self.digraph.parent_nodes(" ".join(x)))
1445
				if resolved!=x[2]:
1480
				if resolved!=x[2]:
1446
					if x[3]:
1481
					if x[3]:
1447
						print red("(\""+x[2]+"\" is blocking "+x[3]+")")
1482
						print red("(\""+x[2]+"\" is blocking "+block_parents+")")
1448
					else:
1483
					else:
1449
						print red("(\""+x[2]+"\")")
1484
						print red("(\""+x[2]+"\")")
1450
				else:
1485
				else:
1451
					if x[3]:
1486
					print red("(is blocking "+block_parents+")")
1452
						print red("(is blocking "+x[3]+")")
1453
					else:
1454
						print
1455
			else:
1487
			else:
1456
				if x[0] != "binary" and \
1488
				if x[0] != "binary" and \
1457
					"fetch" in portdb.aux_get(
1489
					"fetch" in portdb.aux_get(

Return to bug 16365