def __init__(self, url=None, format=None, control_dir=None): """Convert a Bazaar control directory to a given format. Either the url or control_dir parameter must be given. :param url: the URL of the control directory or None if the control_dir is explicitly given instead :param format: the format to convert to or None for the default :param control_dir: the control directory or None if it is specified via the URL parameter instead """ self.format = format # XXX: Change to cleanup warning_id = 'cross_format_fetch' saved_warning = warning_id in ui.ui_factory.suppressed_warnings if url is None and control_dir is None: raise AssertionError( "either the url or control_dir parameter must be set.") if control_dir is not None: self.bzrdir = control_dir else: self.bzrdir = ControlDir.open_unsupported(url) if isinstance(self.bzrdir, RemoteBzrDir): self.bzrdir._ensure_real() self.bzrdir = self.bzrdir._real_bzrdir if self.bzrdir.root_transport.is_readonly(): raise errors.UpgradeReadonly self.transport = self.bzrdir.root_transport ui.ui_factory.suppressed_warnings.add(warning_id) try: self.convert() finally: if not saved_warning: ui.ui_factory.suppressed_warnings.remove(warning_id)
def upgrade(url, format=None, clean_up=False, dry_run=False): """Upgrade locations to format. This routine wraps the smart_upgrade() routine with a nicer UI. In particular, it ensures all URLs can be opened before starting and reports a summary at the end if more than one upgrade was attempted. This routine is useful for command line tools. Other bzrlib clients probably ought to use smart_upgrade() instead. :param url: a URL of the locations to upgrade. :param format: the format to convert to or None for the best default :param clean-up: if True, the backup.bzr directory is removed if the upgrade succeeded for a given repo/branch/tree :param dry_run: show what would happen but don't actually do any upgrades :return: the list of exceptions encountered """ control_dirs = [ControlDir.open_unsupported(url)] attempted, succeeded, exceptions = smart_upgrade(control_dirs, format, clean_up=clean_up, dry_run=dry_run) if len(attempted) > 1: attempted_count = len(attempted) succeeded_count = len(succeeded) failed_count = attempted_count - succeeded_count ui.ui_factory.note( gettext('\nSUMMARY: {0} upgrades attempted, {1} succeeded,'\ ' {2} failed').format( attempted_count, succeeded_count, failed_count)) return exceptions