[Yum-devel] [PATCH] Dynamically work out the max action width, in the rpm callback. BZ 660576.
seth vidal
skvidal at fedoraproject.org
Tue Dec 7 16:58:29 UTC 2010
On Tue, 2010-12-07 at 09:58 -0500, James Antill wrote:
> ---
> output.py | 17 +++++++++++++----
> 1 files changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/output.py b/output.py
> index 0f3543f..a8bf1cc 100755
> --- a/output.py
> +++ b/output.py
> @@ -2278,6 +2278,15 @@ class YumCliRPMCallBack(RPMBaseCallback):
> def event(self, package, action, te_current, te_total, ts_current, ts_total):
> # this is where a progress bar would be called
> process = self.action[action]
> +
> + if not hasattr(self, '_max_action_wid'):
> + wid1 = 0
> + for val in self.action.values():
> + wid_val = utf8_width(val)
> + if wid1 < wid_val:
> + wid1 = wid_val
> + self._max_action_wid = wid1
> + wid1 = self._max_action_wid
>
> if type(package) not in types.StringTypes:
> pkgname = str(package)
> @@ -2292,7 +2301,7 @@ class YumCliRPMCallBack(RPMBaseCallback):
>
> if self.output and (sys.stdout.isatty() or te_current == te_total):
> (fmt, wid1, wid2) = self._makefmt(percent, ts_current, ts_total,
> - pkgname=pkgname)
> + pkgname=pkgname, wid1=wid1)
> msg = fmt % (utf8_width_fill(process, wid1, wid1),
> utf8_width_fill(pkgname, wid2, wid2))
> if msg != self.lastmsg:
> @@ -2308,7 +2317,7 @@ class YumCliRPMCallBack(RPMBaseCallback):
> sys.stdout.flush()
>
> def _makefmt(self, percent, ts_current, ts_total, progress = True,
> - pkgname=None):
> + pkgname=None, wid1=15):
> l = len(str(ts_total))
> size = "%s.%s" % (l, l)
> fmt_done = "%" + size + "s/%" + size + "s"
> @@ -2322,7 +2331,7 @@ class YumCliRPMCallBack(RPMBaseCallback):
> pnl = utf8_width(pkgname)
>
> overhead = (2 * l) + 2 # Length of done, above
> - overhead += 19 # Length of begining
> + overhead += 2+ wid1 +2 # Length of begining (" " action " :")
> overhead += 1 # Space between pn and done
> overhead += 2 # Ends for progress
> overhead += 1 # Space for end
> @@ -2353,7 +2362,7 @@ class YumCliRPMCallBack(RPMBaseCallback):
> bar = fmt_bar % (self.mark * marks, )
> fmt = " %s: %s " + bar + " " + done
> wid2 = pnl
> - return fmt, 15, wid2
> + return fmt, wid1, wid2
>
>
> def progressbar(current, total, name=None):
ACK - for the record I dislike all languages.
including english.
-sv
More information about the Yum-devel
mailing list