~ubuntu-branches/ubuntu/oneiric/bzr-hg/oneiric

« back to all changes in this revision

Viewing changes to overlay.py

  • Committer: Bazaar Package Importer
  • Author(s): Jelmer Vernooij, John Ferlito, Jelmer Vernooij
  • Date: 2011-08-22 13:03:06 UTC
  • mfrom: (6.1.10 sid)
  • Revision ID: james.westby@ubuntu.com-20110822130306-54ow8e3b9l3tibzy
Tags: 0.2.0~bzr511-1
[ John Ferlito ]
* Remove John Ferlito from Uploaders.

[ Jelmer Vernooij ]
* Change fix for bug #626199 to keep support for bzr < 2.4 beta 1.
* New upstream snapshot.
 + Properly decodes tags to unicode. Closes: #635558
* Bump standards version to 3.9.2 (no changes).

Show diffs side-by-side

added added

removed removed

Lines of Context:
39
39
    FulltextContentFactory,
40
40
    )
41
41
 
 
42
from bzrlib.plugins.hg.changegroup import (
 
43
    text_contents,
 
44
    )
42
45
from bzrlib.plugins.hg.idmap import (
43
46
    MemoryIdmap,
44
47
    from_repository as idmap_from_repository,
105
108
    def url(self):
106
109
        return self.repo.base
107
110
 
 
111
    def get_text_by_path_and_node(self, path, node):
 
112
        (fileid, revid) = iter(self.idmap.lookup_text_by_path_and_node(path, node)).next()
 
113
        return "".join(self.repo.iter_files_bytes([(fileid, revid, None)]).next()[1])
 
114
 
108
115
    def remember_manifest_text(self, revid, parent_revids, text):
109
116
        """Convenience function for remembering the text of a single manifest.
110
117
 
144
151
                return record.get_bytes_as('fulltext')
145
152
        raise KeyError(revid)
146
153
 
 
154
    def _update_texts(self, revid):
 
155
        tree = self.repo.revision_tree(revid)
 
156
        delta = self.repo.get_revision_delta(revid)
 
157
        def update_text(path, fileid, kind):
 
158
            if not kind in ("file", "symlink"):
 
159
                return
 
160
            text_chunks = text_contents(self.repo, path, [(fileid, tree.get_file_revision(fileid))], self)
 
161
            text_chunks.next() # base text
 
162
            for (record, parents, node) in text_chunks:
 
163
                self.idmap.insert_text(path.encode("utf-8"), node, fileid, revid)
 
164
        for (path, fileid, kind) in delta.added:
 
165
            update_text(path, fileid, kind)
 
166
        for (oldpath, newpath, fileid, kind, text_modified, meta_modified) in delta.renamed:
 
167
            if text_modified:
 
168
                update_text(newpath, fileid, kind)
 
169
        for (path, fileid, kind, text_modified, meta_modified) in delta.modified:
 
170
            if text_modified:
 
171
                update_text(path, fileid, kind)
 
172
 
147
173
    def _update_idmap(self, stop_revision=None):
148
174
        present_revids = self.idmap.revids()
149
 
        if stop_revision is None:
150
 
            wanted = self.repo.all_revision_ids()
151
 
        else:
152
 
            wanted = self.repo.get_ancestry(stop_revision)[1:]
153
 
        todo = set(wanted) - present_revids
154
 
        revs = self.repo.get_revisions(todo)
155
175
        graph = self.repo.get_graph()
156
 
        pb = ui.ui_factory.nested_progress_bar()
157
176
        try:
 
177
            if stop_revision is None:
 
178
                wanted = self.repo.all_revision_ids()
 
179
                todo = set(wanted) - present_revids
 
180
            else:
 
181
                wanted = graph.find_unique_ancestors(stop_revision, present_revids)
 
182
            revs = self.repo.get_revisions(todo)
 
183
            pb = ui.ui_factory.nested_progress_bar()
 
184
 
158
185
            for i, revid in enumerate(graph.iter_topo_order(todo)):
159
186
                pb.update("updating cache", i, len(todo))
160
187
                rev = self.repo.get_revision(revid)
168
195
                changeset_text = self.get_changeset_text_by_revid(revid, rev,
169
196
                    manifest_id=manifest_id)
170
197
                changeset_id = hghash(changeset_text, *as_hg_parents(rev.parent_ids[:2], lambda x: self.lookup_changeset_id_by_revid(x)[0]))
171
 
                self.idmap.insert_revision(revid, manifest_id, changeset_id,
172
 
                                           self.mapping)
 
198
                self.idmap.insert_revision(revid, manifest_id, changeset_id, self.mapping)
 
199
                self._update_texts(revid)
173
200
        finally:
174
201
            pb.finished()
175
202
 
192
219
            return self.idmap.get_files_by_revid(revid)
193
220
        except KeyError:
194
221
            delta = self.repo.get_revision_delta(revid)
195
 
            inv = self.repo.get_inventory(revid)
196
 
            return files_from_delta(delta, inv, revid)
 
222
            tree = self.repo.revision_tree(revid)
 
223
            return files_from_delta(delta, tree, revid)
197
224
 
198
225
    def get_manifest_text(self, manifest_id):
199
226
        revid = self._lookup_revision_by_manifest_id(manifest_id)
200
227
        return self.get_manifest_text_by_revid(revid)
201
228
 
202
 
    def _get_file_fulltext(self, key):
 
229
    def get_file_fulltext(self, key):
203
230
        ret = "".join(self.repo.iter_files_bytes([key + (None,)]).next()[1])
204
231
        if ret == "": # could be a symlink
205
 
            ie = self.repo.get_inventory(key[1])[key[0]]
206
 
            if ie.kind == "symlink":
207
 
                return ie.symlink_target
 
232
            tree = self.repo.revision_tree(key[1])
 
233
            if tree.kind(key[0]) == "symlink":
 
234
                return tree.get_symlink_target(key[0])
208
235
        return ret
209
236
 
210
237
    def get_manifest_text_by_revid(self, revid):
340
367
            parent_map = self.repo.get_parent_map(all_revs)
341
368
            all_parents = set()
342
369
            map(all_parents.update, parent_map.itervalues())
343
 
            return set([self.lookup_changeset_id_by_revid(revid)[0] for revid in set(all_revs) - all_parents])
 
370
            return set([self.lookup_changeset_id_by_revid(revid)[0]
 
371
                        for revid in set(all_revs) - all_parents])
344
372
        finally:
345
373
            self.repo.unlock()
346
374