On Mon, Dec 6, 2010 at 10:02 PM, James Antill <[email protected]> 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 > [email protected] > http://lists.baseurl.org/mailman/listinfo/yum-devel >
ACK
_______________________________________________ Yum-devel mailing list [email protected] http://lists.baseurl.org/mailman/listinfo/yum-devel
