Merged from trunk -r13238:13242
authorFabian Groffen <grobian@gentoo.org>
Sun, 29 Mar 2009 07:48:52 +0000 (07:48 -0000)
committerFabian Groffen <grobian@gentoo.org>
Sun, 29 Mar 2009 07:48:52 +0000 (07:48 -0000)
   | 13239   | Add (x of y ) package counter in the "Installing" message,   |
   | zmedico | similar to the counter show in the "Emerging" message.       |
   |         | Thanks to Ned Ludd <solar@g.o> for the suggestion.           |

   | 13240   | Don't show the package counter for "Uninstalling" messages.  |
   | zmedico |                                                              |

   | 13241   | Bug #243220 - Show messages in emerge.log when old versions  |
   | zmedico | are uninstalled for AUTOCLEAN. This reverts behavior so that |
   |         | messages which used to be generated prior to portage-2.1.5.x |
   |         | (when AUTOCLEAN was moved from emerge to dblink.treewalk())  |
   |         | are generated once again.                                    |

   | 13242   | In order to eliminate the possibility of integer overflay,   |
   | zmedico | replace things like ((ret+=$?)) with ((ret|=$?)). Thanks to  |
   |         | zong_sharo for the suggestion.                               |

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

14 files changed:
bin/ebuild-helpers/dobin
bin/ebuild-helpers/dodoc
bin/ebuild-helpers/doexe
bin/ebuild-helpers/doins
bin/ebuild-helpers/dolib
bin/ebuild-helpers/doman
bin/ebuild-helpers/domo
bin/ebuild-helpers/dosbin
bin/ebuild-helpers/dosed
bin/ebuild-helpers/ecompress
bin/ebuild-helpers/ecompressdir
bin/ebuild-helpers/prepallman
pym/_emerge/__init__.py
pym/portage/dbapi/vartree.py

index 274d4f40922eff1ddb17c0be808f6dce55c6a9b7..7d0455e08fd0584015b7b449d3751a3e82b9f71b 100755 (executable)
@@ -23,7 +23,7 @@ for x in "$@" ; do
                echo "!!! ${0##*/}: $x does not exist" 1>&2
                false
        fi
-       ((ret+=$?))
+       ((ret|=$?))
 done
 
 exit ${ret}
index bdfbe7aef6176776705f064365b292d7b1e3fd4d..8314e1ba1ac3e2b14d8476a4d6a7aa5265984a3a 100755 (executable)
@@ -21,7 +21,7 @@ for x in "$@" ; do
                ecompress --queue "${dir}/${x##*/}"
        elif [ ! -e "${x}" ] ; then
                echo "!!! ${0##*/}: $x does not exist" 1>&2
-               ((++ret))
+               ((ret|=1))
        fi
 done
 
index 8fe25c9bf87649b41a1f3c38224f33e567a5b770..86f145720d1c6ce2cf233c3791d5da704b1beeae 100755 (executable)
@@ -35,7 +35,7 @@ for x in "$@" ; do
                echo "!!! ${0##*/}: $mysrc does not exist" 1>&2
                false
        fi
-       ((ret+=$?))
+       ((ret|=$?))
 done
 
 rm -rf "$TMP"
index a1141ccfed26644e7dc46e2fa561a95651616180..48040bdc9c1f4517fffe3f4d4b2df0a52d6462a7 100755 (executable)
@@ -97,9 +97,9 @@ for x in "$@" ; do
                        mv "$TMP/1/$x_orig" "$x"
                fi
                while popd >/dev/null 2>&1 ; do true ; done
-               ((++success))
+               ((success|=1))
        else
-               _doins "${x}" && ((++success))
+               _doins "${x}" && ((success|=1))
        fi
 done
 rm -rf "$TMP"
index 95d764037c54cef92891494e9432be42a3c34b7a..7c4e03186465580319067fad9f18c8a5e6156dfe 100755 (executable)
@@ -35,7 +35,7 @@ for x in "$@" ; do
                echo "!!! ${0##*/}: ${x} does not exist" 1>&2
                false
        fi
-       ((ret+=$?))
+       ((ret|=$?))
 done
 
 exit ${ret}
index 88e87be87f3c9961127c2fcaf6ff223749fd3ef2..dfe1f762c72858d14b743cbbdc99e8732a041eb0 100755 (executable)
@@ -47,14 +47,14 @@ for x in "$@" ; do
                        fi
 
                        install -m0644 "${x}" "${ED}/usr/share/man/${mandir}/${name}"
-                       ((ret+=$?))
+                       ((ret|=$?))
                elif [[ ! -e ${x} ]] ; then
                        echo "!!! ${0##*/}: $x does not exist" 1>&2
