aboutsummaryrefslogtreecommitdiffstats
path: root/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs
diff options
context:
space:
mode:
Diffstat (limited to 'jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs')
-rw-r--r--jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/__init__.py258
-rw-r--r--jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/bazaar.py136
-rw-r--r--jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/git.py221
-rw-r--r--jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/mercurial.py153
-rw-r--r--jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/subversion.py285
5 files changed, 0 insertions, 1053 deletions
diff --git a/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/__init__.py b/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/__init__.py
deleted file mode 100644
index 87f49c7..0000000
--- a/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/__init__.py
+++ /dev/null
@@ -1,258 +0,0 @@
-"""Handles all VCS (version control) support"""
-
-import os
-import shutil
-
-from pip.backwardcompat import urlparse, urllib
-from pip.log import logger
-from pip.util import (display_path, backup_dir, find_command,
- rmtree, ask_path_exists)
-
-
-__all__ = ['vcs', 'get_src_requirement']
-
-
-class VcsSupport(object):
- _registry = {}
- schemes = ['ssh', 'git', 'hg', 'bzr', 'sftp', 'svn']
-
- def __init__(self):
- # Register more schemes with urlparse for various version control
- # systems
- urlparse.uses_netloc.extend(self.schemes)
- # Python >= 2.7.4, 3.3 doesn't have uses_fragment
- if getattr(urlparse, 'uses_fragment', None):
- urlparse.uses_fragment.extend(self.schemes)
- super(VcsSupport, self).__init__()
-
- def __iter__(self):
- return self._registry.__iter__()
-
- @property
- def backends(self):
- return list(self._registry.values())
-
- @property
- def dirnames(self):
- return [backend.dirname for backend in self.backends]
-
- @property
- def all_schemes(self):
- schemes = []
- for backend in self.backends:
- schemes.extend(backend.schemes)
- return schemes
-
- def register(self, cls):
- if not hasattr(cls, 'name'):
- logger.warn('Cannot register VCS %s' % cls.__name__)
- return
- if cls.name not in self._registry:
- self._registry[cls.name] = cls
-
- def unregister(self, cls=None, name=None):
- if name in self._registry:
- del self._registry[name]
- elif cls in self._registry.values():
- del self._registry[cls.name]
- else:
- logger.warn('Cannot unregister because no class or name given')
-
- def get_backend_name(self, location):
- """
- Return the name of the version control backend if found at given
- location, e.g. vcs.get_backend_name('/path/to/vcs/checkout')
- """
- for vc_type in self._registry.values():
- path = os.path.join(location, vc_type.dirname)
- if os.path.exists(path):
- return vc_type.name
- return None
-
- def get_backend(self, name):
- name = name.lower()
- if name in self._registry:
- return self._registry[name]
-
- def get_backend_from_location(self, location):
- vc_type = self.get_backend_name(location)
- if vc_type:
- return self.get_backend(vc_type)
- return None
-
-
-vcs = VcsSupport()
-
-
-class VersionControl(object):
- name = ''
- dirname = ''
-
- def __init__(self, url=None, *args, **kwargs):
- self.url = url
- self._cmd = None
- super(VersionControl, self).__init__(*args, **kwargs)
-
- def _filter(self, line):
- return (logger.INFO, line)
-
- def _is_local_repository(self, repo):
- """
- posix absolute paths start with os.path.sep,
- win32 ones ones start with drive (like c:\\folder)
- """
- drive, tail = os.path.splitdrive(repo)
- return repo.startswith(os.path.sep) or drive
-
- @property
- def cmd(self):
- if self._cmd is not None:
- return self._cmd
- command = find_command(self.name)
- logger.info('Found command %r at %r' % (self.name, command))
- self._cmd = command
- return command
-
- def get_url_rev(self):
- """
- Returns the correct repository URL and revision by parsing the given
- repository URL
- """
- error_message = (
- "Sorry, '%s' is a malformed VCS url. "
- "The format is <vcs>+<protocol>://<url>, "
- "e.g. svn+http://myrepo/svn/MyApp#egg=MyApp"
- )
- assert '+' in self.url, error_message % self.url
- url = self.url.split('+', 1)[1]
- scheme, netloc, path, query, frag = urlparse.urlsplit(url)
- rev = None
- if '@' in path:
- path, rev = path.rsplit('@', 1)
- url = urlparse.urlunsplit((scheme, netloc, path, query, ''))
- return url, rev
-
- def get_info(self, location):
- """
- Returns (url, revision), where both are strings
- """
- assert not location.rstrip('/').endswith(self.dirname), \
- 'Bad directory: %s' % location
- return self.get_url(location), self.get_revision(location)
-
- def normalize_url(self, url):
- """
- Normalize a URL for comparison by unquoting it and removing any
- trailing slash.
- """
- return urllib.unquote(url).rstrip('/')
-
- def compare_urls(self, url1, url2):
- """
- Compare two repo URLs for identity, ignoring incidental differences.
- """
- return (self.normalize_url(url1) == self.normalize_url(url2))
-
- def parse_vcs_bundle_file(self, content):
- """
- Takes the contents of the bundled text file that explains how to revert
- the stripped off version control data of the given package and returns
- the URL and revision of it.
- """
- raise NotImplementedError
-
- def obtain(self, dest):
- """
- Called when installing or updating an editable package, takes the
- source path of the checkout.
- """
- raise NotImplementedError
-
- def switch(self, dest, url, rev_options):
- """
- Switch the repo at ``dest`` to point to ``URL``.
- """
- raise NotImplemented
-
- def update(self, dest, rev_options):
- """
- Update an already-existing repo to the given ``rev_options``.
- """
- raise NotImplementedError
-
- def check_destination(self, dest, url, rev_options, rev_display):
- """
- Prepare a location to receive a checkout/clone.
-
- Return True if the location is ready for (and requires) a
- checkout/clone, False otherwise.
- """
- checkout = True
- prompt = False
- if os.path.exists(dest):
- checkout = False
- if os.path.exists(os.path.join(dest, self.dirname)):
- existing_url = self.get_url(dest)
- if self.compare_urls(existing_url, url):
- logger.info('%s in %s exists, and has correct URL (%s)' %
- (self.repo_name.title(), display_path(dest),
- url))
- logger.notify('Updating %s %s%s' %
- (display_path(dest), self.repo_name,
- rev_display))
- self.update(dest, rev_options)
- else:
- logger.warn('%s %s in %s exists with URL %s' %
- (self.name, self.repo_name,
- display_path(dest), existing_url))
- prompt = ('(s)witch, (i)gnore, (w)ipe, (b)ackup ',
- ('s', 'i', 'w', 'b'))
- else:
- logger.warn('Directory %s already exists, '
- 'and is not a %s %s.' %
- (dest, self.name, self.repo_name))
- prompt = ('(i)gnore, (w)ipe, (b)ackup ', ('i', 'w', 'b'))
- if prompt:
- logger.warn('The plan is to install the %s repository %s' %
- (self.name, url))
- response = ask_path_exists('What to do? %s' % prompt[0],
- prompt[1])
-
- if response == 's':
- logger.notify('Switching %s %s to %s%s' %
- (self.repo_name, display_path(dest), url,
- rev_display))
- self.switch(dest, url, rev_options)
- elif response == 'i':
- # do nothing
- pass
- elif response == 'w':
- logger.warn('Deleting %s' % display_path(dest))
- rmtree(dest)
- checkout = True
- elif response == 'b':
- dest_dir = backup_dir(dest)
- logger.warn('Backing up %s to %s'
- % (display_path(dest), dest_dir))
- shutil.move(dest, dest_dir)
- checkout = True
- return checkout
-
- def unpack(self, location):
- if os.path.exists(location):
- rmtree(location)
- self.obtain(location)
-
- def get_src_requirement(self, dist, location, find_tags=False):
- raise NotImplementedError
-
-
-def get_src_requirement(dist, location, find_tags):
- version_control = vcs.get_backend_from_location(location)
- if version_control:
- return version_control().get_src_requirement(dist, location, find_tags)
- logger.warn(
- 'cannot determine version of editable source in %s (is not SVN '
- 'checkout, Git clone, Mercurial clone or Bazaar branch)' % location
- )
- return dist.as_requirement()
diff --git a/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/bazaar.py b/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/bazaar.py
deleted file mode 100644
index 23f1944..0000000
--- a/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/bazaar.py
+++ /dev/null
@@ -1,136 +0,0 @@
-import os
-import tempfile
-import re
-from pip.backwardcompat import urlparse
-from pip.log import logger
-from pip.util import rmtree, display_path, call_subprocess
-from pip.vcs import vcs, VersionControl
-from pip.download import path_to_url
-
-
-class Bazaar(VersionControl):
- name = 'bzr'
- dirname = '.bzr'
- repo_name = 'branch'
- bundle_file = 'bzr-branch.txt'
- schemes = (
- 'bzr', 'bzr+http', 'bzr+https', 'bzr+ssh', 'bzr+sftp', 'bzr+ftp',
- 'bzr+lp',
- )
- guide = ('# This was a Bazaar branch; to make it a branch again run:\n'
- 'bzr branch -r %(rev)s %(url)s .\n')
-
- def __init__(self, url=None, *args, **kwargs):
- super(Bazaar, self).__init__(url, *args, **kwargs)
- # Python >= 2.7.4, 3.3 doesn't have uses_fragment or non_hierarchical
- # Register lp but do not expose as a scheme to support bzr+lp.
- if getattr(urlparse, 'uses_fragment', None):
- urlparse.uses_fragment.extend(['lp'])
- urlparse.non_hierarchical.extend(['lp'])
-
- def parse_vcs_bundle_file(self, content):
- url = rev = None
- for line in content.splitlines():
- if not line.strip() or line.strip().startswith('#'):
- continue
- match = re.search(r'^bzr\s*branch\s*-r\s*(\d*)', line)
- if match:
- rev = match.group(1).strip()
- url = line[match.end():].strip().split(None, 1)[0]
- if url and rev:
- return url, rev
- return None, None
-
- def export(self, location):
- """
- Export the Bazaar repository at the url to the destination location
- """
- temp_dir = tempfile.mkdtemp('-export', 'pip-')
- self.unpack(temp_dir)
- if os.path.exists(location):
- # Remove the location to make sure Bazaar can export it correctly
- rmtree(location)
- try:
- call_subprocess([self.cmd, 'export', location], cwd=temp_dir,
- filter_stdout=self._filter, show_stdout=False)
- finally:
- rmtree(temp_dir)
-
- def switch(self, dest, url, rev_options):
- call_subprocess([self.cmd, 'switch', url], cwd=dest)
-
- def update(self, dest, rev_options):
- call_subprocess(
- [self.cmd, 'pull', '-q'] + rev_options, cwd=dest)
-
- def obtain(self, dest):
- url, rev = self.get_url_rev()
- if rev:
- rev_options = ['-r', rev]
- rev_display = ' (to revision %s)' % rev
- else:
- rev_options = []
- rev_display = ''
- if self.check_destination(dest, url, rev_options, rev_display):
- logger.notify('Checking out %s%s to %s'
- % (url, rev_display, display_path(dest)))
- call_subprocess(
- [self.cmd, 'branch', '-q'] + rev_options + [url, dest])
-
- def get_url_rev(self):
- # hotfix the URL scheme after removing bzr+ from bzr+ssh:// readd it
- url, rev = super(Bazaar, self).get_url_rev()
- if url.startswith('ssh://'):
- url = 'bzr+' + url
- return url, rev
-
- def get_url(self, location):
- urls = call_subprocess(
- [self.cmd, 'info'], show_stdout=False, cwd=location)
- for line in urls.splitlines():
- line = line.strip()
- for x in ('checkout of branch: ',
- 'parent branch: '):
- if line.startswith(x):
- repo = line.split(x)[1]
- if self._is_local_repository(repo):
- return path_to_url(repo)
- return repo
- return None
-
- def get_revision(self, location):
- revision = call_subprocess(
- [self.cmd, 'revno'], show_stdout=False, cwd=location)
- return revision.splitlines()[-1]
-
- def get_tag_revs(self, location):
- tags = call_subprocess(
- [self.cmd, 'tags'], show_stdout=False, cwd=location)
- tag_revs = []
- for line in tags.splitlines():
- tags_match = re.search(r'([.\w-]+)\s*(.*)$', line)
- if tags_match:
- tag = tags_match.group(1)
- rev = tags_match.group(2)
- tag_revs.append((rev.strip(), tag.strip()))
- return dict(tag_revs)
-
- def get_src_requirement(self, dist, location, find_tags):
- repo = self.get_url(location)
- if not repo.lower().startswith('bzr:'):
- repo = 'bzr+' + repo
- egg_project_name = dist.egg_name().split('-', 1)[0]
- if not repo:
- return None
- current_rev = self.get_revision(location)
- tag_revs = self.get_tag_revs(location)
-
- if current_rev in tag_revs:
- # It's a tag
- full_egg_name = '%s-%s' % (egg_project_name, tag_revs[current_rev])
- else:
- full_egg_name = '%s-dev_r%s' % (dist.egg_name(), current_rev)
- return '%s@%s#egg=%s' % (repo, current_rev, full_egg_name)
-
-
-vcs.register(Bazaar)
diff --git a/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/git.py b/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/git.py
deleted file mode 100644
index a65fdad..0000000
--- a/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/git.py
+++ /dev/null
@@ -1,221 +0,0 @@
-import tempfile
-import re
-import os.path
-from pip.util import call_subprocess
-from pip.util import display_path, rmtree
-from pip.vcs import vcs, VersionControl
-from pip.log import logger
-from pip.backwardcompat import url2pathname, urlparse
-urlsplit = urlparse.urlsplit
-urlunsplit = urlparse.urlunsplit
-
-
-class Git(VersionControl):
- name = 'git'
- dirname = '.git'
- repo_name = 'clone'
- schemes = (
- 'git', 'git+http', 'git+https', 'git+ssh', 'git+git', 'git+file',
- )
- bundle_file = 'git-clone.txt'
- guide = ('# This was a Git repo; to make it a repo again run:\n'
- 'git init\ngit remote add origin %(url)s -f\ngit '
- 'checkout %(rev)s\n')
-
- def __init__(self, url=None, *args, **kwargs):
-
- # Works around an apparent Git bug
- # (see http://article.gmane.org/gmane.comp.version-control.git/146500)
- if url:
- scheme, netloc, path, query, fragment = urlsplit(url)
- if scheme.endswith('file'):
- initial_slashes = path[:-len(path.lstrip('/'))]
- newpath = (
- initial_slashes +
- url2pathname(path).replace('\\', '/').lstrip('/')
- )
- url = urlunsplit((scheme, netloc, newpath, query, fragment))
- after_plus = scheme.find('+') + 1
- url = scheme[:after_plus] + urlunsplit(
- (scheme[after_plus:], netloc, newpath, query, fragment),
- )
-
- super(Git, self).__init__(url, *args, **kwargs)
-
- def parse_vcs_bundle_file(self, content):
- url = rev = None
- for line in content.splitlines():
- if not line.strip() or line.strip().startswith('#'):
- continue
- url_match = re.search(
- r'git\s*remote\s*add\s*origin(.*)\s*-f',
- line,
- )
- if url_match:
- url = url_match.group(1).strip()
- rev_match = re.search(r'^git\s*checkout\s*-q\s*(.*)\s*', line)
- if rev_match:
- rev = rev_match.group(1).strip()
- if url and rev:
- return url, rev
- return None, None
-
- def export(self, location):
- """Export the Git repository at the url to the destination location"""
- temp_dir = tempfile.mkdtemp('-export', 'pip-')
- self.unpack(temp_dir)
- try:
- if not location.endswith('/'):
- location = location + '/'
- call_subprocess(
- [self.cmd, 'checkout-index', '-a', '-f', '--prefix', location],
- filter_stdout=self._filter, show_stdout=False, cwd=temp_dir)
- finally:
- rmtree(temp_dir)
-
- def check_rev_options(self, rev, dest, rev_options):
- """Check the revision options before checkout to compensate that tags
- and branches may need origin/ as a prefix.
- Returns the SHA1 of the branch or tag if found.
- """
- revisions = self.get_refs(dest)
-
- origin_rev = 'origin/%s' % rev
- if origin_rev in revisions:
- # remote branch
- return [revisions[origin_rev]]
- elif rev in revisions:
- # a local tag or branch name
- return [revisions[rev]]
- else:
- logger.warn(
- "Could not find a tag or branch '%s', assuming commit." % rev,
- )
- return rev_options
-
- def switch(self, dest, url, rev_options):
- call_subprocess(
- [self.cmd, 'config', 'remote.origin.url', url], cwd=dest)
- call_subprocess(
- [self.cmd, 'checkout', '-q'] + rev_options, cwd=dest)
-
- self.update_submodules(dest)
-
- def update(self, dest, rev_options):
- # First fetch changes from the default remote
- call_subprocess([self.cmd, 'fetch', '-q'], cwd=dest)
- # Then reset to wanted revision (maby even origin/master)
- if rev_options:
- rev_options = self.check_rev_options(
- rev_options[0], dest, rev_options,
- )
- call_subprocess(
- [self.cmd, 'reset', '--hard', '-q'] + rev_options,
- cwd=dest,
- )
- #: update submodules
- self.update_submodules(dest)
-
- def obtain(self, dest):
- url, rev = self.get_url_rev()
- if rev:
- rev_options = [rev]
- rev_display = ' (to %s)' % rev
- else:
- rev_options = ['origin/master']
- rev_display = ''
- if self.check_destination(dest, url, rev_options, rev_display):
- logger.notify(
- 'Cloning %s%s to %s' % (url, rev_display, display_path(dest)),
- )
- call_subprocess([self.cmd, 'clone', '-q', url, dest])
- #: repo may contain submodules
- self.update_submodules(dest)
- if rev:
- rev_options = self.check_rev_options(rev, dest, rev_options)
- # Only do a checkout if rev_options differs from HEAD
- if not self.get_revision(dest).startswith(rev_options[0]):
- call_subprocess(
- [self.cmd, 'checkout', '-q'] + rev_options,
- cwd=dest,
- )
-
- def get_url(self, location):
- url = call_subprocess(
- [self.cmd, 'config', 'remote.origin.url'],
- show_stdout=False, cwd=location)
- return url.strip()
-
- def get_revision(self, location):
- current_rev = call_subprocess(
- [self.cmd, 'rev-parse', 'HEAD'], show_stdout=False, cwd=location)
- return current_rev.strip()
-
- def get_refs(self, location):
- """Return map of named refs (branches or tags) to commit hashes."""
- output = call_subprocess([self.cmd, 'show-ref'],
- show_stdout=False, cwd=location)
- rv = {}
- for line in output.strip().splitlines():
- commit, ref = line.split(' ', 1)
- ref = ref.strip()
- ref_name = None
- if ref.startswith('refs/remotes/'):
- ref_name = ref[len('refs/remotes/'):]
- elif ref.startswith('refs/heads/'):
- ref_name = ref[len('refs/heads/'):]
- elif ref.startswith('refs/tags/'):
- ref_name = ref[len('refs/tags/'):]
- if ref_name is not None:
- rv[ref_name] = commit.strip()
- return rv
-
- def get_src_requirement(self, dist, location, find_tags):
- repo = self.get_url(location)
- if not repo.lower().startswith('git:'):
- repo = 'git+' + repo
- egg_project_name = dist.egg_name().split('-', 1)[0]
- if not repo:
- return None
- current_rev = self.get_revision(location)
- refs = self.get_refs(location)
- # refs maps names to commit hashes; we need the inverse
- # if multiple names map to a single commit, this arbitrarily picks one
- names_by_commit = dict((commit, ref) for ref, commit in refs.items())
-
- if current_rev in names_by_commit:
- # It's a tag
- full_egg_name = (
- '%s-%s' % (egg_project_name, names_by_commit[current_rev])
- )
- else:
- full_egg_name = '%s-dev' % egg_project_name
-
- return '%s@%s#egg=%s' % (repo, current_rev, full_egg_name)
-
- def get_url_rev(self):
- """
- Prefixes stub URLs like 'user@hostname:user/repo.git' with 'ssh://'.
- That's required because although they use SSH they sometimes doesn't
- work with a ssh:// scheme (e.g. Github). But we need a scheme for
- parsing. Hence we remove it again afterwards and return it as a stub.
- """
- if '://' not in self.url:
- assert 'file:' not in self.url
- self.url = self.url.replace('git+', 'git+ssh://')
- url, rev = super(Git, self).get_url_rev()
- url = url.replace('ssh://', '')
- else:
- url, rev = super(Git, self).get_url_rev()
-
- return url, rev
-
- def update_submodules(self, location):
- if not os.path.exists(os.path.join(location, '.gitmodules')):
- return
- call_subprocess(
- [self.cmd, 'submodule', 'update', '--init', '--recursive', '-q'],
- cwd=location,
- )
-
-vcs.register(Git)
diff --git a/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/mercurial.py b/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/mercurial.py
deleted file mode 100644
index 7597558..0000000
--- a/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/mercurial.py
+++ /dev/null
@@ -1,153 +0,0 @@
-import os
-import tempfile
-import re
-
-from pip.util import call_subprocess
-from pip.util import display_path, rmtree
-from pip.log import logger
-from pip.vcs import vcs, VersionControl
-from pip.download import path_to_url
-from pip.backwardcompat import ConfigParser
-
-
-class Mercurial(VersionControl):
- name = 'hg'
- dirname = '.hg'
- repo_name = 'clone'
- schemes = ('hg', 'hg+http', 'hg+https', 'hg+ssh', 'hg+static-http')
- bundle_file = 'hg-clone.txt'
- guide = ('# This was a Mercurial repo; to make it a repo again run:\n'
- 'hg init\nhg pull %(url)s\nhg update -r %(rev)s\n')
-
- def parse_vcs_bundle_file(self, content):
- url = rev = None
- for line in content.splitlines():
- if not line.strip() or line.strip().startswith('#'):
- continue
- url_match = re.search(r'hg\s*pull\s*(.*)\s*', line)
- if url_match:
- url = url_match.group(1).strip()
- rev_match = re.search(r'^hg\s*update\s*-r\s*(.*)\s*', line)
- if rev_match:
- rev = rev_match.group(1).strip()
- if url and rev:
- return url, rev
- return None, None
-
- def export(self, location):
- """Export the Hg repository at the url to the destination location"""
- temp_dir = tempfile.mkdtemp('-export', 'pip-')
- self.unpack(temp_dir)
- try:
- call_subprocess(
- [self.cmd, 'archive', location],
- filter_stdout=self._filter, show_stdout=False, cwd=temp_dir)
- finally:
- rmtree(temp_dir)
-
- def switch(self, dest, url, rev_options):
- repo_config = os.path.join(dest, self.dirname, 'hgrc')
- config = ConfigParser.SafeConfigParser()
- try:
- config.read(repo_config)
- config.set('paths', 'default', url)
- config_file = open(repo_config, 'w')
- config.write(config_file)
- config_file.close()
- except (OSError, ConfigParser.NoSectionError) as exc:
- logger.warn(
- 'Could not switch Mercurial repository to %s: %s'
- % (url, exc))
- else:
- call_subprocess([self.cmd, 'update', '-q'] + rev_options, cwd=dest)
-
- def update(self, dest, rev_options):
- call_subprocess([self.cmd, 'pull', '-q'], cwd=dest)
- call_subprocess(
- [self.cmd, 'update', '-q'] + rev_options, cwd=dest)
-
- def obtain(self, dest):
- url, rev = self.get_url_rev()
- if rev:
- rev_options = [rev]
- rev_display = ' (to revision %s)' % rev
- else:
- rev_options = []
- rev_display = ''
- if self.check_destination(dest, url, rev_options, rev_display):
- logger.notify('Cloning hg %s%s to %s'
- % (url, rev_display, display_path(dest)))
- call_subprocess([self.cmd, 'clone', '--noupdate', '-q', url, dest])
- call_subprocess([self.cmd, 'update', '-q'] + rev_options, cwd=dest)
-
- def get_url(self, location):
- url = call_subprocess(
- [self.cmd, 'showconfig', 'paths.default'],
- show_stdout=False, cwd=location).strip()
- if self._is_local_repository(url):
- url = path_to_url(url)
- return url.strip()
-
- def get_tag_revs(self, location):
- tags = call_subprocess(
- [self.cmd, 'tags'], show_stdout=False, cwd=location)
- tag_revs = []
- for line in tags.splitlines():
- tags_match = re.search(r'([\w\d\.-]+)\s*([\d]+):.*$', line)
- if tags_match:
- tag = tags_match.group(1)
- rev = tags_match.group(2)
- if "tip" != tag:
- tag_revs.append((rev.strip(), tag.strip()))
- return dict(tag_revs)
-
- def get_branch_revs(self, location):
- branches = call_subprocess(
- [self.cmd, 'branches'], show_stdout=False, cwd=location)
- branch_revs = []
- for line in branches.splitlines():
- branches_match = re.search(r'([\w\d\.-]+)\s*([\d]+):.*$', line)
- if branches_match:
- branch = branches_match.group(1)
- rev = branches_match.group(2)
- if "default" != branch:
- branch_revs.append((rev.strip(), branch.strip()))
- return dict(branch_revs)
-
- def get_revision(self, location):
- current_revision = call_subprocess(
- [self.cmd, 'parents', '--template={rev}'],
- show_stdout=False, cwd=location).strip()
- return current_revision
-
- def get_revision_hash(self, location):
- current_rev_hash = call_subprocess(
- [self.cmd, 'parents', '--template={node}'],
- show_stdout=False, cwd=location).strip()
- return current_rev_hash
-
- def get_src_requirement(self, dist, location, find_tags):
- repo = self.get_url(location)
- if not repo.lower().startswith('hg:'):
- repo = 'hg+' + repo
- egg_project_name = dist.egg_name().split('-', 1)[0]
- if not repo:
- return None
- current_rev = self.get_revision(location)
- current_rev_hash = self.get_revision_hash(location)
- tag_revs = self.get_tag_revs(location)
- branch_revs = self.get_branch_revs(location)
- if current_rev in tag_revs:
- # It's a tag
- full_egg_name = '%s-%s' % (egg_project_name, tag_revs[current_rev])
- elif current_rev in branch_revs:
- # It's the tip of a branch
- full_egg_name = '%s-%s' % (
- egg_project_name,
- branch_revs[current_rev],
- )
- else:
- full_egg_name = '%s-dev' % egg_project_name
- return '%s@%s#egg=%s' % (repo, current_rev_hash, full_egg_name)
-
-vcs.register(Mercurial)
diff --git a/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/subversion.py b/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/subversion.py
deleted file mode 100644
index a2f580b..0000000
--- a/jython-tosca-parser/src/main/resources/Lib/site-packages/pip/vcs/subversion.py
+++ /dev/null
@@ -1,285 +0,0 @@
-import os
-import re
-from pip.backwardcompat import urlparse
-from pip.util import rmtree, display_path, call_subprocess
-from pip.log import logger
-from pip.vcs import vcs, VersionControl
-
-_svn_xml_url_re = re.compile('url="([^"]+)"')
-_svn_rev_re = re.compile('committed-rev="(\d+)"')
-_svn_url_re = re.compile(r'URL: (.+)')
-_svn_revision_re = re.compile(r'Revision: (.+)')
-_svn_info_xml_rev_re = re.compile(r'\s*revision="(\d+)"')
-_svn_info_xml_url_re = re.compile(r'<url>(.*)</url>')
-
-
-class Subversion(VersionControl):
- name = 'svn'
- dirname = '.svn'
- repo_name = 'checkout'
- schemes = ('svn', 'svn+ssh', 'svn+http', 'svn+https', 'svn+svn')
- bundle_file = 'svn-checkout.txt'
- guide = ('# This was an svn checkout; to make it a checkout again run:\n'
- 'svn checkout --force -r %(rev)s %(url)s .\n')
-
- def get_info(self, location):
- """Returns (url, revision), where both are strings"""
- assert not location.rstrip('/').endswith(self.dirname), \
- 'Bad directory: %s' % location
- output = call_subprocess(
- [self.cmd, 'info', location],
- show_stdout=False,
- extra_environ={'LANG': 'C'},
- )
- match = _svn_url_re.search(output)
- if not match:
- logger.warn(
- 'Cannot determine URL of svn checkout %s' %
- display_path(location)
- )
- return None, None
- url = match.group(1).strip()
- match = _svn_revision_re.search(output)
- if not match:
- logger.warn(
- 'Cannot determine revision of svn checkout %s' %
- display_path(location)
- )
- logger.info('Output that cannot be parsed: \n%s' % output)
- return url, None
- return url, match.group(1)
-
- def parse_vcs_bundle_file(self, content):
- for line in content.splitlines():
- if not line.strip() or line.strip().startswith('#'):
- continue
- match = re.search(r'^-r\s*([^ ])?', line)
- if not match:
- return None, None
- rev = match.group(1)
- rest = line[match.end():].strip().split(None, 1)[0]
- return rest, rev
- return None, None
-
- def export(self, location):
- """Export the svn repository at the url to the destination location"""
- url, rev = self.get_url_rev()
- rev_options = get_rev_options(url, rev)
- logger.notify('Exporting svn repository %s to %s' % (url, location))
- logger.indent += 2
- try:
- if os.path.exists(location):
- # Subversion doesn't like to check out over an existing
- # directory --force fixes this, but was only added in svn 1.5
- rmtree(location)
- call_subprocess(
- [self.cmd, 'export'] + rev_options + [url, location],
- filter_stdout=self._filter, show_stdout=False)
- finally:
- logger.indent -= 2
-
- def switch(self, dest, url, rev_options):
- call_subprocess(
- [self.cmd, 'switch'] + rev_options + [url, dest])
-
- def update(self, dest, rev_options):
- call_subprocess(
- [self.cmd, 'update'] + rev_options + [dest])
-
- def obtain(self, dest):
- url, rev = self.get_url_rev()
- rev_options = get_rev_options(url, rev)
- if rev:
- rev_display = ' (to revision %s)' % rev
- else:
- rev_display = ''
- if self.check_destination(dest, url, rev_options, rev_display):
- logger.notify('Checking out %s%s to %s'
- % (url, rev_display, display_path(dest)))
- call_subprocess(
- [self.cmd, 'checkout', '-q'] + rev_options + [url, dest])
-
- def get_revision(self, location):
- """
- Return the maximum revision for all files under a given location
- """
- # Note: taken from setuptools.command.egg_info
- revision = 0
-
- for base, dirs, files in os.walk(location):
- if self.dirname not in dirs:
- dirs[:] = []
- continue # no sense walking uncontrolled subdirs
- dirs.remove(self.dirname)
- entries_fn = os.path.join(base, self.dirname, 'entries')
- if not os.path.exists(entries_fn):
- # FIXME: should we warn?
- continue
-
- dirurl, localrev = self._get_svn_url_rev(base)
-
- if base == location:
- base_url = dirurl + '/' # save the root url
- elif not dirurl or not dirurl.startswith(base_url):
- dirs[:] = []
- continue # not part of the same svn tree, skip it
- revision = max(revision, localrev)
- return revision
-
- def get_url_rev(self):
- # hotfix the URL scheme after removing svn+ from svn+ssh:// readd it
- url, rev = super(Subversion, self).get_url_rev()
- if url.startswith('ssh://'):
- url = 'svn+' + url
- return url, rev
-
- def get_url(self, location):
- # In cases where the source is in a subdirectory, not alongside
- # setup.py we have to look up in the location until we find a real
- # setup.py
- orig_location = location
- while not os.path.exists(os.path.join(location, 'setup.py')):
- last_location = location
- location = os.path.dirname(location)
- if location == last_location:
- # We've traversed up to the root of the filesystem without
- # finding setup.py
- logger.warn(
- "Could not find setup.py for directory %s (tried all "
- "parent directories)" %
- orig_location
- )
- return None
-
- return self._get_svn_url_rev(location)[0]
-
- def _get_svn_url_rev(self, location):
- from pip.exceptions import InstallationError
-
- f = open(os.path.join(location, self.dirname, 'entries'))
- data = f.read()
- f.close()
- if (data.startswith('8')
- or data.startswith('9')
- or data.startswith('10')):
- data = list(map(str.splitlines, data.split('\n\x0c\n')))
- del data[0][0] # get rid of the '8'
- url = data[0][3]
- revs = [int(d[9]) for d in data if len(d) > 9 and d[9]] + [0]
- elif data.startswith('<?xml'):
- match = _svn_xml_url_re.search(data)
- if not match:
- raise ValueError('Badly formatted data: %r' % data)
- url = match.group(1) # get repository URL
- revs = [int(m.group(1)) for m in _svn_rev_re.finditer(data)] + [0]
- else:
- try:
- # subversion >= 1.7
- xml = call_subprocess(
- [self.cmd, 'info', '--xml', location],
- show_stdout=False,
- )
- url = _svn_info_xml_url_re.search(xml).group(1)
- revs = [
- int(m.group(1)) for m in _svn_info_xml_rev_re.finditer(xml)
- ]
- except InstallationError:
- url, revs = None, []
-
- if revs:
- rev = max(revs)
- else:
- rev = 0
-
- return url, rev
-
- def get_tag_revs(self, svn_tag_url):
- stdout = call_subprocess(
- [self.cmd, 'ls', '-v', svn_tag_url], show_stdout=False)
- results = []
- for line in stdout.splitlines():
- parts = line.split()
- rev = int(parts[0])
- tag = parts[-1].strip('/')
- results.append((tag, rev))
- return results
-
- def find_tag_match(self, rev, tag_revs):
- best_match_rev = None
- best_tag = None
- for tag, tag_rev in tag_revs:
- if (tag_rev > rev and
- (best_match_rev is None or best_match_rev > tag_rev)):
- # FIXME: Is best_match > tag_rev really possible?
- # or is it a sign something is wacky?
- best_match_rev = tag_rev
- best_tag = tag
- return best_tag
-
- def get_src_requirement(self, dist, location, find_tags=False):
- repo = self.get_url(location)
- if repo is None:
- return None
- parts = repo.split('/')
- # FIXME: why not project name?
- egg_project_name = dist.egg_name().split('-', 1)[0]
- rev = self.get_revision(location)
- if parts[-2] in ('tags', 'tag'):
- # It's a tag, perfect!
- full_egg_name = '%s-%s' % (egg_project_name, parts[-1])
- elif parts[-2] in ('branches', 'branch'):
- # It's a branch :(
- full_egg_name = '%s-%s-r%s' % (dist.egg_name(), parts[-1], rev)
- elif parts[-1] == 'trunk':
- # Trunk :-/
- full_egg_name = '%s-dev_r%s' % (dist.egg_name(), rev)
- if find_tags:
- tag_url = '/'.join(parts[:-1]) + '/tags'
- tag_revs = self.get_tag_revs(tag_url)
- match = self.find_tag_match(rev, tag_revs)
- if match:
- logger.notify(
- 'trunk checkout %s seems to be equivalent to tag %s' %
- match
- )
- repo = '%s/%s' % (tag_url, match)
- full_egg_name = '%s-%s' % (egg_project_name, match)
- else:
- # Don't know what it is
- logger.warn(
- 'svn URL does not fit normal structure (tags/branches/trunk): '
- '%s' % repo
- )
- full_egg_name = '%s-dev_r%s' % (egg_project_name, rev)
- return 'svn+%s@%s#egg=%s' % (repo, rev, full_egg_name)
-
-
-def get_rev_options(url, rev):
- if rev:
- rev_options = ['-r', rev]
- else:
- rev_options = []
-
- r = urlparse.urlsplit(url)
- if hasattr(r, 'username'):
- # >= Python-2.5
- username, password = r.username, r.password
- else:
- netloc = r[1]
- if '@' in netloc:
- auth = netloc.split('@')[0]
- if ':' in auth:
- username, password = auth.split(':', 1)
- else:
- username, password = auth, None
- else:
- username, password = None, None
-
- if username:
- rev_options += ['--username', username]
- if password:
- rev_options += ['--password', password]
- return rev_options
-
-
-vcs.register(Subversion)