~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/testament.py

  • Committer: Rory Yorke
  • Date: 2010-10-20 14:38:53 UTC
  • mto: This revision was merged to the branch mainline in revision 5519.
  • Revision ID: rory.yorke@gmail.com-20101020143853-9kfd2ldcjfroh8jw
Show missing files in bzr status (bug 134168).

"bzr status" will now show missing files, that is, those added with "bzr
add" and then removed by non bzr means (e.g., rm).

Blackbox tests were added for this case, and tests were also added to
test_delta, since the implementation change is in bzrlib.delta.

Might also affect bug 189709.

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):