From: Fabian Groffen Date: Fri, 17 Aug 2007 21:13:03 +0000 (-0000) Subject: Merged from trunk 7621:7639 X-Git-Url: http://git.tremily.us/gitweb.cgi?a=commitdiff_plain;h=fa1397776de75dff7cc3bd662372d2613c3078d1;p=portage.git Merged from trunk 7621:7639 | 7622 | Add some floating point vercmp cases. | | zmedico | | | 7625 | Always assign higher priority to dependencies on packages | | zmedico | that are being rebuilt (except when --emptytree is enabled | | | since all packages are merged in that case). This optimizes | | | merge order so that dependencies are rebuilt/updated as | | | soon as possible. | | 7627 | Combine 2 locations in depgraph.create() where nodes are | | zmedico | added to the digraph. This ensures that dependencies on | | | "rebuild" nodes always have their priority increased. | | 7628 | Fix existing_node logic inside depgraph.create(). | | zmedico | | | 7632 | make -f/-F distinction clearer | | SpankMan | | | 7636 | Make etc-update copy owner and group bits when it merges | | zmedico | config files. | | 7639 | For bug #189219, use pkgcmp() to sort versions in | | zmedico | selected/protected/omitted unmerge display. | svn path=/main/branches/prefix/; revision=7642 --- diff --git a/bin/etc-update b/bin/etc-update index 9c8188321..7fef4366e 100755 --- a/bin/etc-update +++ b/bin/etc-update @@ -388,8 +388,10 @@ Please select from the menu above (-1 to exit, losing this merge): " case ${my_input} in 1) echo "Replacing ${ofile} with ${mfile}" if [[ ${USERLAND:-GNU} == GNU ]]; then + chown --reference="${ofile}" "${mfile}" chmod --reference="${ofile}" "${mfile}" else + chown "$(stat -f %Su:%Sg "${ofile}")" "${mfile}" chmod $(stat -f %Mp%Lp "${ofile}") "${mfile}" fi mv ${mv_opts} ${mfile} ${ofile} diff --git a/man/emerge.1 b/man/emerge.1 index 55cafe066..9642c9efa 100644 --- a/man/emerge.1 +++ b/man/emerge.1 @@ -271,12 +271,11 @@ sure the result is what you expect. .TP .BR "\-\-fetchonly " (\fB\-f\fR) Instead of doing any package building, just perform fetches for all -packages (the main package as well as all dependencies). +packages (fetch things from SRC_URI based upon USE setting). .TP .BR "\-\-fetch\-all\-uri " (\fB\-F\fR) Instead of doing any package building, just perform fetches for all -packages (the main package as well as all dependencies), grabbing all potential -files. +packages (fetch everything in SRC_URI irregardless of USE setting). .TP .BR "\-\-getbinpkg " (\fB\-g\fR) Using the server and location defined in \fIPORTAGE_BINHOST\fR (see diff --git a/pym/emerge/__init__.py b/pym/emerge/__init__.py index b0c1bbfb0..5241e8350 100644 --- a/pym/emerge/__init__.py +++ b/pym/emerge/__init__.py @@ -1164,6 +1164,11 @@ class depgraph(object): #IUSE-aware emerge -> USE DEP aware depgraph #"no downgrade" emerge """ + + # unused parameters + rev_dep = False + myuse = None + mytype, myroot, mykey = mybigkey if mytype == "blocks": @@ -1207,33 +1212,6 @@ class depgraph(object): return 0 del e - # normal arg, not system or world - if arg and len(self._sets) == 1 and \ - "selective" not in self.myparams: - # For revdep-rebuild, dependencies on packages specified as - # arguments are given higher priority since the currently - # installed version has been rendered useless by ABI breakage. - # It's okay to increase the priority here even if the caller - # is not revdep-rebuild. - if priority.satisfied: - priority.rebuild = True - - existing_node = None - if addme: - existing_node = self.pkg_node_map[myroot].get(mykey) - if existing_node: - self._parent_child_digraph.add(existing_node, myparent) - if existing_node != myparent: - # Refuse to make a node depend on itself so that the we don't - # don't create a bogus circular dependency in self.altlist(). - if rev_dep and myparent: - self.digraph.addnode(myparent, existing_node, - priority=priority) - else: - self.digraph.addnode(existing_node, myparent, - priority=priority) - return 1 - if "--nodeps" not in self.myopts: self.spinner.update() @@ -1285,6 +1263,19 @@ class depgraph(object): mydbapi.aux_get(mykey, self._mydbapi_keys))) myuse = metadata["USE"].split() slot_atom = "%s:%s" % (portage.dep_getkey(mykey), metadata["SLOT"]) + if merging and \ + "empty" not in self.myparams and \ + vardbapi.match(slot_atom): + # Increase the priority of dependencies on packages that + # are being rebuilt. This optimizes merge order so that + # dependencies are rebuilt/updated as soon as possible, + # which is needed especially when emerge is called by + # revdep-rebuild since dependencies may be affected by ABI + # breakage that has rendered them useless. Don't adjust + # priority here when in "empty" mode since all packages + # are being merged in that case. + priority.rebuild = True + existing_node = self._slot_node_map[myroot].get( slot_atom, None) slot_collision = False @@ -1292,16 +1283,17 @@ class depgraph(object): e_type, myroot, e_cpv, e_status = existing_node if mykey == e_cpv: # The existing node can be reused. - self._parent_child_digraph.add(existing_node, myparent) - if rev_dep and myparent: - ptype, proot, pkey, pstatus = myparent - self.digraph.addnode(myparent, existing_node, - priority=priority) - else: + if existing_node != myparent: + # Refuse to make a node depend on itself so that + # we don't create a bogus circular dependency + # in self.altlist(). + self._parent_child_digraph.add(existing_node, myparent) self.digraph.addnode(existing_node, myparent, priority=priority) return 1 else: + if jbigkey in self._slot_collision_nodes: + return 1 # A slot collision has occurred. Sometimes this coincides # with unresolvable blockers, so the slot collision will be # shown later if there are no unresolvable blockers. @@ -4149,12 +4141,14 @@ def unmerge(settings, myopts, vartree, unmerge_action, unmerge_files, if "--quiet" not in myopts: portage.writemsg_stdout((mytype + ": ").rjust(14), noiselevel=-1) if pkgmap[x][mytype]: - for mypkg in pkgmap[x][mytype]: - mysplit=portage.catpkgsplit(mypkg) - if mysplit[3]=="r0": - myversion=mysplit[2] + sorted_pkgs = [portage.catpkgsplit(mypkg)[1:] \ + for mypkg in pkgmap[x][mytype]] + sorted_pkgs.sort(portage.pkgcmp) + for pn, ver, rev in sorted_pkgs: + if rev == "r0": + myversion = ver else: - myversion=mysplit[2]+"-"+mysplit[3] + myversion = ver + "-" + rev if mytype=="selected": portage.writemsg_stdout( colorize("UNMERGE_WARN", myversion + " "), noiselevel=-1) diff --git a/pym/portage/tests/versions/test_vercmp.py b/pym/portage/tests/versions/test_vercmp.py index d43c38e76..c25ed954b 100644 --- a/pym/portage/tests/versions/test_vercmp.py +++ b/pym/portage/tests/versions/test_vercmp.py @@ -21,7 +21,10 @@ class VerCmpTestCase(TestCase): pre < alpha < beta < rc < p -> test each of these, they are inductive (or should be..) """ tests = [ ( "4.0", "5.0"), ("5", "5.0"), ("1.0_pre2","1.0_p2"), - ("1.0_alpha2", "1.0_p2"),("1.0_alpha1", "1.0_beta1"),("1.0_beta3","1.0_rc3")] + ("1.0_alpha2", "1.0_p2"),("1.0_alpha1", "1.0_beta1"),("1.0_beta3","1.0_rc3"), + ("1.001000000000000000001", "1.001000000000000000002"), + ("1.00100000000", "1.0010000000000000001"), + ("1.01", "1.1")] for test in tests: self.failIf( vercmp( test[0], test[1]) >= 0, msg="%s > %s? Wrong!" % (test[0],test[1]))