From 18731d9e0ba29c47cb8a01a65bad175f39abf0ef Mon Sep 17 00:00:00 2001 From: Fabian Groffen Date: Sun, 29 Mar 2009 07:48:52 +0000 Subject: [PATCH] Merged from trunk -r13238:13242 | 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 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 --- bin/ebuild-helpers/dobin | 2 +- bin/ebuild-helpers/dodoc | 2 +- bin/ebuild-helpers/doexe | 2 +- bin/ebuild-helpers/doins | 4 ++-- bin/ebuild-helpers/dolib | 2 +- bin/ebuild-helpers/doman | 6 +++--- bin/ebuild-helpers/domo | 2 +- bin/ebuild-helpers/dosbin | 2 +- bin/ebuild-helpers/dosed | 4 ++-- bin/ebuild-helpers/ecompress | 2 +- bin/ebuild-helpers/ecompressdir | 4 ++-- bin/ebuild-helpers/prepallman | 2 +- pym/_emerge/__init__.py | 15 +++++++++++-- pym/portage/dbapi/vartree.py | 37 ++++++++++++++++++++++++++++----- 14 files changed, 62 insertions(+), 24 deletions(-) diff --git a/bin/ebuild-helpers/dobin b/bin/ebuild-helpers/dobin index 274d4f409..7d0455e08 100755 --- a/bin/ebuild-helpers/dobin +++ b/bin/ebuild-helpers/dobin @@ -23,7 +23,7 @@ for x in "$@" ; do echo "!!! ${0##*/}: $x does not exist" 1>&2 false fi - ((ret+=$?)) + ((ret|=$?)) done exit ${ret} diff --git a/bin/ebuild-helpers/dodoc b/bin/ebuild-helpers/dodoc index bdfbe7aef..8314e1ba1 100755 --- a/bin/ebuild-helpers/dodoc +++ b/bin/ebuild-helpers/dodoc @@ -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 diff --git a/bin/ebuild-helpers/doexe b/bin/ebuild-helpers/doexe index 8fe25c9bf..86f145720 100755 --- a/bin/ebuild-helpers/doexe +++ b/bin/ebuild-helpers/doexe @@ -35,7 +35,7 @@ for x in "$@" ; do echo "!!! ${0##*/}: $mysrc does not exist" 1>&2 false fi - ((ret+=$?)) + ((ret|=$?)) done rm -rf "$TMP" diff --git a/bin/ebuild-helpers/doins b/bin/ebuild-helpers/doins index a1141ccfe..48040bdc9 100755 --- a/bin/ebuild-helpers/doins +++ b/bin/ebuild-helpers/doins @@ -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" diff --git a/bin/ebuild-helpers/dolib b/bin/ebuild-helpers/dolib index 95d764037..7c4e03186 100755 --- a/bin/ebuild-helpers/dolib +++ b/bin/ebuild-helpers/dolib @@ -35,7 +35,7 @@ for x in "$@" ; do echo "!!! ${0##*/}: ${x} does not exist" 1>&2 false fi - ((ret+=$?)) + ((ret|=$?)) done exit ${ret} diff --git a/bin/ebuild-helpers/doman b/bin/ebuild-helpers/doman index 88e87be87..dfe1f762c 100755 --- a/bin/ebuild-helpers/doman +++ b/bin/ebuild-helpers/doman @@ -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 diff --git a/bin/ebuild-helpers/domo b/bin/ebuild-helpers/domo index c2a17ced6..8c8faf0fe 100755 --- a/bin/ebuild-helpers/domo +++ b/bin/ebuild-helpers/domo @@ -26,7 +26,7 @@ for x in "$@" ; do echo "!!! ${0##*/}: $x does not exist" 1>&2 false fi - ((ret+=$?)) + ((ret|=$?)) done exit $ret diff --git a/bin/ebuild-helpers/dosbin b/bin/ebuild-helpers/dosbin index 9da3c3397..a02a7fba4 100755 --- a/bin/ebuild-helpers/dosbin +++ b/bin/ebuild-helpers/dosbin @@ -21,7 +21,7 @@ for x in "$@" ; do echo "!!! ${0##*/}: ${x} does not exist" 1>&2 false fi - ((ret+=$?)) + ((ret|=$?)) done exit ${ret} diff --git a/bin/ebuild-helpers/dosed b/bin/ebuild-helpers/dosed index e7686f97b..63774be43 100755 --- a/bin/ebuild-helpers/dosed +++ b/bin/ebuild-helpers/dosed @@ -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 diff --git a/bin/ebuild-helpers/ecompress b/bin/ebuild-helpers/ecompress index 39985328c..287918baf 100755 --- a/bin/ebuild-helpers/ecompress +++ b/bin/ebuild-helpers/ecompress @@ -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[@]}" diff --git a/bin/ebuild-helpers/ecompressdir b/bin/ebuild-helpers/ecompressdir index c7572410e..35534c996 100755 --- a/bin/ebuild-helpers/ecompressdir +++ b/bin/ebuild-helpers/ecompressdir @@ -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 } diff --git a/bin/ebuild-helpers/prepallman b/bin/ebuild-helpers/prepallman index 353b31f35..43e0e9790 100755 --- a/bin/ebuild-helpers/prepallman +++ b/bin/ebuild-helpers/prepallman @@ -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} diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py index 1d2c95e6e..975ea3d03 100644 --- a/pym/_emerge/__init__.py +++ b/pym/_emerge/__init__.py @@ -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 diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index 3d485a59b..1ca914041 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -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") -- 2.26.2