26
27
from bzrlib.bzrdir import BzrDir, format_registry
27
28
from bzrlib.remote import RemoteBzrDir
28
from bzrlib.trace import mutter, note, warning
31
31
class Convert(object):
70
70
branch = self.bzrdir.open_branch()
71
71
if branch.user_url != self.bzrdir.user_url:
72
ui.ui_factory.note("This is a checkout. The branch (%s) needs to be "
73
"upgraded separately." %
73
'This is a checkout. The branch (%s) needs to be upgraded'
74
' separately.' % (branch.user_url,))
76
76
except (errors.NotBranchError, errors.IncompatibleRepositories):
77
77
# might not be a format we can open without upgrading; see e.g.
101
101
while self.bzrdir.needs_format_conversion(format):
102
102
converter = self.bzrdir._format.get_converter(format)
103
103
self.bzrdir = converter.convert(self.bzrdir, None)
104
ui.ui_factory.note("finished")
104
ui.ui_factory.note('finished')
106
106
def clean_up(self):
107
107
"""Clean-up after a conversion.
141
141
attempted_count = len(attempted)
142
142
succeeded_count = len(succeeded)
143
143
failed_count = attempted_count - succeeded_count
144
note("\nSUMMARY: %d upgrades attempted, %d succeeded, %d failed",
145
attempted_count, succeeded_count, failed_count)
145
'\nSUMMARY: %d upgrades attempted, %d succeeded, %d failed'
146
% (attempted_count, succeeded_count, failed_count))
146
147
return exceptions
195
196
# Do the conversions
196
197
attempted = [control_dir]
197
198
succeeded, exceptions = _convert_items([control_dir], format, clean_up,
198
dry_run, verbose=dependents)
199
200
if succeeded and dependents:
200
note("Found %d dependent branches - upgrading ...", len(dependents))
201
ui.ui_factory.note('Found %d dependent branches - upgrading ...'
202
% (len(dependents),))
202
203
# Convert dependent branches
203
204
branch_cdirs = [b.bzrdir for b in dependents]
204
205
successes, problems = _convert_items(branch_cdirs, format, clean_up,
211
212
return attempted, succeeded, exceptions
214
def _convert_items(items, format, clean_up, dry_run, label=None,
215
def _convert_items(items, format, clean_up, dry_run, label=None):
216
216
"""Convert a sequence of control directories to the given format.
218
218
:param items: the control directories to upgrade
221
221
upgrade succeeded for a given repo/branch/tree
222
222
:param dry_run: show what would happen but don't actually do any upgrades
223
223
:param label: the label for these items or None to calculate one
224
:param verbose: if True, output a message before starting and
225
display any problems encountered
226
224
:return: items successfully upgraded, exceptions
230
228
child_pb = ui.ui_factory.nested_progress_bar()
232
child_pb.update('Upgrading bzrdirs', i, len(items))
233
for control_dir in items:
229
child_pb.update('Upgrading bzrdirs', 0, len(items))
230
for i, control_dir in enumerate(items):
235
231
# Do the conversion
236
232
location = control_dir.root_transport.base
237
233
bzr_object, bzr_label = control_dir._get_object_and_label()
238
234
type_label = label or bzr_label
239
child_pb.update("Upgrading %s" % (type_label), i, len(items))
241
note("Upgrading %s %s ...", type_label, location)
235
child_pb.update("Upgrading %s" % (type_label), i+1, len(items))
236
ui.ui_factory.note('Upgrading %s %s ...' % (type_label, location,))
244
239
cv = Convert(control_dir=control_dir, format=format)
245
240
except Exception, ex:
246
_verbose_warning(verbose, "conversion error: %s" % ex)
241
trace.warning('conversion error: %s' % ex)
247
242
exceptions.append(ex)
251
246
succeeded.append(control_dir)
254
note("Removing backup ...")
249
ui.ui_factory.note('Removing backup ...')
257
252
except Exception, ex:
258
_verbose_warning(verbose, "failed to clean-up %s: %s" %
253
trace.warning('failed to clean-up %s: %s' % (location, ex))
260
254
exceptions.append(ex)
262
256
child_pb.finished()
264
258
# Return the result
265
259
return succeeded, exceptions
268
def _verbose_warning(verbose, msg):