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