~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/repository.py

Introduce a api specifically for looking at lines in some versions of the inventory, for fileid_involved.

Show diffs side-by-side

added added

removed removed

Lines of Context:
300
300
        This determines the set of revisions which are involved, and then
301
301
        finds all file ids affected by those revisions.
302
302
        """
303
 
        # TODO: jam 20060119 This code assumes that w.inclusions will
304
 
        #       always be correct. But because of the presence of ghosts
305
 
        #       it is possible to be wrong.
306
 
        #       One specific example from Robert Collins:
307
 
        #       Two branches, with revisions ABC, and AD
308
 
        #       C is a ghost merge of D.
309
 
        #       Inclusions doesn't recognize D as an ancestor.
310
 
        #       If D is ever merged in the future, the weave
311
 
        #       won't be fixed, because AD never saw revision C
312
 
        #       to cause a conflict which would force a reweave.
313
303
        w = self.get_inventory_weave()
314
304
        from_set = set(w.get_ancestry(from_revid))
315
305
        to_set = set(w.get_ancestry(to_revid))
361
351
        w = self.get_inventory_weave()
362
352
        file_ids = set()
363
353
 
364
 
        for lineno, insert, deletes, line in w.walk(changes):
 
354
        # this code needs to read every line in every inventory for the
 
355
        # inventories [changes]. Seeing a line twice is ok. Seeing a line
 
356
        # not pesent in one of those inventories is unnecessary and not 
 
357
        # harmful because we are filtering by the revision id marker in the
 
358
        # inventory lines to only select file ids altered in one of those  
 
359
        # revisions. We dont need to see all lines in the inventory because
 
360
        # only those added in an inventory in rev X can contain a revision=X
 
361
        # line.
 
362
        for line in w.iter_lines_added_or_present_in_versions(changes):
365
363
            start = line.find('file_id="')+9
366
364
            if start < 9: continue
367
365
            end = line.find('"', start)