~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/testament.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2011-04-19 01:07:44 UTC
  • mfrom: (5757.7.11 knitpackrepo-6)
  • Revision ID: pqm@pqm.ubuntu.com-20110419010744-ns5qnlw97wrrva7s
(jelmer) Split KnitPackRepository-specific bits out of Packer class into
 KnitPacker. (Jelmer Vernooij)

Show diffs side-by-side

added added

removed removed

Lines of Context:
76
76
    contains_linebreaks,
77
77
    sha,
78
78
    )
79
 
from bzrlib.tree import Tree
80
79
 
81
80
 
82
81
class Testament(object):
92
91
 
93
92
    long_header = 'bazaar-ng testament version 1\n'
94
93
    short_header = 'bazaar-ng testament short form 1\n'
95
 
    include_root = False
96
94
 
97
95
    @classmethod
98
96
    def from_revision(cls, repository, revision_id):
99
 
        """Produce a new testament from a historical revision."""
 
97
        """Produce a new testament from a historical revision"""
100
98
        rev = repository.get_revision(revision_id)
101
 
        tree = repository.revision_tree(revision_id)
102
 
        return cls(rev, tree)
103
 
 
104
 
    @classmethod
105
 
    def from_revision_tree(cls, tree):
106
 
        """Produce a new testament from a revision tree."""
107
 
        rev = tree._repository.get_revision(tree.get_revision_id())
108
 
        return cls(rev, tree)
109
 
 
110
 
    def __init__(self, rev, tree):
111
 
        """Create a new testament for rev using tree."""
 
99
        inventory = repository.get_inventory(revision_id)
 
100
        return cls(rev, inventory)
 
101
 
 
102
    def __init__(self, rev, inventory):
 
103
        """Create a new testament for rev using inventory."""
112
104
        self.revision_id = rev.revision_id
113
105
        self.committer = rev.committer
114
106
        self.timezone = rev.timezone or 0
115
107
        self.timestamp = rev.timestamp
116
108
        self.message = rev.message
117
109
        self.parent_ids = rev.parent_ids[:]
118
 
        if not isinstance(tree, Tree):
119
 
            raise TypeError("As of bzr 2.4 Testament.__init__() takes a "
120
 
                "Revision and a Tree.")
121
 
        self.tree = tree
 
110
        self.inventory = inventory
122
111
        self.revprops = copy(rev.properties)
123
112
        if contains_whitespace(self.revision_id):
124
113
            raise ValueError(self.revision_id)
154
143
        return [line.encode('utf-8') for line in r]
155
144
 
156
145
    def _get_entries(self):
157
 
        return ((path, ie) for (path, versioned, kind, file_id, ie) in
158
 
                self.tree.list_files(include_root=self.include_root))
 
146
        entries = self.inventory.iter_entries()
 
147
        entries.next()
 
148
        return entries
159
149
 
160
150
    def _escape_path(self, path):
161
151
        if contains_linebreaks(path):
219
209
 
220
210
    long_header = 'bazaar-ng testament version 2.1\n'
221
211
    short_header = 'bazaar-ng testament short form 2.1\n'
222
 
    include_root = False
223
212
    def _entry_to_line(self, path, ie):
224
213
        l = Testament._entry_to_line(self, path, ie)[:-1]
225
214
        l += ' ' + ie.revision
235
224
 
236
225
    long_header = 'bazaar testament version 3 strict\n'
237
226
    short_header = 'bazaar testament short form 3 strict\n'
238
 
    include_root = True
 
227
    def _get_entries(self):
 
228
        return self.inventory.iter_entries()
239
229
 
240
230
    def _escape_path(self, path):
241
231
        if contains_linebreaks(path):