-                       ((++ret))
+                       ((ret|=1))
                fi
        else
                vecho "doman: '${x}' is probably not a man page; skipping" 1>&2
-               ((++ret))
+               ((ret|=1))
        fi
 done
 
index c2a17ced6d7345150054276c0a174f9fb7ed2614..8c8faf0fe6836c1afaa4789b57b8b1c8270f85de 100755 (executable)
@@ -26,7 +26,7 @@ for x in "$@" ; do
                echo "!!! ${0##*/}: $x does not exist" 1>&2
                false
        fi
-       ((ret+=$?))
+       ((ret|=$?))
 done
 
 exit $ret
index 9da3c3397cfb7797d8b4512166377cda2c406b18..a02a7fba4cf284314bdc2372ffe4e4bc0f6f6764 100755 (executable)
@@ -21,7 +21,7 @@ for x in "$@" ; do
                echo "!!! ${0##*/}: ${x} does not exist" 1>&2
                false
        fi
-       ((ret+=$?))
+       ((ret|=$?))
 done
 
 exit ${ret}
index e7686f97bf86087a1c44f2e63ddf5dd9c0b03586..63774be433c073b8cb17bf0e8e5ca43b94d1aa45 100755 (executable)
@@ -22,7 +22,7 @@ for x in "$@" ; do
                        echo "${y} is not a regular file!" >&2
                        false
                fi
-               ((ret+=$?))
+               ((ret|=$?))
        else
                mysed="${x}"
        fi
@@ -30,7 +30,7 @@ done
 
 if [ $file_found = 0 ] ; then
        echo "!!! ${0##*/}: $y does not exist" 1>&2
-       ((ret+=1))
+       ((ret|=1))
 fi
 
 exit $ret
