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