~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/changeset/read_changeset.py

  • Committer: Aaron Bentley
  • Date: 2006-05-25 17:56:25 UTC
  • mto: This revision was merged to the branch mainline in revision 1738.
  • Revision ID: abentley@panoramicfeedback.com-20060525175625-c239c2e6526ffe6e
Cleanups to prepare for review

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
class MalformedPatches(BadChangeset): pass
27
27
class MalformedFooter(BadChangeset): pass
28
28
 
 
29
 
29
30
def _unescape(name):
30
31
    """Now we want to find the filename effected.
31
32
    Unfortunately the filename is written out as
44
45
    # We need to handle escaped hexadecimals too.
45
46
    return name[1:-1].replace('\"', '"').replace("\'", "'")
46
47
 
 
48
 
47
49
class RevisionInfo(object):
48
50
    """Gets filled out for each revision object that is read.
49
51
    """
86
88
 
87
89
        return rev
88
90
 
 
91
 
89
92
class ChangesetInfo(object):
90
93
    """This contains the meta information. Stuff that allows you to
91
94
    recreate the revision or inventory XML.
135
138
                rev.committer = self.committer
136
139
            self.real_revisions.append(rev.as_revision())
137
140
 
138
 
 
139
141
    def get_base(self, revision):
140
142
        revision_info = self.get_revision_info(revision.revision_id)
141
143
        if revision_info.base_id is not None:
231
233
                    % (rev.revision_id))
232
234
        rev_to_sha1[rev.revision_id] = sha1
233
235
 
234
 
        # Now that we've checked all the sha1 sums, we can make sure that
235
 
        # at least for the small list we have, all of the references are
236
 
        # valid.
237
 
        ## TODO: Bring this back
238
 
        ## for rev in self.info.real_revisions:
239
 
        ##     for p_id in rev.parent_ids:
240
 
        ##         if p_id in rev_to_sha1:
241
 
        ##             if parent.revision_sha1 != rev_to_sha1[p_id]:
242
 
        ##                 raise BzrError('Parent revision checksum mismatch.'
243
 
        ##                         ' A parent was referenced with an'
244
 
        ##                         ' incorrect checksum'
245
 
        ##                         ': {%r} %s != %s' % (parent.revision_id,
246
 
        ##                                     parent.revision_sha1,
247
 
        ##                                     rev_to_sha1[parent.revision_id]))
248
 
 
249
236
    def _validate_references_from_repository(self, repository):
250
237
        """Now that we have a repository which should have some of the
251
238
        revisions we care about, go through and validate all of them
296
283
 
297
284
        for inv_id, sha1 in inv_to_sha.iteritems():
298
285
            if repository.has_revision(inv_id):
299
 
                # TODO: Currently branch.get_inventory_sha1() just returns the value
300
 
                # that is stored in the revision text. Which is *really* bogus, because
301
 
                # that means we aren't validating the actual text, just that we wrote 
302
 
                # and read the string. But for now, what the hell.
 
286
                # Note: branch.get_inventory_sha1() just returns the value that
 
287
                # is stored in the revision text, and that value may be out
 
288
                # of date. This is bogus, because that means we aren't
 
289
                # validating the actual text, just that we wrote and read the
 
290
                # string. But for now, what the hell.
303
291
                local_sha1 = repository.get_inventory_sha1(inv_id)
304
292
                if sha1 != local_sha1:
305
293
                    raise BzrError('sha1 mismatch. For inventory id {%s}' 
331
319
            warning('Inventory sha hash mismatch for revision %s. %s'
332
320
                    ' != %s' % (revision_id, sha1, rev.inventory_sha1))
333
321
 
334
 
        
335
322
    def get_changeset(self, repository):
336
323
        """Return the meta information, and a Changeset tree which can
337
324
        be used to populate the local stores and working tree, respectively.
637
624
            if lines:
638
625
                do_patch(path, lines, encoding)
639
626
            
640
 
 
641
627
        valid_actions = {
642
628
            'renamed':renamed,
643
629
            'removed':removed,
666
652
                        ' (unrecognized action): %r' % action_line)
667
653
            valid_actions[action](kind, extra, lines)
668
654
 
 
655
 
669
656
def read_changeset(from_file, repository):
670
657
    """Read in a changeset from a iterable object (such as a file object)
671
658
 
678
665
    cr = ChangesetReader(from_file)
679
666
    return cr.get_changeset(repository)
680
667
 
 
668
 
681
669
class ChangesetTree(Tree):
682
670
    def __init__(self, base_tree, revision_id):
683
671
        self.base_tree = base_tree
892
880
        content = fileobj.read()
893
881
        return len(content), sha_string(content)
894
882
 
895
 
 
896
883
    def _get_inventory(self):
897
884
        """Build up the inventory entry for the ChangesetTree.
898
885
 
972
959
        paths.sort()
973
960
        return paths
974
961
 
 
962
 
975
963
def patched_file(file_patch, original):
976
964
    """Produce a file-like object with the patched version of a text"""
977
965
    from bzrlib.patches import iter_patched
979
967
    if file_patch == "":
980
968
        return IterableFile(())
981
969
    return IterableFile(iter_patched(original, file_patch.splitlines(True)))
982