index 39985328c3769becc1176af2e5eaae3ee55e1293..287918bafeefdefe888e222ddc814c5ac6bf371f 100755 (executable)
@@ -75,7 +75,7 @@ case $1 in
                for x in "$@" ; do
                        [[ ${x##*.} =~ $mask_ext_re ]] && continue
                        filtered_args[$i]=$x
-                       (( i++ ))
+                       ((i|=1))
                done
                [ $i -eq 0 ] && exit 0
                set -- "${filtered_args[@]}"
index c7572410e3df262a146b3bf1ca7fabf0b5ffb3a8..35534c996a8413ec301796ed69de015bdda2b023 100755 (executable)
@@ -54,7 +54,7 @@ funk_up_dir() {
 
        # first we act on all the files
        find "${dir}" -type f ${negate} -iname '*'${suffix} -print0 | ${XARGS} -0 ${binary}
-       ((ret+=$?))
+       ((ret|=$?))
 
        find "${dir}" -type l -print0 | \
        while read -d $'\0' brokenlink ; do
@@ -67,7 +67,7 @@ funk_up_dir() {
                [[ ${act} == "compress" ]] \
                        && ln -snf "${newdest}" "${brokenlink}${suffix}" \
                        || ln -snf "${newdest}" "${brokenlink%${suffix}}"
-               ((ret+=$?))
+               ((ret|=$?))
        done
 }
 
index 353b31f357fa7f2d2b40d6edc9b767ef2e77424e..43e0e9790b5cfba77859438af682ff5284c367e2 100755 (executable)
@@ -9,7 +9,7 @@ find "${ED}" -type d -name man > "${T}"/prepallman.filelist
 while read mandir ; do
        mandir=${mandir#${ED}}
        prepman "${mandir%/man}"
-       ((ret+=$?))
+       ((ret|=$?))
 done < "${T}"/prepallman.filelist
 
 exit ${ret}
index 1d2c95e6e1244efb1deb6ca13c415d95da80cca0..975ea3d032b39827dc5d29df90b32d85fafba5b1 100644 (file)
@@ -4062,11 +4062,18 @@ class PackageMerge(AsynchronousTask):
                if pkg.installed:
                        action_desc = "Uninstalling"
                        preposition = "from"
+                       counter_str = ""
                else:
                        action_desc = "Installing"
                        preposition = "to"
+                       counter_str = "(%s of %s) " % \
+                               (colorize("MERGE_LIST_PROGRESS", str(pkg_count.curval)),
+                               colorize("MERGE_LIST_PROGRESS", str(pkg_count.maxval)))
 
-               msg = "%s %s" % (action_desc, colorize("GOOD", pkg.cpv))
+               msg = "%s %s%s" % \
+                       (action_desc,
+                       counter_str,
+                       colorize("GOOD", pkg.cpv))
 
                if pkg.root != "/":
                        msg += " %s %s" % (preposition, pkg.root)
@@ -10014,7 +10021,7 @@ class Scheduler(PollScheduler):
 
        class _iface_class(SlotObject):
                __slots__ = ("dblinkEbuildPhase", "dblinkDisplayMerge",
-                       "dblinkElog", "fetch", "register", "schedule",
+                       "dblinkElog", "dblinkEmergeLog", "fetch", "register", "schedule",
                        "scheduleSetup", "scheduleUnpack", "scheduleYield",
                        "unregister")
 
@@ -10143,6 +10150,7 @@ class Scheduler(PollScheduler):
                        dblinkEbuildPhase=self._dblink_ebuild_phase,
                        dblinkDisplayMerge=self._dblink_display_merge,
                        dblinkElog=self._dblink_elog,
+                       dblinkEmergeLog=self._dblink_emerge_log,
                        fetch=fetch_iface, register=self._register,
                        schedule=self._schedule_wait,
                        scheduleSetup=self._schedule_setup,
@@ -10454,6 +10462,9 @@ class Scheduler(PollScheduler):
                        if log_file is not None:
                                log_file.close()
 
+       def _dblink_emerge_log(self, msg):
+               self._logger.log(msg)
+
        def _dblink_display_merge(self, pkg_dblink, msg, level=0, noiselevel=0):
                log_path = pkg_dblink.settings.get("PORTAGE_LOG_FILE")
                background = self._background
index 3d485a59b2ae9dab35ace45eba72cf3c18b31153..1ca9140413f820697d5062c834e56076a7d5abf9 100644 (file)
@@ -3623,6 +3623,14 @@ class dblink(object):
                        if var_name == 'SLOT':
                                slot = val
 
+                               if not slot.strip():
+                                       slot = self.settings.get(var_name, '')
+                                       if not slot.strip():
+                                               showMessage("!!! SLOT is undefined\n",
+                                                       level=logging.ERROR, noiselevel=-1)
+                                               return 1
+                                       write_atomic(os.path.join(inforoot, var_name), slot + '\n')
+
                        if val != self.settings.get(var_name, ''):
                                self._eqawarn('preinst',
                                        ["QA Notice: Expected %s='%s', got '%s'\n" % \
@@ -3638,10 +3646,12 @@ class dblink(object):
                for v in self.vartree.dbapi.cp_list(self.mysplit[0]):
                        otherversions.append(v.split("/")[1])
 
+               cp = self.mysplit[0]
+               slot_atom = "%s:%s" % (cp, slot)
+
                # filter any old-style virtual matches
-               slot_matches = [cpv for cpv in self.vartree.dbapi.match(
-                       "%s:%s" % (cpv_getkey(self.mycpv), slot)) \
-                       if cpv_getkey(cpv) == cpv_getkey(self.mycpv)]
+               slot_matches = [cpv for cpv in self.vartree.dbapi.match(slot_atom) \
+                       if cpv_getkey(cpv) == cp]
 
                if self.mycpv not in slot_matches and \
                        self.vartree.dbapi.cpv_exists(self.mycpv):
@@ -4002,7 +4012,17 @@ class dblink(object):
                        match_from_list(PORTAGE_PACKAGE_ATOM, [self.mycpv]):
                        reinstall_self = True
 
+               if scheduler is None:
+                       def emerge_log(msg):
+                               pass
+               else:
+                       emerge_log = scheduler.dblinkEmergeLog
+
                autoclean = self.settings.get("AUTOCLEAN", "yes") == "yes"
+
+               if autoclean:
+                       emerge_log(" >>> AUTOCLEAN: %s" % (slot_atom,))
+
                others_in_slot.append(self)  # self has just been merged
                for dblnk in list(others_in_slot):
                        if dblnk is self:
@@ -4010,10 +4030,17 @@ class dblink(object):
                        if not (autoclean or dblnk.mycpv == self.mycpv or reinstall_self):
                                continue
                        showMessage(">>> Safely unmerging already-installed instance...\n")
+                       emerge_log(" === Unmerging... (%s)" % (dblnk.mycpv,))
                        others_in_slot.remove(dblnk) # dblnk will unmerge itself now
                        dblnk._linkmap_broken = self._linkmap_broken
-                       dblnk.unmerge(trimworld=0, ldpath_mtimes=prev_mtimes,
-                               others_in_slot=others_in_slot)
+                       unmerge_rval = dblnk.unmerge(trimworld=0,
+                               ldpath_mtimes=prev_mtimes, others_in_slot=others_in_slot)
+
+                       if unmerge_rval == os.EX_OK:
+                               emerge_log(" >>> unmerge success: %s" % (dblnk.mycpv,))
+                       else:
+                               emerge_log(" !!! unmerge FAILURE: %s" % (dblnk.mycpv,))
+
                        # TODO: Check status and abort if necessary.
                        dblnk.delete()
                        showMessage(">>> Original instance of package unmerged safely.\n")