/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: Robert Collins
  • Date: 2008-08-21 01:41:43 UTC
  • mto: This revision was merged to the branch mainline in revision 3652.
  • Revision ID: robertc@robertcollins.net-20080821014143-0gabznzvn10vv3sl
Refactoring in log towards more pluggable revision selection.

Show diffs side-by-side

added added

removed removed

Lines of Context:
210
210
                                              specific_fileid,
211
211
                                              generate_merge_revisions,
212
212
                                              allow_single_merge_revision)
213
 
    if search is not None:
214
 
        searchRE = re.compile(search, re.IGNORECASE)
215
 
    else:
216
 
        searchRE = None
217
 
 
218
213
    rev_tag_dict = {}
219
214
    generate_tags = getattr(lf, 'supports_tags', False)
220
215
    if generate_tags:
225
220
 
226
221
    # now we just print all the revisions
227
222
    log_count = 0
228
 
    for (rev_id, revno, merge_depth), rev, delta in _iter_revisions(
229
 
        branch.repository, view_revisions, generate_delta):
230
 
        if searchRE:
231
 
            if not searchRE.search(rev.message):
232
 
                continue
233
 
 
 
223
    revision_iterator = make_log_rev_iterator(branch,
 
224
        view_revisions, generate_delta, search)
 
225
    for (rev_id, revno, merge_depth), rev, delta in revision_iterator:
234
226
        lr = LogRevision(rev, revno, merge_depth, delta,
235
227
                         rev_tag_dict.get(rev_id))
236
228
        lf.log_revision(lr)
295
287
        yield revision_id, str(start_revno - num), 0
296
288
 
297
289
 
 
290
def make_log_rev_iterator(branch, view_revisions, generate_delta, search):
 
291
    """Create a revision iterator for log.
 
292
 
 
293
    :param branch: The branch being logged.
 
294
    :param view_revisions: The revisions being viewed.
 
295
    :param generate_delta: Whether to generate a delta for each revision.
 
296
    :param search: A user text search string.
 
297
    :return: An iterator over ((rev_id, revno, merge_depth), rev, delta).
 
298
    """
 
299
    # core log logic
 
300
    log_rev_iterator = _iter_revisions(branch.repository, view_revisions, generate_delta)
 
301
    # filter on log messages
 
302
    log_rev_iterator = make_search_filter(branch, view_revisions, generate_delta,
 
303
        search, log_rev_iterator)
 
304
    return log_rev_iterator
 
305
 
 
306
 
 
307
def make_search_filter(branch, view_revisions, generate_delta, search,
 
308
    log_rev_iterator):
 
309
    """Create a filtered iterator of log_rev_iterator matching on a regex.
 
310
 
 
311
    :param branch: The branch being logged.
 
312
    :param view_revisions: The revisions being viewed.
 
313
    :param generate_delta: Whether to generate a delta for each revision.
 
314
    :param search: A user text search string.
 
315
    :param log_rev_iterator: An input iterator containing all revisions that
 
316
        could be displayed.
 
317
    :return: An iterator over ((rev_id, revno, merge_depth), rev, delta).
 
318
    """
 
319
    if search is None:
 
320
        return log_rev_iterator
 
321
    # Compile the search now to get early errors.
 
322
    searchRE = re.compile(search, re.IGNORECASE)
 
323
    return _filter_message_re(searchRE, log_rev_iterator)
 
324
 
 
325
 
 
326
def _filter_message_re(searchRE, log_rev_iterator):
 
327
    for (rev_id, revno, merge_depth), rev, delta in log_rev_iterator:
 
328
        if searchRE.search(rev.message):
 
329
            yield (rev_id, revno, merge_depth), rev, delta
 
330
 
 
331
 
298
332
def _iter_revisions(repository, view_revisions, generate_delta):
299
333
    num = 9
300
334
    view_revisions = iter(view_revisions)