def getbundle(repo, store, heads, branch_names): if isinstance(repo, bundlerepo): bundle = repo._unbundler else: common = findcommon(repo, store, store.heads(branch_names)) logging.info('common: %s', common) bundle = None got_partial = False if not common: if not store._has_metadata and not store._graft: manifest = Git.config('cinnabar.clone') if manifest is None and repo.capable('cinnabarclone'): manifest = repo._call('cinnabarclone') if manifest: got_partial = do_cinnabarclone(repo, manifest, store) if not got_partial: if check_enabled('cinnabarclone'): raise Exception('cinnabarclone failed.') logging.warn('Falling back to normal clone.') if not got_partial and repo.capable('clonebundles'): bundle = get_clonebundle(repo) got_partial = bool(bundle) if not got_partial and check_enabled('clonebundles'): raise Exception('clonebundles failed.') if bundle: bundle = unbundler(bundle) # Manual move semantics apply_bundle = BundleApplier(bundle) del bundle apply_bundle(store) if not changegroup: BundleHelper.close() if got_partial: # Eliminate the heads that we got from the clonebundle or # cinnabarclone. heads = [h for h in heads if not store.changeset_ref(h)] if not heads: return common = findcommon(repo, store, store.heads(branch_names)) logging.info('common: %s', common) kwargs = {} if unbundle20 and repo.capable('bundle2'): bundle2caps = { 'HG20': (), 'changegroup': ('01', '02'), } kwargs['bundlecaps'] = set(( 'HG20', 'bundle2=%s' % urllib.quote(encodecaps(bundle2caps)))) bundle = repo.getbundle('bundle', heads=[unhexlify(h) for h in heads], common=[unhexlify(h) for h in common], **kwargs) bundle = unbundler(bundle) # Manual move semantics apply_bundle = BundleApplier(bundle) del bundle apply_bundle(store)
def get_bundle(url): reader = None if not changegroup: reader = BundleHelper.connect(url) if not reader: BundleHelper.close() if not reader: reader = HTTPReader(url) return unbundle_fh(reader, url)
def get_bundle(url): reader = None if not changegroup: reader = BundleHelper.connect(url) if not reader: BundleHelper.close() if not reader: disable_ssl = False if sys.platform == 'win32': disable_ssl = True reader = HTTPReader(url, disable_ssl=disable_ssl) return unbundle_fh(reader, url)
def get_clonebundle(repo): url = Git.config('cinnabar.clonebundle') if not url: url = get_clonebundle_url(repo) if not url: return None parsed_url = urlparse(url) if parsed_url.scheme not in ('http', 'https'): logging.warn('Server advertizes clone bundle but provided a non ' 'http/https url. Skipping.') return None sys.stderr.write('Getting clone bundle from %s\n' % url) reader = None if not changegroup: reader = BundleHelper.connect(url) if not reader: BundleHelper.close() if not reader: reader = HTTPReader(url) return unbundle_fh(reader, url)
def getbundle(repo, store, heads, branch_names): if isinstance(repo, bundlerepo): bundle = repo._unbundler else: common = findcommon(repo, store, store.heads(branch_names)) logging.info('common: %s', common) bundle = None got_partial = False if not common: if not store._has_metadata: manifest = Git.config('cinnabar.clone', remote=repo.remote) limit_schemes = False if manifest is None and repo.capable(b'cinnabarclone'): # If no cinnabar.clone config was given, but a # cinnabar.clonebundle config was, act as if an empty # cinnabar.clone config had been given, and proceed with # the mercurial clonebundle. if not Git.config('cinnabar.clonebundle', remote=repo.remote): manifest = repo._call(b'cinnabarclone') limit_schemes = True if manifest: got_partial = do_cinnabarclone(repo, manifest, store, limit_schemes) if not got_partial: if check_enabled('cinnabarclone'): raise Exception('cinnabarclone failed.') logging.warn('Falling back to normal clone.') if not got_partial and repo.capable(b'clonebundles'): bundle = get_clonebundle(repo) got_partial = bool(bundle) if not got_partial and check_enabled('clonebundles'): raise Exception('clonebundles failed.') if bundle: bundle = unbundler(bundle) # Manual move semantics apply_bundle = BundleApplier(bundle) del bundle apply_bundle(store) if not changegroup: BundleHelper.close() if got_partial: # Eliminate the heads that we got from the clonebundle or # cinnabarclone. heads = [h for h in heads if not store.changeset_ref(h)] if not heads: return common = findcommon(repo, store, store.heads(branch_names)) logging.info('common: %s', common) kwargs = {} if unbundle20 and repo.capable(b'bundle2'): bundle2caps = { b'HG20': (), b'changegroup': (b'01', b'02'), } kwargs['bundlecaps'] = set( (b'HG20', b'bundle2=%s' % quote_from_bytes(encodecaps(bundle2caps)).encode('ascii'))) bundle = repo.getbundle(b'bundle', heads=[unhexlify(h) for h in heads], common=[unhexlify(h) for h in common], **kwargs) bundle = unbundler(bundle) # Manual move semantics apply_bundle = BundleApplier(bundle) del bundle apply_bundle(store)
def getbundle(repo, store, heads, branch_names): if isinstance(repo, bundlerepo): bundle = repo._unbundler else: common = findcommon(repo, store, store.heads(branch_names)) logging.info('common: %s', common) bundle = None got_partial = False if not common: if not store._has_metadata and not store._graft: manifest = Git.config('cinnabar.clone') if not manifest and experiment('git-clone') and \ repo.capable('cinnabarclone'): manifest = repo._call('cinnabarclone') if manifest: got_partial = do_cinnabarclone(repo, manifest, store) if not got_partial: if check_enabled('cinnabarclone'): raise Exception('cinnabarclone failed.') logging.warn('Falling back to normal clone.') if not got_partial and repo.capable('clonebundles'): bundle = get_clonebundle(repo) got_partial = bool(bundle) if not got_partial and check_enabled('clonebundles'): raise Exception('clonebundles failed.') if bundle: bundle = unbundler(bundle) # Manual move semantics apply_bundle = BundleApplier(bundle) del bundle apply_bundle(store) if not changegroup: BundleHelper.close() if got_partial: # Eliminate the heads that we got from the clonebundle or # cinnabarclone. heads = [h for h in heads if not store.changeset_ref(h)] if not heads: return common = findcommon(repo, store, store.heads(branch_names)) logging.info('common: %s', common) kwargs = {} if unbundle20 and repo.capable('bundle2'): bundle2caps = { 'HG20': (), 'changegroup': ('01', '02'), } kwargs['bundlecaps'] = set(( 'HG20', 'bundle2=%s' % urllib.quote(encodecaps(bundle2caps)))) bundle = repo.getbundle('bundle', heads=[unhexlify(h) for h in heads], common=[unhexlify(h) for h in common], **kwargs) bundle = unbundler(bundle) # Manual move semantics apply_bundle = BundleApplier(bundle) del bundle apply_bundle(store)