~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to multiparent/__init__.py

  • Committer: Aaron Bentley
  • Date: 2007-04-12 01:23:53 UTC
  • mto: (2520.4.1 bzr.mpbundle)
  • mto: This revision was merged to the branch mainline in revision 2631.
  • Revision ID: aaron.bentley@utoronto.ca-20070412012353-nd4p9jnnchr3gxjo
Convert to a plugin

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
import sys
3
3
 
4
4
from bzrlib import patiencediff
 
5
from bzrlib import ui
5
6
 
6
7
class MultiParent(object):
7
8
 
219
220
            return True
220
221
 
221
222
    def add_version(self, lines, version_id, parent_ids,
222
 
                    force_snapshot=None):
 
223
                    force_snapshot=None, single_parent=False):
223
224
        if force_snapshot is None:
224
225
            do_snapshot = self.do_snapshot(version_id, parent_ids)
225
226
        else:
228
229
            self._snapshots.add(version_id)
229
230
            diff = MultiParent([NewText(lines)])
230
231
        else:
231
 
            parent_lines = self.get_line_list(parent_ids)
 
232
            if single_parent:
 
233
                parent_lines = self.get_line_list(parent_ids[:1])
 
234
            else:
 
235
                parent_lines = self.get_line_list(parent_ids)
232
236
            diff = MultiParent.from_lines(lines, parent_lines)
233
237
        self.add_diff(diff, version_id, parent_ids)
234
238
        self._lines[version_id] = lines
237
241
        self._diffs[version_id] = diff
238
242
        self._parents[version_id] = parent_ids
239
243
 
240
 
    def import_versionedfile(self, vf, ft_set=None, no_cache=True,):
 
244
    def import_versionedfile(self, vf, snapshots, no_cache=True,
 
245
                             single_parent=False):
 
246
        """Import all revisions of a versionedfile
 
247
 
 
248
        :param vf: The versionedfile to import
 
249
        :param snapshots: If provided, the revisions to make snapshots of.
 
250
            Otherwise, this will be auto-determined
 
251
        :param no_cache: If true, clear the cache after every add.
 
252
        :param single_parent: If true, omit all but one parent text, (but
 
253
            retain parent metadata).
 
254
        """
241
255
        revisions = set(vf.versions())
242
256
        total = len(revisions)
243
 
        while len(revisions) > 0:
244
 
            added = set()
245
 
            for revision in revisions:
246
 
                parents = vf.get_parents(revision)
247
 
                if [p for p in parents if p not in self._diffs] != []:
248
 
                    continue
249
 
                lines = [a + ' ' + l for a, l in vf.annotate_iter(revision)]
250
 
                if ft_set is None:
251
 
                    force_snapshot = None
252
 
                else:
253
 
                    force_snapshot = (revision in ft_set)
254
 
                self.add_version(lines, revision, parents, force_snapshot)
255
 
                added.add(revision)
256
 
                if no_cache:
257
 
                    self.clear_cache()
258
 
            revisions = [r for r in revisions if r not in added]
259
 
            print >> sys.stderr, "%.1f %%" % ((((total - len(revisions))
260
 
                                               * 100.0) / total))
 
257
        pb = ui.ui_factory.nested_progress_bar()
 
258
        try:
 
259
            while len(revisions) > 0:
 
260
                added = set()
 
261
                for revision in revisions:
 
262
                    parents = vf.get_parents(revision)
 
263
                    if [p for p in parents if p not in self._diffs] != []:
 
264
                        continue
 
265
                    lines = [a + ' ' + l for a, l in
 
266
                             vf.annotate_iter(revision)]
 
267
                    if ft_set is None:
 
268
                        force_snapshot = None
 
269
                    else:
 
270
                        force_snapshot = (revision in ft_set)
 
271
                    self.add_version(lines, revision, parents, force_snapshot,
 
272
                                     single_parent)
 
273
                    added.add(revision)
 
274
                    if no_cache:
 
275
                        self.clear_cache()
 
276
                    pb.update('Importing revisions',
 
277
                              (total - len(revisions)) + len(added), total)
 
278
                revisions = [r for r in revisions if r not in added]
 
279
        finally:
 
280
            pb.finished()
261
281
 
262
282
    def clear_cache(self):
263
283
        self._lines.clear()