/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/log.py

  • Committer: Ian Clatworthy
  • Date: 2009-01-16 14:03:47 UTC
  • mto: (3976.1.1 ianc-integration)
  • mto: This revision was merged to the branch mainline in revision 3978.
  • Revision ID: ian.clatworthy@canonical.com-20090116140347-aqboeyop0g19p3u7
faster incremental results for FILE logging

Show diffs side-by-side

added added

removed removed

Lines of Context:
212
212
    revision_iterator = _create_log_revision_iterator(branch,
213
213
        start_revision, end_revision, direction, specific_fileid, search,
214
214
        generate_merge_revisions, allow_single_merge_revision,
215
 
        generate_delta)
 
215
        generate_delta, limit)
216
216
    for revs in revision_iterator:
217
217
        for (rev_id, revno, merge_depth), rev, delta in revs:
218
218
            lr = LogRevision(rev, revno, merge_depth, delta,
226
226
 
227
227
def _create_log_revision_iterator(branch, start_revision, end_revision,
228
228
    direction, specific_fileid, search, generate_merge_revisions,
229
 
    allow_single_merge_revision, generate_delta):
 
229
    allow_single_merge_revision, generate_delta,
 
230
    force_incremental_matching):
230
231
    """Create a revision iterator for log.
231
232
 
232
233
    :param branch: The branch being logged.
242
243
    :param allow_single_merge_revision: If True, logging of a single
243
244
        revision off the mainline is to be allowed
244
245
    :param generate_delta: Whether to generate a delta for each revision.
 
246
    :param force_incremental_matching: if there's a file_id, use deltas
 
247
        to match it unconditionally
245
248
 
246
249
    :return: An iterator over lists of ((rev_id, revno, merge_depth), rev,
247
250
        delta).
254
257
    # inventory format arrives. Delta filtering should give more
255
258
    # accurate results (e.g. inclusion of FILE deletions) so perhaps
256
259
    # it should always be used if we have a file-id?
257
 
    use_deltas_for_matching = specific_fileid and (not generate_merge_revisions
258
 
        or generate_delta or start_rev_id or end_rev_id)
 
260
    use_deltas_for_matching = specific_fileid and (force_incremental_matching
 
261
        or generate_delta or start_rev_id or end_rev_id
 
262
        or not generate_merge_revisions)
259
263
    if use_deltas_for_matching:
260
264
        view_revisions = _calc_view_revisions(branch, rev_limits,
261
265
            direction, generate_merge_revisions, allow_single_merge_revision)
325
329
    # If we only want to see linear revisions, we can iterate ...
326
330
    if not generate_merge_revisions:
327
331
        result = _linear_view_revisions(branch, rev_limits)
328
 
        # If a start limit was given, check it before outputting anything
329
 
        if start_rev_id:
 
332
        # If a start limit was given and it's not obviously an
 
333
        # ancestor of the end limit, check it before outputting anything
 
334
        if start_rev_id and not (_on_mainline(branch, start_rev_id) and
 
335
            _on_mainline(branch, end_rev_id)):
330
336
            try:
331
337
                result = list(result)
332
338
            except _StartNotLinearAncestor:
381
387
    return len(branch.repository.get_revision(rev_id).parent_ids) > 1
382
388
 
383
389
 
 
390
def _on_mainline(branch, rev_id):
 
391
    """Is rev_id on the mainline of a branch?"""
 
392
    if rev_id:
 
393
        try:
 
394
            branch.revision_id_to_revno(rev_id)
 
395
        except errors.NoSuchRevision:
 
396
            return False
 
397
    return True
 
398
 
 
399
 
384
400
def _linear_view_revisions(branch, revision_limits):
385
401
    """Calculate a sequence of revisions to view, newest to oldest.
386
402