diff --git a/treemanifest/__init__.py b/treemanifest/__init__.py --- a/treemanifest/__init__.py +++ b/treemanifest/__init__.py @@ -1001,7 +1001,7 @@ ('r', 'rev', '', _("revs to prefetch the trees for")), ('', 'base', '', _("revs that are assumed to already be local")), ] + commands.walkopts, _('--rev REVS PATTERN..')) -def prefetchtrees(ui, repo, *args, **opts): +def prefetchtreescmd(ui, repo, *args, **opts): revs = repo.revs(opts.get('rev')) baserevs = [] if opts.get('base'): @@ -1015,9 +1015,19 @@ for rev in baserevs: basemfnodes.add(repo[rev].manifestnode()) - _prefetchtrees(repo, '', mfnodes, basemfnodes, []) + prefetchtrees(repo, '', mfnodes, basemfnodes, []) def _prefetchtrees(repo, rootdir, mfnodes, basemfnodes, directories): + ''' + This is a legacy name for prefetchtrees(), to help transition other modules + that call this using the old (private) _prefetchtrees() name. + + This can be deleted once everything has been switched to use the public + prefetchtrees() name. + ''' + return prefetchtrees(repo, rootdir, mfnodes, basemfnodes, directories) + +def prefetchtrees(repo, rootdir, mfnodes, basemfnodes, directories): # If possible, use remotefilelog's more expressive fallbackpath if util.safehasattr(repo, 'fallbackpath'): fallbackpath = repo.fallbackpath @@ -1047,16 +1057,12 @@ (count, time.time() - start)) if missingnodes: - raise error.Abort(_("unable to download %d trees (%s,...)") % - (len(missingnodes), list(missingnodes)[0])) + raise MissingNodesError(missingnodes, + 'nodes missing from server response') except bundle2.AbortFromPart as exc: repo.ui.debug('remote: abort: %s\n' % exc) hexnodes = list(hex(mfnode) for mfnode in mfnodes) - nodestr = '\n'.join(hexnodes[:10]) - if len(hexnodes) > 10: - nodestr += '\n...' - raise error.Abort(_('unable to download the following trees from the ' - 'server:\n%s') % nodestr, hint=exc.hint) + raise MissingNodesError(hexnodes, hint=exc.hint) except error.BundleValueError as exc: raise error.Abort(_('missing support for %s') % exc) finally: @@ -1220,7 +1226,7 @@ if not basemfnodes: basemfnodes = _findrecenttree(repo, len(repo.changelog) - 1) - _prefetchtrees(repo, '', mfnodes, basemfnodes, []) + prefetchtrees(repo, '', mfnodes, basemfnodes, []) return result @@ -1471,7 +1477,7 @@ # Find a recent tree that we already have basemfnodes = _findrecenttree(self._repo, linkrev) - _prefetchtrees(self._repo, name, [node], basemfnodes, []) + prefetchtrees(self._repo, name, [node], basemfnodes, []) self._shared.markforrefresh() return self._shared.get(name, node) @@ -1579,3 +1585,15 @@ mfl.historystore) else: orig(self, part) + +class MissingNodesError(error.Abort): + def __init__(self, nodes, message=None, hint=None): + nodestr = '\n'.join(nodes[:10]) + if len(nodes) > 10: + nodestr += '\n...' + fullmessage = _( + 'unable to download the following trees from the server:') + if message is not None: + fullmessage += ' ' + message + fullmessage += '\n' + nodestr + super(MissingNodesError, self).__init__(fullmessage, hint=hint)