From 85097e081f3d987c7acf6ab51e29a307f4f8f167 Mon Sep 17 00:00:00 2001 From: Paulo Koch Date: Thu, 13 Sep 2012 00:19:08 +0100 Subject: Make revision specifiable. --HG-- branch : distribute extra : rebase_source : 059208b9bdcd9a0cf2c2f654f25b638a65f2d9d1 --- setuptools/package_index.py | 49 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 9 deletions(-) (limited to 'setuptools/package_index.py') diff --git a/setuptools/package_index.py b/setuptools/package_index.py index cd89e9a6..e085732d 100755 --- a/setuptools/package_index.py +++ b/setuptools/package_index.py @@ -701,22 +701,53 @@ class PackageIndex(Environment): os.system("svn checkout -q %s %s" % (url, filename)) return filename + def _vcs_split_rev_from_url(self, url, pop_prefix=False): + scheme, netloc, path, query, frag = urlparse.urlsplit(url) + + scheme = scheme.split('+', 1)[-1] + + # Some fragment identification fails + path = path.split('#',1)[0] + + rev = None + if '@' in path: + path, rev = path.rsplit('@', 1) + + # Also, discard fragment + url = urlparse.urlunsplit((scheme, netloc, path, query, '')) + + return url, rev + def _download_git(self, url, filename): - if url.startswith('git+'): - url = url[4:] - url = url.split('#',1)[0] # remove any fragment for svn's sake - filename = filename.split('#',1)[0] # remove any fragment to get a decent name. + filename = filename.split('#',1)[0] + url, rev = self._vcs_split_rev_from_url(url, pop_prefix=True) + self.info("Doing git clone from %s to %s", url, filename) - os.system("git clone -q %s %s" % (url, filename)) + os.system("git clone --quiet %s %s" % (url, filename)) + + if rev is not None: + self.info("Checking out %s", rev) + os.system("(cd %s && git checkout --quiet %s)" % ( + filename, + rev, + )) + return filename def _download_hg(self, url, filename): - if url.startswith('hg+'): - url = url[3:] - url = url.split('#',1)[0] # remove any fragment for svn's sake - filename = filename.split('#',1)[0] # remove any fragment to get a decent name. + filename = filename.split('#',1)[0] + url, rev = self._vcs_split_rev_from_url(url, pop_prefix=True) + self.info("Doing hg clone from %s to %s", url, filename) os.system("hg clone --quiet %s %s" % (url, filename)) + + if rev is not None: + self.info("Updating to %s", rev) + os.system("(cd %s && hg up -C -r %s >&-)" % ( + filename, + rev, + )) + return filename def debug(self, msg, *args): -- cgit v1.2.3