diff options
author | Paulo Koch <paulo.koch@gmail.com> | 2012-09-13 00:19:08 +0100 |
---|---|---|
committer | Paulo Koch <paulo.koch@gmail.com> | 2012-09-13 00:19:08 +0100 |
commit | 85097e081f3d987c7acf6ab51e29a307f4f8f167 (patch) | |
tree | 5891a4e702a4d3cacf2958592133c8c4f35d163c /setuptools/package_index.py | |
parent | 930b2596aaa267e9ba28bb5a1066b20d9e0fcfeb (diff) | |
download | external_python_setuptools-85097e081f3d987c7acf6ab51e29a307f4f8f167.tar.gz external_python_setuptools-85097e081f3d987c7acf6ab51e29a307f4f8f167.tar.bz2 external_python_setuptools-85097e081f3d987c7acf6ab51e29a307f4f8f167.zip |
Make revision specifiable.
--HG--
branch : distribute
extra : rebase_source : 059208b9bdcd9a0cf2c2f654f25b638a65f2d9d1
Diffstat (limited to 'setuptools/package_index.py')
-rwxr-xr-x | setuptools/package_index.py | 49 |
1 files changed, 40 insertions, 9 deletions
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): |