354
def import_version(output_dir, version, fast=False,
356
def import_version(output_dir, version, printer, fancy=True, fast=False,
355
357
verbose=False, dry_run=False, max_count=None,
356
358
reuse_history_from=[], standalone=True):
358
360
>>> q = test_environ()
360
Progress bars output to stderr, but doctest does not capture that.
362
>>> old_stderr = sys.stderr
363
>>> sys.stderr = sys.stdout
365
361
>>> result_path = os.path.join(q, "result")
366
362
>>> commit_test_revisions()
367
363
>>> version = pybaz.Version("test@example.com/test--test--0.1")
368
>>> old_ui = bzrlib.ui.ui_factory
369
>>> bzrlib.ui.ui_factory = bzrlib.ui.text.TextUIFactory(
370
... bar_type=bzrlib.progress.DotsProgressBar)
372
>>> import_version('/', version, dry_run=True)
364
>>> def printer(message): print message
365
>>> import_version('/', version, printer, fancy=False, dry_run=True)
373
366
Traceback (most recent call last):
374
367
NotPreviousImport: / is not the location of a previous import.
375
>>> import_version(result_path, version, dry_run=True)
368
>>> import_version(result_path, version, printer, fancy=False, dry_run=True)
376
369
Traceback (most recent call last):
377
370
UserError: The version test@example.com/test--test--0.1 does not exist.
378
371
>>> version = pybaz.Version("test@example.com/test--test--0")
379
>>> import_version(result_path, version, dry_run=True) #doctest: +ELLIPSIS
380
importing test@example.com/test--test--0 into ...
382
revisions: ..........................................
372
>>> import_version(result_path, version, printer, fancy=False, dry_run=True)
383
375
Dry run, not modifying output_dir
385
>>> import_version(result_path, version) #doctest: +ELLIPSIS
386
importing test@example.com/test--test--0 into ...
388
revisions: .....................................................................
377
>>> import_version(result_path, version, printer, fancy=False)
391
>>> import_version(result_path, version) #doctest: +ELLIPSIS
382
>>> import_version(result_path, version, printer, fancy=False)
392
383
Tree is up-to-date with test@example.com/test--test--0--patch-2
393
384
>>> commit_more_test_revisions()
394
>>> import_version(result_path, version) #doctest: +ELLIPSIS
395
importing test@example.com/test--test--0 into ...
396
revisions: ....................................................
385
>>> import_version(result_path, version, printer, fancy=False)
399
>>> bzrlib.ui.ui_factory = old_ui
400
>>> sys.stderr = old_stderr
401
390
>>> teardown_environ(q)
393
ancestors, old_revno = get_remaining_revisions(output_dir, version,
395
except NotBranchError, e:
396
raise NotPreviousImport(e.path)
397
if old_revno is None and len(ancestors) == 0:
398
print 'Version %s has no revisions.' % version
400
if len(ancestors) == 0:
401
last_revision = get_last_revision(Branch.open(output_dir))
402
print 'Tree is up-to-date with %s' % last_revision
403
405
progress_bar = bzrlib.ui.ui_factory.nested_progress_bar()
406
tempdir = tempfile.mkdtemp(prefix="baz2bzr-",
407
dir=os.path.dirname(output_dir))
409
wt = WorkingTree.open(output_dir)
410
except (NotBranchError, NoWorkingTree):
413
old_basis = EmptyTree()
415
old_basis = wt.basis_tree()
406
ancestors, old_revno = get_remaining_revisions(output_dir, version,
408
except NotBranchError, e:
409
raise NotPreviousImport(e.path)
410
if old_revno is None and len(ancestors) == 0:
411
progress_bar.note('Version %s has no revisions.' % version)
413
if len(ancestors) == 0:
414
last_revision = get_last_revision(Branch.open(output_dir))
415
progress_bar.note('Tree is up-to-date with %s' % last_revision)
418
progress_bar.note("importing %s into %s" % (version, output_dir))
420
tempdir = tempfile.mkdtemp(prefix="baz2bzr-",
421
dir=os.path.dirname(output_dir))
420
for result in iter_import_version(output_dir, ancestors, tempdir,
421
progress_bar, fast=fast, verbose=verbose, dry_run=dry_run,
422
max_count=max_count, standalone=standalone):
424
show_progress(progress_bar, result)
426
sys.stdout.write('.')
429
progress_bar.finished()
431
sys.stdout.write('\n')
434
print 'Dry run, not modifying output_dir'
437
# Update the working tree of the branch
423
439
wt = WorkingTree.open(output_dir)
424
except (NotBranchError, NoWorkingTree):
440
except NoWorkingTree:
427
old_basis = EmptyTree()
429
old_basis = wt.basis_tree()
431
for result in iter_import_version(output_dir, ancestors, tempdir,
433
fast=fast, verbose=verbose, dry_run=dry_run,
434
max_count=max_count, standalone=standalone):
435
show_progress(progress_bar, result)
437
progress_bar.note('Dry run, not modifying output_dir')
440
# Update the working tree of the branch
442
wt = WorkingTree.open(output_dir)
443
except NoWorkingTree:
446
wt.set_last_revision(wt.branch.last_revision())
447
merge_inner(wt.branch, wt.basis_tree(), old_basis,
448
ignore_zero=True, this_tree=wt)
453
progress_bar.note('Cleaning up')
454
shutil.rmtree(tempdir)
455
progress_bar.note("Import complete.")
443
wt.set_last_revision(wt.branch.last_revision())
444
merge_inner(wt.branch, wt.basis_tree(), old_basis,
445
ignore_zero=True, this_tree=wt)
457
progress_bar.finished()
449
printer('Cleaning up')
450
shutil.rmtree(tempdir)
451
printer("Import complete.")
459
453
class UserError(BzrCommandError):
460
454
def __init__(self, message):
812
813
except NoRepositoryPresent:
813
814
raise BzrCommandError("Can't create repository at existing branch.")
814
815
versions = list(pybaz.Archive(str(from_archive)).iter_versions())
815
progress_bar = bzrlib.ui.ui_factory.nested_progress_bar()
816
# progress_bar = bzrlib.ui.ui_factory.nested_progress_bar()
817
818
for num, version in enumerate(versions):
818
progress_bar.update("Branch", num, len(versions))
819
# progress_bar.update("Branch", num, len(versions))
819
820
if not selected(version):
820
821
print "Skipping %s" % version
822
823
target = os.path.join(to_root, map_namespace(version))
824
printer("importing %s into %s" % (version, target))
823
825
if not os.path.exists(os.path.dirname(target)):
824
826
os.makedirs(os.path.dirname(target))
826
import_version(target, version,
828
import_version(target, version, printer,
827
829
reuse_history_from=reuse_history_from,
828
830
standalone=standalone)
829
831
except pybaz.errors.ExecProblem,e:
830
832
if str(e).find('The requested revision cannot be built.') != -1:
832
"Skipping version %s as it cannot be built due"
833
" to a missing parent archive." % version)
833
printer("Skipping version %s as it cannot be built due"
834
" to a missing parent archive." % version)
836
837
except UserError, e:
837
838
if str(e).find('already exists, and the last revision ') != -1:
839
"Skipping version %s as it has had commits made"
840
" since it was converted to bzr." % version)
839
printer("Skipping version %s as it has had commits made"
840
" since it was converted to bzr." % version)
844
progress_bar.finished()
845
# progress_bar.finished()
847
847
def map_namespace(a_version):
848
848
a_version = pybaz.Version("%s" % a_version)