~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/log.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2006-06-25 17:28:41 UTC
  • mfrom: (1756.2.27 log.perf)
  • Revision ID: pqm@pqm.ubuntu.com-20060625172841-db84e4fa7f50f885
Nicer log --forward sorting

Show diffs side-by-side

added added

removed removed

Lines of Context:
208
208
        return
209
209
 
210
210
    # convert the revision history to a dictionary:
211
 
    rev_nos = dict([(k, v) for v, k in cut_revs])
 
211
    rev_nos = dict((k, v) for v, k in cut_revs)
212
212
 
213
213
    # override the mainline to look like the revision history.
214
214
    mainline_revs = [revision_id for index, revision_id in cut_revs]
282
282
 
283
283
    if direction == 'forward':
284
284
        # forward means oldest first.
285
 
        merge_sorted_revisions.reverse()
 
285
        merge_sorted_revisions = reverse_by_depth(merge_sorted_revisions)
286
286
    elif direction != 'reverse':
287
287
        raise ValueError('invalid direction %r' % direction)
288
288
 
292
292
        yield rev_id, rev_nos.get(rev_id), merge_depth
293
293
 
294
294
 
 
295
def reverse_by_depth(merge_sorted_revisions, _depth=0):
 
296
    """Reverse revisions by depth.
 
297
 
 
298
    Revisions with a different depth are sorted as a group with the previous
 
299
    revision of that depth.  There may be no topological justification for this,
 
300
    but it looks much nicer.
 
301
    """
 
302
    zd_revisions = []
 
303
    for val in merge_sorted_revisions:
 
304
        if val[2] == _depth:
 
305
            zd_revisions.append([val])
 
306
        else:
 
307
            assert val[2] > _depth
 
308
            zd_revisions[-1].append(val)
 
309
    for revisions in zd_revisions:
 
310
        if len(revisions) > 1:
 
311
            revisions[1:] = reverse_by_depth(revisions[1:], _depth + 1)
 
312
    zd_revisions.reverse()
 
313
    result = []
 
314
    for chunk in zd_revisions:
 
315
        result.extend(chunk)
 
316
    return result
 
317
 
 
318
 
295
319
class LogFormatter(object):
296
320
    """Abstract class to display log messages."""
297
321