aboutsummaryrefslogtreecommitdiffstats
path: root/setuptools/package_index.py
diff options
context:
space:
mode:
authorPaulo Koch <paulo.koch@gmail.com>2012-09-13 00:19:08 +0100
committerPaulo Koch <paulo.koch@gmail.com>2012-09-13 00:19:08 +0100
commit85097e081f3d987c7acf6ab51e29a307f4f8f167 (patch)
tree5891a4e702a4d3cacf2958592133c8c4f35d163c /setuptools/package_index.py
parent930b2596aaa267e9ba28bb5a1066b20d9e0fcfeb (diff)
downloadexternal_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-xsetuptools/package_index.py49
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):