def _getfile(self, tmpfile, filename, hash): (baseurl, authinfo) = url_.getauthinfo(self.url) url = bfutil.urljoin(baseurl, hash) try: request = urllib2.Request(url) infile = self.opener.open(request) except urllib2.HTTPError, err: detail = _("HTTP error: %s %s") % (err.code, err.msg) raise basestore.StoreError(filename, hash, url, detail)
def _activepath(self, remote): conf = config.config() try: rc = self.vfs.join('hgrc') except AttributeError: # old hg rc = self.join('hgrc') if os.path.exists(rc): with open(rc) as fp: conf.parse('.hgrc', fp.read(), include=conf.read) realpath = '' if 'paths' in conf: for path, uri in conf['paths'].items(): for s in schemes.schemes.iterkeys(): if uri.startswith('%s://' % s): # TODO: refactor schemes so we don't # duplicate this logic ui.note('performing schemes expansion with ' 'scheme %s\n' % s) scheme = hg.schemes[s] parts = uri.split('://', 1)[1].split('/', scheme.parts) if len(parts) > scheme.parts: tail = parts[-1] parts = parts[:-1] else: tail = '' context = dict((str(i+1), v) for i, v in enumerate(parts)) uri = ''.join(scheme.templater.process( scheme.url, context)) + tail uri = self.ui.expandpath(uri) if remote.local(): uri = os.path.realpath(uri) rpath = getattr(remote, 'root', None) if rpath is None: # Maybe a localpeer? (hg@1ac628cd7113, 2.3) rpath = getattr(getattr(remote, '_repo', None), 'root', None) else: rpath = getattr(remote, 'url', lambda : remote._url)() if uri.startswith('http'): try: uri = url.url(uri).authinfo()[0] except AttributeError: try: uri = util.url(uri).authinfo()[0] except AttributeError: uri = url.getauthinfo(uri)[0] uri = uri.rstrip('/') rpath = rpath.rstrip('/') if uri == rpath: realpath = path # prefer a non-default name to default if path != 'default': break return realpath
def __init__(self, ui, repo, remote): self.baseurl = bfutil.urljoin(remote.url(), 'bfile') try: # Mercurial >= 1.9 self.baseurl, authinfo = util.url(self.baseurl).authinfo() except AttributeError: # Mercurial <= 1.8 self.baseurl, authinfo = url_.getauthinfo(self.baseurl) self.opener = url_.opener(repo.ui, authinfo) super(kilnstore, self).__init__(ui, repo, remote.url())
def _verify(self, hash): baseurl, authinfo = url_.getauthinfo(self.url) store_path = bfutil.urljoin(baseurl, hash) request = urllib2.Request(store_path) request.add_header('SHA1-Request', hash) try: url = self.opener.open(request) if 'Content-SHA1' in url.info() and hash == url.info()['Content-SHA1']: return True else: return False except: return False
def _verify(self, hash): baseurl, authinfo = url_.getauthinfo(self.url) store_path = bfutil.urljoin(baseurl, hash) request = urllib2.Request(store_path) request.add_header('SHA1-Request', hash) try: url = self.opener.open(request) if 'Content-SHA1' in url.info() and hash == url.info( )['Content-SHA1']: return True else: return False except: return False
def _activepath(self, remote): conf = config.config() rc = self.join("hgrc") if os.path.exists(rc): fp = open(rc) conf.parse(".hgrc", fp.read()) fp.close() realpath = "" if "paths" in conf: for path, uri in conf["paths"].items(): for s in schemes.schemes.iterkeys(): if uri.startswith("%s://" % s): # TODO: refactor schemes so we don't # duplicate this logic ui.note("performing schemes expansion with " "scheme %s\n" % s) scheme = hg.schemes[s] parts = uri.split("://", 1)[1].split("/", scheme.parts) if len(parts) > scheme.parts: tail = parts[-1] parts = parts[:-1] else: tail = "" context = dict((str(i + 1), v) for i, v in enumerate(parts)) uri = "".join(scheme.templater.process(scheme.url, context)) + tail uri = self.ui.expandpath(uri) if remote.local(): uri = os.path.realpath(uri) rpath = getattr(remote, "root", None) if rpath is None: # Maybe a localpeer? (hg@1ac628cd7113, 2.3) rpath = getattr(getattr(remote, "_repo", None), "root", None) else: rpath = remote._url if uri.startswith("http"): try: uri = url.url(uri).authinfo()[0] except AttributeError: try: uri = util.url(uri).authinfo()[0] except AttributeError: uri = url.getauthinfo(uri)[0] uri = uri.rstrip("/") rpath = rpath.rstrip("/") if uri == rpath: realpath = path # prefer a non-default name to default if path != "default": break return realpath
def sendfile(self, filename, hash): if self._verify(hash): return self.ui.debug('httpstore.sendfile(%s, %s)\n' % (filename, hash)) baseurl, authinfo = url_.getauthinfo(self.url) fd = None try: fd = url_.httpsendfile(filename, 'rb') request = urllib2.Request(bfutil.urljoin(baseurl, hash), fd) try: url = self.opener.open(request) self.ui.note(_('[OK] %s/%s\n') % (self.rawurl, url.geturl())) except urllib2.HTTPError, e: raise util.Abort(_('unable to POST: %s\n') % e.msg) except Exception, e: raise util.Abort(_('%s') % e)
def _verifyfile(self, cctx, cset, contents, standin, verified): baseurl, authinfo = url_.getauthinfo(self.url) filename = bfutil.split_standin(standin) if not filename: return False fctx = cctx[standin] key = (filename, fctx.filenode()) if key in verified: return False expect_hash = fctx.data()[0:40] store_path = bfutil.urljoin(baseurl, expect_hash) verified.add(key) request = urllib2.Request(store_path) request.add_header('SHA1-Request', expect_hash) try: url = self.opener.open(request) if 'Content-SHA1' in url.info(): rhash = url.info()['Content-SHA1'] if rhash == expect_hash: return False else: self.ui.warn( _('changeset %s: %s: contents differ\n (%s)\n') % (cset, filename, store_path)) return True # failed else: self.ui.warn( _('remote did not send a hash, ' 'it probably does not understand this protocol\n')) return False except urllib2.HTTPError, e: if e.code == 404: self.ui.warn( _('changeset %s: %s missing\n (%s)\n') % (cset, filename, store_path)) return True # failed else: raise util.Abort( _('check failed, unexpected response' 'status: %d: %s') % (e.code, e.msg))
def _verifyfile(self, cctx, cset, contents, standin, verified): baseurl, authinfo = url_.getauthinfo(self.url) filename = bfutil.split_standin(standin) if not filename: return False fctx = cctx[standin] key = (filename, fctx.filenode()) if key in verified: return False expect_hash = fctx.data()[0:40] store_path = bfutil.urljoin(baseurl, expect_hash) verified.add(key) request = urllib2.Request(store_path) request.add_header('SHA1-Request',expect_hash) try: url = self.opener.open(request) if 'Content-SHA1' in url.info(): rhash = url.info()['Content-SHA1'] if rhash == expect_hash: return False else: self.ui.warn( _('changeset %s: %s: contents differ\n (%s)\n') % (cset, filename, store_path)) return True # failed else: self.ui.warn(_('remote did not send a hash, ' 'it probably does not understand this protocol\n')) return False except urllib2.HTTPError, e: if e.code == 404: self.ui.warn( _('changeset %s: %s missing\n (%s)\n') % (cset, filename, store_path)) return True # failed else: raise util.Abort(_('check failed, unexpected response' 'status: %d: %s') % (e.code, e.msg))
def spliturl(url): return url_.getauthinfo(url)
def __init__(self, ui, repo, url): url = bfutil.urljoin(url, 'bfile') super(httpstore, self).__init__(ui, repo, url) self.rawurl, self.path = urlparse.urlsplit(self.url)[1:3] (baseurl, authinfo) = url_.getauthinfo(self.url) self.opener = url_.opener(self.ui, authinfo)