Merged from trunk 4758:4763
authorFabian Groffen <grobian@gentoo.org>
Fri, 20 Oct 2006 08:01:22 +0000 (08:01 -0000)
committerFabian Groffen <grobian@gentoo.org>
Fri, 20 Oct 2006 08:01:22 +0000 (08:01 -0000)
Only call altlist() to validate blockers when necessary.

For userpriv, call setgroups with all groups that the portage user
belongs to (bug #137610).

Remove special case of --emptytree in depgraph.display().  Thanks to
Jason Stubbs for this patch from bug #152030.

Make dosed use sed -i instead of a temp file.  Thanks to Tim Cera for
this patch from bug #152017.

svn path=/main/branches/prefix/; revision=4765

bin/dosed
bin/emerge
pym/portage.py
pym/portage_data.py

index 637939b2c54f1a03fbc61daa72379463e58b6352..4118226dbf54a9277b5449b34f304306a2080e77 100755 (executable)
--- a/bin/dosed
+++ b/bin/dosed
@@ -9,9 +9,7 @@ for x in "$@" ; do
        y="${D}${x}"
        if [ -e "${y}" ] ; then
                if [ -f "${y}" ] ; then
-                       mysrc="${T}/${y##*/}"
-                       cp "${y}" "${mysrc}"
-                       sed -e "${mysed}" "${mysrc}" > "${y}"
+                       sed -i -e "${mysed}" "${y}"
                else
                        echo "${y} is not a regular file!"
                        exit 1
index 120cd87e69b0919ef63d2b8a96bd91403cc41016..72d447cb34d55a1d24e3146ee999d1964b4039ff 100755 (executable)
@@ -1468,7 +1468,8 @@ class depgraph:
                                                self.blocker_digraph.addnode(node, blocker)
                                self.digraph.remove(blocker)
                # Validate blockers that depend on merge order.
-               self.altlist()
+               if not self.blocker_digraph.empty():
+                       self.altlist()
 
        def altlist(self, reversed=False):
                mygraph=self.digraph.copy()
@@ -1845,11 +1846,9 @@ class depgraph:
                                #we need to use "--emptrytree" testing here rather than "empty" param testing because "empty"
                                #param is used for -u, where you still *do* want to see when something is being upgraded.
                                myoldbest=""
-                               if "--emptytree" not in self.myopts and \
-                                       self.trees[x[1]]["vartree"].exists_specific(x[2]):
+                               if self.trees[x[1]]["vartree"].exists_specific(pkg_key):
                                        addl="  "+yellow("R")+fetch+"  "
-                               elif "--emptytree" not in self.myopts and \
-                                       self.trees[x[1]]["vartree"].exists_specific_cat(x[2]):
+                               elif self.trees[x[1]]["vartree"].exists_specific_cat(pkg_key):
                                        mynewslot = mydbapi.aux_get(pkg_key, ["SLOT"])[0]
                                        myoldlist = self.trees[x[1]]["vartree"].dbapi.match(
                                                portage.pkgsplit(x[2])[0])
index 3d763c73fafa9c4bd7b6e7e80bc17cf9073d893c..76ad57b74b2ce068171c346527d5b45b7aa71ba1 100644 (file)
@@ -73,7 +73,7 @@ try:
          INCREMENTALS, EAPI, MISC_SH_BINARY
 
        from portage_data import ostype, lchown, userland, secpass, uid, wheelgid, \
-                                portage_uid, portage_gid
+                                portage_uid, portage_gid, userpriv_groups
        from portage_manifest import Manifest
 
        import portage_util
@@ -1928,7 +1928,7 @@ def spawn(mystring,mysettings,debug=0,free=0,droppriv=0,sesandbox=0,fd_pipes=Non
                 ("userpriv" in string.split(mysettings["RESTRICT"]))))
 
        if droppriv and not uid and portage_gid and portage_uid:
-               keywords.update({"uid":portage_uid,"gid":portage_gid,"groups":[portage_gid],"umask":002})
+               keywords.update({"uid":portage_uid,"gid":portage_gid,"groups":userpriv_groups,"umask":002})
 
        if not free:
                free=((droppriv and "usersandbox" not in features) or \
@@ -2259,7 +2259,7 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
                                                spawn_keywords.update({
                                                        "uid"    : portage_uid,
                                                        "gid"    : portage_gid,
-                                                       "groups" : [portage_gid],
+                                                       "groups" : userpriv_groups,
                                                        "umask"  : 002})
 
                                        try:
index 20b6767e71d58ccd68357e6262c2f93541451196..822b4c8beb8f059229d5fffbea362d57f83bfc04 100644 (file)
@@ -3,6 +3,8 @@
 # Distributed under the terms of the GNU General Public License v2
 # $Id: portage_data.py 4530 2006-09-25 21:16:32Z zmedico $
 
+if not hasattr(__builtins__, "set"):
+       from sets import Set as set
 
 import os,pwd,grp
 import portage_const
@@ -117,3 +119,10 @@ if (uid!=0) and (portage_gid not in os.getgroups()):
        writemsg(red("*** Please add this user to the portage group if you wish to use portage.\n"))
        writemsg("\n")
        portage_group_warning()
+
+userpriv_groups = [portage_gid]
+if secpass >= 2:
+       for g in grp.getgrall():
+               if "portage" in g[3]:
+                       userpriv_groups.append(g[2])
+       userpriv_groups = list(set(userpriv_groups))