--- emerge	2004-06-12 11:04:58.000000000 +0900
+++ emerge.new	2004-06-12 11:04:01.119892440 +0900
@@ -749,12 +749,16 @@
 			#for --update, we want to rebuild an entire empty tree of dependencies, and then we won't merge was is already merged.
 			self.mydbapi["/"]=self.fakedbapi
 		else:
-			self.mydbapi["/"]=portage.db["/"]["vartree"].dbapi
+			self.mydbapi["/"]=portage.fakedbapi()
+			for pkg in portage.db["/"]["vartree"].getallcpv():
+				self.mydbapi["/"].cpv_inject(pkg)
 		if portage.root!="/":
 			if "empty" in myparams:
 				self.mydbapi[portage.root]=self.fakedbapi
 			else:
-				self.mydbapi[portage.root]=portage.db[portage.root]["vartree"].dbapi
+				self.mydbapi[portage.root]=portage.fakedbapi()
+				for pkg in portage.db[portage.root]["vartree"].getallcpv():
+					self.mydbapi[portage.root].cpv_inject(pkg)
 			
 		if "--usepkg" in myopts:
 			try:
@@ -823,9 +827,18 @@
 			merging=2
 		if merging==1:
 			mybigkey.append("merge")
+			self.mydbapi[myroot].cpv_inject(mykey)
+
 		else:
 			mybigkey.append("nomerge")
-			
+		
+		virts = portage.db[myroot]["porttree"].dbapi.aux_get(mykey, ["PROVIDE"])[0].split()
+		cp = portage.dep_getkey(mykey)
+		for virt in virts:
+			while cp in portage.virts[virt]:
+				portage.virts[virt].remove(cp)
+			portage.virts[virt].insert(0, cp)
+		
 		# whatever the case, we need to add the node to our digraph so
 		# that children can depend upon it.
 		self.digraph.addnode(string.join(mybigkey),myparent)