[Yum-devel] [PATCH] Allow ranges of transactions in list/summary/pkg-list.

tim.lauridsen at gmail.com tim.lauridsen at gmail.com
Tue Dec 7 10:21:08 UTC 2010


On Mon, Dec 6, 2010 at 10:02 PM, James Antill <james at and.org> wrote:

> ---
>  output.py |   78
> ++++++++++++++++++++++++++++++++++++++++++------------------
>  1 files changed, 54 insertions(+), 24 deletions(-)
>
> diff --git a/output.py b/output.py
> index f99ab37..0f3543f 100755
> --- a/output.py
> +++ b/output.py
> @@ -1353,7 +1353,52 @@ to exit.
>         except KeyError:
>             return to_unicode(str(uid))
>
> +    @staticmethod
> +    def _historyRangeRTIDs(old, tid):
> +        ''' Convert a user "TID" string of 2..4 into: (2, 4). '''
> +        def str2int(x):
> +            try:
> +                return int(x)
> +            except ValueError:
> +                return None
> +
> +        if '..' not in tid:
> +            return None
> +        btid, etid = tid.split('..', 2)
> +        btid = str2int(btid)
> +        if btid > old.tid:
> +            return None
> +        elif btid <= 0:
> +            return None
> +        etid = str2int(etid)
> +        if etid > old.tid:
> +            return None
> +
> +        # Have a range ... do a "merged" transaction.
> +        if btid > etid:
> +            btid, etid = etid, btid
> +        return (btid, etid)
> +
> +    def _historyRangeTIDs(self, rtids):
> +        ''' Convert a list of ranged tid typles into all the tids needed,
> Eg.
> +            [(2,4), (6,8)] == [2, 3, 4, 6, 7, 8]. '''
> +        tids = set()
> +        last_end = -1 # This just makes displaying it easier...
> +        for mtid in sorted(rtids):
> +            if mtid[0] < last_end:
> +                self.logger.warn(_('Skipping merged transaction %d to %d,
> as it overlaps' % (mtid[0], mtid[1])))
> +                continue # Don't do overlapping
> +            last_end = mtid[1]
> +            for num in range(mtid[0], mtid[1] + 1):
> +                tids.add(num)
> +        return tids
> +
>     def _history_list_transactions(self, extcmds):
> +        old = self.history.last()
> +        if old is None:
> +            self.logger.critical(_('No transactions'))
> +            return None, None
> +
>         tids = set()
>         pats = []
>         usertids = extcmds[1:]
> @@ -1367,6 +1412,10 @@ to exit.
>                 int(tid)
>                 tids.add(tid)
>             except ValueError:
> +                rtid = self._historyRangeRTIDs(old, tid)
> +                if rtid:
> +                    tids.update(self._historyRangeTIDs([rtid]))
> +                    continue
>                 pats.append(tid)
>         if pats:
>             tids.update(self.history.search(pats))
> @@ -1493,22 +1542,10 @@ to exit.
>             return 1, ['Failed history info']
>
>         for tid in extcmds[1:]:
> -            if '..' in tid:
> -                btid, etid = tid.split('..', 2)
> -                btid = str2int(btid)
> -                if btid > old.tid:
> -                    btid = None
> -                elif btid <= 0:
> -                    btid = None
> -                etid = str2int(etid)
> -                if etid > old.tid:
> -                    etid = None
> -                if btid is not None and etid is not None:
> -                    # Have a range ... do a "merged" transaction.
> -                    if btid > etid:
> -                        btid, etid = etid, btid
> -                    mtids.add((btid, etid))
> -                    continue
> +            if self._historyRangeRTIDs(old, tid):
> +                # Have a range ... do a "merged" transaction.
> +                mtids.add(self._historyRangeRTIDs(old, tid))
> +                continue
>             elif str2int(tid) is not None:
>                 tids.add(str2int(tid))
>                 continue
> @@ -1518,14 +1555,7 @@ to exit.
>         utids = tids.copy()
>         if mtids:
>             mtids = sorted(mtids)
> -            last_end = -1 # This just makes displaying it easier...
> -            for mtid in mtids:
> -                if mtid[0] < last_end:
> -                    self.logger.warn(_('Skipping merged transaction %d to
> %d, as it overlaps', mtid[0], mtid[1]))
> -                    continue # Don't do overlapping
> -                last_end = mtid[1]
> -                for num in range(mtid[0], mtid[1] + 1):
> -                    tids.add(num)
> +            tids.update(self._historyRangeTIDs(mtids))
>
>         if not tids and len(extcmds) < 2:
>             old = self.history.last(complete_transactions_only=False)
> --
> 1.7.2.3
>
> _______________________________________________
> Yum-devel mailing list
> Yum-devel at lists.baseurl.org
> http://lists.baseurl.org/mailman/listinfo/yum-devel
>

ACK
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.baseurl.org/pipermail/yum-devel/attachments/20101207/5f2c66ae/attachment.html>


More information about the Yum-devel mailing list