Merged from trunk 7621:7639
authorFabian Groffen <grobian@gentoo.org>
Fri, 17 Aug 2007 21:13:03 +0000 (21:13 -0000)
committerFabian Groffen <grobian@gentoo.org>
Fri, 17 Aug 2007 21:13:03 +0000 (21:13 -0000)
   | 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

bin/etc-update
man/emerge.1
pym/emerge/__init__.py
pym/portage/tests/versions/test_vercmp.py

index 9c8188321010318db2fcb381f5ef32d1e958b48f..7fef4366ed9d4e6e44765e13d35b04d0d70889e2 100755 (executable)
@@ -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}
index 55cafe066d18159a2a3b6ab0b4db81c0f263c67c..9642c9efa04f0d38a5bab6d60b8ada674a74d901 100644 (file)
@@ -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 
index b0c1bbfb0a146b664f4d5ce925f60dfef835aaa5..5241e83507da1ee848919d50abfc5bd80a2c245d 100644 (file)
@@ -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)
index d43c38e76334ed9241e73d5217d95d707e2767fe..c25ed954b42ad75cd6999f19d91061f6b408dabd 100644 (file)
@@ -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]))