Merge branch 'master' into epel7
This commit is contained in:
commit
a78dc50b11
4
.gitignore
vendored
4
.gitignore
vendored
@ -5,3 +5,7 @@ pip-0.7.2.tar.gz
|
|||||||
/pip-1.0.2.tar.gz
|
/pip-1.0.2.tar.gz
|
||||||
/pip-1.1.tar.gz
|
/pip-1.1.tar.gz
|
||||||
/pip-1.3.1.tar.gz
|
/pip-1.3.1.tar.gz
|
||||||
|
/pip-1.4.1.tar.gz
|
||||||
|
/pip-1.5.4.tar.gz
|
||||||
|
/pip-1.5.6.tar.gz
|
||||||
|
/pip-1.5.6-tests.tar.gz
|
||||||
|
@ -1,36 +0,0 @@
|
|||||||
From ca207acb4fdea344bb3a775d44aa0d9f59ad31a1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Toshio Kuratomi <toshio@fedoraproject.org>
|
|
||||||
Date: Mon, 15 Jul 2013 10:58:20 -0700
|
|
||||||
Subject: [PATCH] fix for http://bugs.python.org/issue17980 in code backported
|
|
||||||
from the python3 stdlib
|
|
||||||
|
|
||||||
---
|
|
||||||
pip/backwardcompat/ssl_match_hostname.py | 10 +++++++++-
|
|
||||||
1 file changed, 9 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/pip/backwardcompat/ssl_match_hostname.py b/pip/backwardcompat/ssl_match_hostname.py
|
|
||||||
index 5707649..a6fadf4 100644
|
|
||||||
--- a/pip/backwardcompat/ssl_match_hostname.py
|
|
||||||
+++ b/pip/backwardcompat/ssl_match_hostname.py
|
|
||||||
@@ -7,9 +7,17 @@ __version__ = '3.2a3'
|
|
||||||
class CertificateError(ValueError):
|
|
||||||
pass
|
|
||||||
|
|
||||||
-def _dnsname_to_pat(dn):
|
|
||||||
+def _dnsname_to_pat(dn, max_wildcards=1):
|
|
||||||
pats = []
|
|
||||||
for frag in dn.split(r'.'):
|
|
||||||
+ if frag.count('*') > max_wildcards:
|
|
||||||
+ # Issue #17980: avoid denials of service by refusing more
|
|
||||||
+ # than one wildcard per fragment. A survery of established
|
|
||||||
+ # policy among SSL implementations showed it to be a
|
|
||||||
+ # reasonable choice.
|
|
||||||
+ raise CertificateError(
|
|
||||||
+ "too many wildcards in certificate DNS name: " + repr(dn))
|
|
||||||
+
|
|
||||||
if frag == '*':
|
|
||||||
# When '*' is a fragment by itself, it matches a non-empty dotless
|
|
||||||
# fragment.
|
|
||||||
--
|
|
||||||
1.7.11.7
|
|
||||||
|
|
395
local-dos.patch
Normal file
395
local-dos.patch
Normal file
@ -0,0 +1,395 @@
|
|||||||
|
diff --git a/pip/cmdoptions.py b/pip/cmdoptions.py
|
||||||
|
index 8ed3d91..01b2104 100644
|
||||||
|
--- a/pip/cmdoptions.py
|
||||||
|
+++ b/pip/cmdoptions.py
|
||||||
|
@@ -9,7 +9,7 @@ To be consistent, all options will follow this design.
|
||||||
|
"""
|
||||||
|
import copy
|
||||||
|
from optparse import OptionGroup, SUPPRESS_HELP, Option
|
||||||
|
-from pip.locations import build_prefix, default_log_file
|
||||||
|
+from pip.locations import default_log_file
|
||||||
|
|
||||||
|
|
||||||
|
def make_option_group(group, parser):
|
||||||
|
@@ -297,10 +297,8 @@ build_dir = OptionMaker(
|
||||||
|
'-b', '--build', '--build-dir', '--build-directory',
|
||||||
|
dest='build_dir',
|
||||||
|
metavar='dir',
|
||||||
|
- default=build_prefix,
|
||||||
|
- help='Directory to unpack packages into and build in. '
|
||||||
|
- 'The default in a virtualenv is "<venv path>/build". '
|
||||||
|
- 'The default for global installs is "<OS temp dir>/pip_build_<username>".')
|
||||||
|
+ help='Directory to unpack packages into and build in.',
|
||||||
|
+)
|
||||||
|
|
||||||
|
install_options = OptionMaker(
|
||||||
|
'--install-option',
|
||||||
|
diff --git a/pip/commands/install.py b/pip/commands/install.py
|
||||||
|
index cbf22a0..cb7d0db 100644
|
||||||
|
--- a/pip/commands/install.py
|
||||||
|
+++ b/pip/commands/install.py
|
||||||
|
@@ -10,6 +10,7 @@ from pip.basecommand import Command
|
||||||
|
from pip.index import PackageFinder
|
||||||
|
from pip.exceptions import InstallationError, CommandError, PreviousBuildDirError
|
||||||
|
from pip import cmdoptions
|
||||||
|
+from pip.util import BuildDirectory
|
||||||
|
|
||||||
|
|
||||||
|
class InstallCommand(Command):
|
||||||
|
@@ -188,7 +189,7 @@ class InstallCommand(Command):
|
||||||
|
if (
|
||||||
|
options.no_install or
|
||||||
|
options.no_download or
|
||||||
|
- (options.build_dir != build_prefix) or
|
||||||
|
+ options.build_dir or
|
||||||
|
options.no_clean
|
||||||
|
):
|
||||||
|
logger.deprecated('1.7', 'DEPRECATION: --no-install, --no-download, --build, '
|
||||||
|
@@ -197,7 +198,16 @@ class InstallCommand(Command):
|
||||||
|
if options.download_dir:
|
||||||
|
options.no_install = True
|
||||||
|
options.ignore_installed = True
|
||||||
|
- options.build_dir = os.path.abspath(options.build_dir)
|
||||||
|
+
|
||||||
|
+ # If we have --no-install or --no-download and no --build we use the
|
||||||
|
+ # legacy static build dir
|
||||||
|
+ if (options.build_dir is None
|
||||||
|
+ and (options.no_install or options.no_download)):
|
||||||
|
+ options.build_dir = build_prefix
|
||||||
|
+
|
||||||
|
+ if options.build_dir:
|
||||||
|
+ options.build_dir = os.path.abspath(options.build_dir)
|
||||||
|
+
|
||||||
|
options.src_dir = os.path.abspath(options.src_dir)
|
||||||
|
install_options = options.install_options or []
|
||||||
|
if options.use_user_site:
|
||||||
|
@@ -246,73 +256,75 @@ class InstallCommand(Command):
|
||||||
|
|
||||||
|
finder = self._build_package_finder(options, index_urls, session)
|
||||||
|
|
||||||
|
- requirement_set = RequirementSet(
|
||||||
|
- build_dir=options.build_dir,
|
||||||
|
- src_dir=options.src_dir,
|
||||||
|
- download_dir=options.download_dir,
|
||||||
|
- download_cache=options.download_cache,
|
||||||
|
- upgrade=options.upgrade,
|
||||||
|
- as_egg=options.as_egg,
|
||||||
|
- ignore_installed=options.ignore_installed,
|
||||||
|
- ignore_dependencies=options.ignore_dependencies,
|
||||||
|
- force_reinstall=options.force_reinstall,
|
||||||
|
- use_user_site=options.use_user_site,
|
||||||
|
- target_dir=temp_target_dir,
|
||||||
|
- session=session,
|
||||||
|
- pycompile=options.compile,
|
||||||
|
- )
|
||||||
|
- for name in args:
|
||||||
|
- requirement_set.add_requirement(
|
||||||
|
- InstallRequirement.from_line(name, None))
|
||||||
|
- for name in options.editables:
|
||||||
|
- requirement_set.add_requirement(
|
||||||
|
- InstallRequirement.from_editable(name, default_vcs=options.default_vcs))
|
||||||
|
- for filename in options.requirements:
|
||||||
|
- for req in parse_requirements(filename, finder=finder, options=options, session=session):
|
||||||
|
- requirement_set.add_requirement(req)
|
||||||
|
- if not requirement_set.has_requirements:
|
||||||
|
- opts = {'name': self.name}
|
||||||
|
- if options.find_links:
|
||||||
|
- msg = ('You must give at least one requirement to %(name)s '
|
||||||
|
- '(maybe you meant "pip %(name)s %(links)s"?)' %
|
||||||
|
- dict(opts, links=' '.join(options.find_links)))
|
||||||
|
- else:
|
||||||
|
- msg = ('You must give at least one requirement '
|
||||||
|
- 'to %(name)s (see "pip help %(name)s")' % opts)
|
||||||
|
- logger.warn(msg)
|
||||||
|
- return
|
||||||
|
-
|
||||||
|
- try:
|
||||||
|
- if not options.no_download:
|
||||||
|
- requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
|
||||||
|
- else:
|
||||||
|
- requirement_set.locate_files()
|
||||||
|
-
|
||||||
|
- if not options.no_install and not self.bundle:
|
||||||
|
- requirement_set.install(
|
||||||
|
- install_options,
|
||||||
|
- global_options,
|
||||||
|
- root=options.root_path,
|
||||||
|
- strip_file_prefix=options.strip_file_prefix)
|
||||||
|
- installed = ' '.join([req.name for req in
|
||||||
|
- requirement_set.successfully_installed])
|
||||||
|
- if installed:
|
||||||
|
- logger.notify('Successfully installed %s' % installed)
|
||||||
|
- elif not self.bundle:
|
||||||
|
- downloaded = ' '.join([req.name for req in
|
||||||
|
- requirement_set.successfully_downloaded])
|
||||||
|
- if downloaded:
|
||||||
|
- logger.notify('Successfully downloaded %s' % downloaded)
|
||||||
|
- elif self.bundle:
|
||||||
|
- requirement_set.create_bundle(self.bundle_filename)
|
||||||
|
- logger.notify('Created bundle in %s' % self.bundle_filename)
|
||||||
|
- except PreviousBuildDirError:
|
||||||
|
- options.no_clean = True
|
||||||
|
- raise
|
||||||
|
- finally:
|
||||||
|
- # Clean up
|
||||||
|
- if (not options.no_clean) and ((not options.no_install) or options.download_dir):
|
||||||
|
- requirement_set.cleanup_files(bundle=self.bundle)
|
||||||
|
+ build_delete = (not (options.no_clean or options.build_dir))
|
||||||
|
+ with BuildDirectory(options.build_dir, delete=build_delete) as build_dir:
|
||||||
|
+ requirement_set = RequirementSet(
|
||||||
|
+ build_dir=build_dir,
|
||||||
|
+ src_dir=options.src_dir,
|
||||||
|
+ download_dir=options.download_dir,
|
||||||
|
+ download_cache=options.download_cache,
|
||||||
|
+ upgrade=options.upgrade,
|
||||||
|
+ as_egg=options.as_egg,
|
||||||
|
+ ignore_installed=options.ignore_installed,
|
||||||
|
+ ignore_dependencies=options.ignore_dependencies,
|
||||||
|
+ force_reinstall=options.force_reinstall,
|
||||||
|
+ use_user_site=options.use_user_site,
|
||||||
|
+ target_dir=temp_target_dir,
|
||||||
|
+ session=session,
|
||||||
|
+ pycompile=options.compile,
|
||||||
|
+ )
|
||||||
|
+ for name in args:
|
||||||
|
+ requirement_set.add_requirement(
|
||||||
|
+ InstallRequirement.from_line(name, None))
|
||||||
|
+ for name in options.editables:
|
||||||
|
+ requirement_set.add_requirement(
|
||||||
|
+ InstallRequirement.from_editable(name, default_vcs=options.default_vcs))
|
||||||
|
+ for filename in options.requirements:
|
||||||
|
+ for req in parse_requirements(filename, finder=finder, options=options, session=session):
|
||||||
|
+ requirement_set.add_requirement(req)
|
||||||
|
+ if not requirement_set.has_requirements:
|
||||||
|
+ opts = {'name': self.name}
|
||||||
|
+ if options.find_links:
|
||||||
|
+ msg = ('You must give at least one requirement to %(name)s '
|
||||||
|
+ '(maybe you meant "pip %(name)s %(links)s"?)' %
|
||||||
|
+ dict(opts, links=' '.join(options.find_links)))
|
||||||
|
+ else:
|
||||||
|
+ msg = ('You must give at least one requirement '
|
||||||
|
+ 'to %(name)s (see "pip help %(name)s")' % opts)
|
||||||
|
+ logger.warn(msg)
|
||||||
|
+ return
|
||||||
|
+
|
||||||
|
+ try:
|
||||||
|
+ if not options.no_download:
|
||||||
|
+ requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
|
||||||
|
+ else:
|
||||||
|
+ requirement_set.locate_files()
|
||||||
|
+
|
||||||
|
+ if not options.no_install and not self.bundle:
|
||||||
|
+ requirement_set.install(
|
||||||
|
+ install_options,
|
||||||
|
+ global_options,
|
||||||
|
+ root=options.root_path,
|
||||||
|
+ strip_file_prefix=options.strip_file_prefix)
|
||||||
|
+ installed = ' '.join([req.name for req in
|
||||||
|
+ requirement_set.successfully_installed])
|
||||||
|
+ if installed:
|
||||||
|
+ logger.notify('Successfully installed %s' % installed)
|
||||||
|
+ elif not self.bundle:
|
||||||
|
+ downloaded = ' '.join([req.name for req in
|
||||||
|
+ requirement_set.successfully_downloaded])
|
||||||
|
+ if downloaded:
|
||||||
|
+ logger.notify('Successfully downloaded %s' % downloaded)
|
||||||
|
+ elif self.bundle:
|
||||||
|
+ requirement_set.create_bundle(self.bundle_filename)
|
||||||
|
+ logger.notify('Created bundle in %s' % self.bundle_filename)
|
||||||
|
+ except PreviousBuildDirError:
|
||||||
|
+ options.no_clean = True
|
||||||
|
+ raise
|
||||||
|
+ finally:
|
||||||
|
+ # Clean up
|
||||||
|
+ if (not options.no_clean) and ((not options.no_install) or options.download_dir):
|
||||||
|
+ requirement_set.cleanup_files(bundle=self.bundle)
|
||||||
|
|
||||||
|
if options.target_dir:
|
||||||
|
if not os.path.exists(options.target_dir):
|
||||||
|
diff --git a/pip/commands/wheel.py b/pip/commands/wheel.py
|
||||||
|
index 6527063..a96631a 100644
|
||||||
|
--- a/pip/commands/wheel.py
|
||||||
|
+++ b/pip/commands/wheel.py
|
||||||
|
@@ -8,7 +8,7 @@ from pip.index import PackageFinder
|
||||||
|
from pip.log import logger
|
||||||
|
from pip.exceptions import CommandError, PreviousBuildDirError
|
||||||
|
from pip.req import InstallRequirement, RequirementSet, parse_requirements
|
||||||
|
-from pip.util import normalize_path
|
||||||
|
+from pip.util import BuildDirectory, normalize_path
|
||||||
|
from pip.wheel import WheelBuilder
|
||||||
|
from pip import cmdoptions
|
||||||
|
|
||||||
|
@@ -123,6 +123,9 @@ class WheelCommand(Command):
|
||||||
|
"--extra-index-url is suggested.")
|
||||||
|
index_urls += options.mirrors
|
||||||
|
|
||||||
|
+ if options.build_dir:
|
||||||
|
+ options.build_dir = os.path.abspath(options.build_dir)
|
||||||
|
+
|
||||||
|
session = self._build_session(options)
|
||||||
|
|
||||||
|
finder = PackageFinder(find_links=options.find_links,
|
||||||
|
@@ -137,59 +140,60 @@ class WheelCommand(Command):
|
||||||
|
session=session,
|
||||||
|
)
|
||||||
|
|
||||||
|
- options.build_dir = os.path.abspath(options.build_dir)
|
||||||
|
- requirement_set = RequirementSet(
|
||||||
|
- build_dir=options.build_dir,
|
||||||
|
- src_dir=None,
|
||||||
|
- download_dir=None,
|
||||||
|
- download_cache=options.download_cache,
|
||||||
|
- ignore_dependencies=options.ignore_dependencies,
|
||||||
|
- ignore_installed=True,
|
||||||
|
- session=session,
|
||||||
|
- wheel_download_dir=options.wheel_dir
|
||||||
|
- )
|
||||||
|
-
|
||||||
|
- # make the wheelhouse
|
||||||
|
- if not os.path.exists(options.wheel_dir):
|
||||||
|
- os.makedirs(options.wheel_dir)
|
||||||
|
-
|
||||||
|
- #parse args and/or requirements files
|
||||||
|
- for name in args:
|
||||||
|
- requirement_set.add_requirement(
|
||||||
|
- InstallRequirement.from_line(name, None))
|
||||||
|
-
|
||||||
|
- for filename in options.requirements:
|
||||||
|
- for req in parse_requirements(
|
||||||
|
- filename,
|
||||||
|
- finder=finder,
|
||||||
|
- options=options,
|
||||||
|
- session=session):
|
||||||
|
- if req.editable:
|
||||||
|
- logger.notify("ignoring %s" % req.url)
|
||||||
|
- continue
|
||||||
|
- requirement_set.add_requirement(req)
|
||||||
|
-
|
||||||
|
- #fail if no requirements
|
||||||
|
- if not requirement_set.has_requirements:
|
||||||
|
- opts = {'name': self.name}
|
||||||
|
- msg = ('You must give at least one requirement '
|
||||||
|
- 'to %(name)s (see "pip help %(name)s")' % opts)
|
||||||
|
- logger.error(msg)
|
||||||
|
- return
|
||||||
|
+ build_delete = (not (options.no_clean or options.build_dir))
|
||||||
|
+ with BuildDirectory(options.build_dir, delete=build_delete) as build_dir:
|
||||||
|
+ requirement_set = RequirementSet(
|
||||||
|
+ build_dir=build_dir,
|
||||||
|
+ src_dir=None,
|
||||||
|
+ download_dir=None,
|
||||||
|
+ download_cache=options.download_cache,
|
||||||
|
+ ignore_dependencies=options.ignore_dependencies,
|
||||||
|
+ ignore_installed=True,
|
||||||
|
+ session=session,
|
||||||
|
+ wheel_download_dir=options.wheel_dir
|
||||||
|
+ )
|
||||||
|
|
||||||
|
- try:
|
||||||
|
- #build wheels
|
||||||
|
- wb = WheelBuilder(
|
||||||
|
- requirement_set,
|
||||||
|
- finder,
|
||||||
|
- options.wheel_dir,
|
||||||
|
- build_options = options.build_options or [],
|
||||||
|
- global_options = options.global_options or []
|
||||||
|
- )
|
||||||
|
- wb.build()
|
||||||
|
- except PreviousBuildDirError:
|
||||||
|
- options.no_clean = True
|
||||||
|
- raise
|
||||||
|
- finally:
|
||||||
|
- if not options.no_clean:
|
||||||
|
- requirement_set.cleanup_files()
|
||||||
|
+ # make the wheelhouse
|
||||||
|
+ if not os.path.exists(options.wheel_dir):
|
||||||
|
+ os.makedirs(options.wheel_dir)
|
||||||
|
+
|
||||||
|
+ #parse args and/or requirements files
|
||||||
|
+ for name in args:
|
||||||
|
+ requirement_set.add_requirement(
|
||||||
|
+ InstallRequirement.from_line(name, None))
|
||||||
|
+
|
||||||
|
+ for filename in options.requirements:
|
||||||
|
+ for req in parse_requirements(
|
||||||
|
+ filename,
|
||||||
|
+ finder=finder,
|
||||||
|
+ options=options,
|
||||||
|
+ session=session):
|
||||||
|
+ if req.editable:
|
||||||
|
+ logger.notify("ignoring %s" % req.url)
|
||||||
|
+ continue
|
||||||
|
+ requirement_set.add_requirement(req)
|
||||||
|
+
|
||||||
|
+ #fail if no requirements
|
||||||
|
+ if not requirement_set.has_requirements:
|
||||||
|
+ opts = {'name': self.name}
|
||||||
|
+ msg = ('You must give at least one requirement '
|
||||||
|
+ 'to %(name)s (see "pip help %(name)s")' % opts)
|
||||||
|
+ logger.error(msg)
|
||||||
|
+ return
|
||||||
|
+
|
||||||
|
+ try:
|
||||||
|
+ #build wheels
|
||||||
|
+ wb = WheelBuilder(
|
||||||
|
+ requirement_set,
|
||||||
|
+ finder,
|
||||||
|
+ options.wheel_dir,
|
||||||
|
+ build_options = options.build_options or [],
|
||||||
|
+ global_options = options.global_options or []
|
||||||
|
+ )
|
||||||
|
+ wb.build()
|
||||||
|
+ except PreviousBuildDirError:
|
||||||
|
+ options.no_clean = True
|
||||||
|
+ raise
|
||||||
|
+ finally:
|
||||||
|
+ if not options.no_clean:
|
||||||
|
+ requirement_set.cleanup_files()
|
||||||
|
diff --git a/pip/util.py b/pip/util.py
|
||||||
|
index f459bb2..f5edeeb 100644
|
||||||
|
--- a/pip/util.py
|
||||||
|
+++ b/pip/util.py
|
||||||
|
@@ -8,6 +8,7 @@ import zipfile
|
||||||
|
import tarfile
|
||||||
|
import subprocess
|
||||||
|
import textwrap
|
||||||
|
+import tempfile
|
||||||
|
|
||||||
|
from pip.exceptions import InstallationError, BadCommand, PipError
|
||||||
|
from pip.backwardcompat import(WindowsError, string_types, raw_input,
|
||||||
|
@@ -718,3 +719,35 @@ def is_prerelease(vers):
|
||||||
|
|
||||||
|
parsed = version._normalized_key(normalized)
|
||||||
|
return any([any([y in set(["a", "b", "c", "rc", "dev"]) for y in x]) for x in parsed])
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+class BuildDirectory(object):
|
||||||
|
+
|
||||||
|
+ def __init__(self, name=None, delete=None):
|
||||||
|
+ # If we were not given an explicit directory, and we were not given an
|
||||||
|
+ # explicit delete option, then we'll default to deleting.
|
||||||
|
+ if name is None and delete is None:
|
||||||
|
+ delete = True
|
||||||
|
+
|
||||||
|
+ if name is None:
|
||||||
|
+ name = tempfile.mkdtemp(prefix="pip-build-")
|
||||||
|
+ # If we were not given an explicit directory, and we were not given
|
||||||
|
+ # an explicit delete option, then we'll default to deleting.
|
||||||
|
+ if delete is None:
|
||||||
|
+ delete = True
|
||||||
|
+
|
||||||
|
+ self.name = name
|
||||||
|
+ self.delete = delete
|
||||||
|
+
|
||||||
|
+ def __repr__(self):
|
||||||
|
+ return "<{} {!r}>".format(self.__class__.__name__, self.name)
|
||||||
|
+
|
||||||
|
+ def __enter__(self):
|
||||||
|
+ return self.name
|
||||||
|
+
|
||||||
|
+ def __exit__(self, exc, value, tb):
|
||||||
|
+ self.cleanup()
|
||||||
|
+
|
||||||
|
+ def cleanup(self):
|
||||||
|
+ if self.delete:
|
||||||
|
+ rmtree(self.name)
|
102
pip-1.5rc1-allow-stripping-prefix-from-wheel-RECORD-files.patch
Normal file
102
pip-1.5rc1-allow-stripping-prefix-from-wheel-RECORD-files.patch
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
commit aefacbb76661520415a1c35028f2984e70cfe0bf
|
||||||
|
Author: Slavek Kabrda <bkabrda@redhat.com>
|
||||||
|
Date: Fri Nov 29 13:24:58 2013 +0100
|
||||||
|
|
||||||
|
Allow stripping given prefix from wheel RECORD files
|
||||||
|
|
||||||
|
diff --git a/pip/commands/install.py b/pip/commands/install.py
|
||||||
|
index 1693d01..0287c06 100644
|
||||||
|
--- a/pip/commands/install.py
|
||||||
|
+++ b/pip/commands/install.py
|
||||||
|
@@ -137,6 +137,14 @@ class InstallCommand(Command):
|
||||||
|
help="Install everything relative to this alternate root directory.")
|
||||||
|
|
||||||
|
cmd_opts.add_option(
|
||||||
|
+ '--strip-file-prefix',
|
||||||
|
+ dest='strip_file_prefix',
|
||||||
|
+ metavar='prefix',
|
||||||
|
+ default=None,
|
||||||
|
+ help="Strip given prefix from script paths in wheel RECORD."
|
||||||
|
+ )
|
||||||
|
+
|
||||||
|
+ cmd_opts.add_option(
|
||||||
|
"--compile",
|
||||||
|
action="store_true",
|
||||||
|
dest="compile",
|
||||||
|
@@ -273,7 +281,11 @@ class InstallCommand(Command):
|
||||||
|
requirement_set.locate_files()
|
||||||
|
|
||||||
|
if not options.no_install and not self.bundle:
|
||||||
|
- requirement_set.install(install_options, global_options, root=options.root_path)
|
||||||
|
+ requirement_set.install(
|
||||||
|
+ install_options,
|
||||||
|
+ global_options,
|
||||||
|
+ root=options.root_path,
|
||||||
|
+ strip_file_prefix=options.strip_file_prefix)
|
||||||
|
installed = ' '.join([req.name for req in
|
||||||
|
requirement_set.successfully_installed])
|
||||||
|
if installed:
|
||||||
|
diff --git a/pip/req.py b/pip/req.py
|
||||||
|
index 3ae306d..c171130 100644
|
||||||
|
--- a/pip/req.py
|
||||||
|
+++ b/pip/req.py
|
||||||
|
@@ -615,15 +615,19 @@ exec(compile(open(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))
|
||||||
|
name = name.replace(os.path.sep, '/')
|
||||||
|
return name
|
||||||
|
|
||||||
|
- def install(self, install_options, global_options=(), root=None):
|
||||||
|
+ def install(self, install_options, global_options=(), root=None, strip_file_prefix=None):
|
||||||
|
if self.editable:
|
||||||
|
self.install_editable(install_options, global_options)
|
||||||
|
return
|
||||||
|
if self.is_wheel:
|
||||||
|
version = pip.wheel.wheel_version(self.source_dir)
|
||||||
|
pip.wheel.check_compatibility(version, self.name)
|
||||||
|
|
||||||
|
- self.move_wheel_files(self.source_dir, root=root)
|
||||||
|
+ self.move_wheel_files(
|
||||||
|
+ self.source_dir,
|
||||||
|
+ root=root,
|
||||||
|
+ strip_file_prefix=strip_file_prefix
|
||||||
|
+ )
|
||||||
|
self.install_succeeded = True
|
||||||
|
return
|
||||||
|
|
||||||
|
@@ -844,13 +848,14 @@ exec(compile(open(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))
|
||||||
|
self._bundle_build_dirs = bundle_build_dirs
|
||||||
|
self._bundle_editable_dirs = bundle_editable_dirs
|
||||||
|
|
||||||
|
- def move_wheel_files(self, wheeldir, root=None):
|
||||||
|
+ def move_wheel_files(self, wheeldir, root=None, strip_file_prefix=None):
|
||||||
|
move_wheel_files(
|
||||||
|
self.name, self.req, wheeldir,
|
||||||
|
user=self.use_user_site,
|
||||||
|
home=self.target_dir,
|
||||||
|
root=root,
|
||||||
|
pycompile=self.pycompile,
|
||||||
|
+ strip_file_prefix=strip_file_prefix,
|
||||||
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
diff --git a/pip/wheel.py b/pip/wheel.py
|
||||||
|
index fa3e270..3a366d0 100644
|
||||||
|
--- a/pip/wheel.py
|
||||||
|
+++ b/pip/wheel.py
|
||||||
|
@@ -136,7 +136,7 @@ def get_entrypoints(filename):
|
||||||
|
|
||||||
|
|
||||||
|
def move_wheel_files(name, req, wheeldir, user=False, home=None, root=None,
|
||||||
|
- pycompile=True, scheme=None):
|
||||||
|
+ pycompile=True, scheme=None, strip_file_prefix=None):
|
||||||
|
"""Install a wheel"""
|
||||||
|
|
||||||
|
if not scheme:
|
||||||
|
@@ -357,6 +357,8 @@ if __name__ == '__main__':
|
||||||
|
writer.writerow(row)
|
||||||
|
for f in generated:
|
||||||
|
h, l = rehash(f)
|
||||||
|
+ if strip_file_prefix and f.startswith(strip_file_prefix):
|
||||||
|
+ f = os.path.join(os.sep, os.path.relpath(f, strip_file_prefix))
|
||||||
|
writer.writerow((f, h, l))
|
||||||
|
for f in installed:
|
||||||
|
writer.writerow((installed[f], '', ''))
|
137
python-pip.spec
137
python-pip.spec
@ -1,14 +1,21 @@
|
|||||||
%if (! 0%{?rhel}) || 0%{?rhel} > 7
|
%if (! 0%{?rhel}) || 0%{?rhel} > 7
|
||||||
%global with_python3 1
|
%global with_python3 1
|
||||||
|
%global build_wheel 1
|
||||||
%endif
|
%endif
|
||||||
%if 0%{?rhel} && 0%{?rhel} < 6
|
%if 0%{?rhel} && 0%{?rhel} < 6
|
||||||
%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
|
%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%global srcname pip
|
%global srcname pip
|
||||||
|
%if 0%{?build_wheel}
|
||||||
|
%global python2_wheelname %{srcname}-%{version}-py2.py3-none-any.whl
|
||||||
|
%if 0%{?with_python3}
|
||||||
|
%global python3_wheelname %python2_wheelname
|
||||||
|
%endif
|
||||||
|
%endif
|
||||||
|
|
||||||
Name: python-%{srcname}
|
Name: python-%{srcname}
|
||||||
Version: 1.3.1
|
Version: 1.5.6
|
||||||
Release: 4%{?dist}
|
Release: 4%{?dist}
|
||||||
Summary: A tool for installing and managing Python packages
|
Summary: A tool for installing and managing Python packages
|
||||||
|
|
||||||
@ -16,13 +23,30 @@ Group: Development/Libraries
|
|||||||
License: MIT
|
License: MIT
|
||||||
URL: http://www.pip-installer.org
|
URL: http://www.pip-installer.org
|
||||||
Source0: http://pypi.python.org/packages/source/p/pip/%{srcname}-%{version}.tar.gz
|
Source0: http://pypi.python.org/packages/source/p/pip/%{srcname}-%{version}.tar.gz
|
||||||
# Sent to dstufft (upstream)
|
|
||||||
Patch0: 0001-fix-for-http-bugs.python.org-issue17980-in-code-back.patch
|
# to get tests:
|
||||||
|
# git clone https://github.com/pypa/pip && cd fig
|
||||||
|
# git checkout 1.5.6 && tar -czvf pip-1.5.6-tests.tar.gz tests/
|
||||||
|
Source1: pip-1.5.6-tests.tar.gz
|
||||||
|
|
||||||
|
Patch0: pip-1.5rc1-allow-stripping-prefix-from-wheel-RECORD-files.patch
|
||||||
|
# patch by dstufft, more at http://seclists.org/oss-sec/2014/q4/655
|
||||||
|
Patch1: local-dos.patch
|
||||||
|
Patch2: skip-network-tests.patch
|
||||||
|
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
|
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
BuildRequires: python-devel
|
BuildRequires: python-devel
|
||||||
BuildRequires: python-setuptools
|
BuildRequires: python-setuptools
|
||||||
|
BuildRequires: python-mock
|
||||||
|
BuildRequires: pytest
|
||||||
|
BuildRequires: python-scripttest
|
||||||
|
BuildRequires: python-virtualenv
|
||||||
|
%if 0%{?build_wheel}
|
||||||
|
BuildRequires: python-pip
|
||||||
|
BuildRequires: python-wheel
|
||||||
|
%endif
|
||||||
Requires: python-setuptools
|
Requires: python-setuptools
|
||||||
|
|
||||||
%description
|
%description
|
||||||
@ -39,6 +63,10 @@ Group: Development/Libraries
|
|||||||
|
|
||||||
BuildRequires: python3-devel
|
BuildRequires: python3-devel
|
||||||
BuildRequires: python3-setuptools
|
BuildRequires: python3-setuptools
|
||||||
|
%if 0%{?build_wheel}
|
||||||
|
BuildRequires: python3-pip
|
||||||
|
BuildRequires: python3-wheel
|
||||||
|
%endif
|
||||||
Requires: python3-setuptools
|
Requires: python3-setuptools
|
||||||
|
|
||||||
%description -n python3-pip
|
%description -n python3-pip
|
||||||
@ -50,7 +78,11 @@ easy_installable should be pip-installable as well.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n %{srcname}-%{version}
|
%setup -q -n %{srcname}-%{version}
|
||||||
|
tar -xf %{SOURCE1}
|
||||||
|
|
||||||
%patch0 -p1
|
%patch0 -p1
|
||||||
|
%patch1 -p1
|
||||||
|
%patch2 -p1
|
||||||
|
|
||||||
%{__sed} -i '1d' pip/__init__.py
|
%{__sed} -i '1d' pip/__init__.py
|
||||||
|
|
||||||
@ -60,11 +92,19 @@ cp -a . %{py3dir}
|
|||||||
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
%if 0%{?build_wheel}
|
||||||
|
%{__python} setup.py bdist_wheel
|
||||||
|
%else
|
||||||
%{__python} setup.py build
|
%{__python} setup.py build
|
||||||
|
%endif
|
||||||
|
|
||||||
%if 0%{?with_python3}
|
%if 0%{?with_python3}
|
||||||
pushd %{py3dir}
|
pushd %{py3dir}
|
||||||
|
%if 0%{?build_wheel}
|
||||||
|
%{__python3} setup.py bdist_wheel
|
||||||
|
%else
|
||||||
%{__python3} setup.py build
|
%{__python3} setup.py build
|
||||||
|
%endif
|
||||||
popd
|
popd
|
||||||
%endif # with_python3
|
%endif # with_python3
|
||||||
|
|
||||||
@ -74,42 +114,24 @@ popd
|
|||||||
|
|
||||||
%if 0%{?with_python3}
|
%if 0%{?with_python3}
|
||||||
pushd %{py3dir}
|
pushd %{py3dir}
|
||||||
|
%if 0%{?build_wheel}
|
||||||
|
pip3 install -I dist/%{python3_wheelname} --root %{buildroot} --strip-file-prefix %{buildroot}
|
||||||
|
# TODO: we have to remove this by hand now, but it'd be nice if we wouldn't have to
|
||||||
|
# (pip install wheel doesn't overwrite)
|
||||||
|
rm %{buildroot}%{_bindir}/pip
|
||||||
|
%else
|
||||||
%{__python3} setup.py install --skip-build --root %{buildroot}
|
%{__python3} setup.py install --skip-build --root %{buildroot}
|
||||||
|
%endif
|
||||||
# Change the name of the python3 pip executable in order to not conflict with
|
|
||||||
# the python2 executable
|
|
||||||
mv %{buildroot}%{_bindir}/pip %{buildroot}%{_bindir}/python3-pip
|
|
||||||
|
|
||||||
# after changing the pip-python binary name, make a symlink to the old name,
|
|
||||||
# that will be removed in a later version
|
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=855495
|
|
||||||
pushd %{buildroot}%{_bindir}
|
|
||||||
ln -s python3-pip pip-python3
|
|
||||||
|
|
||||||
# The install process creates both pip and pip-<python_abiversion> that seem to
|
|
||||||
# be the same. Remove the extra script
|
|
||||||
%{__rm} -rf pip-3*
|
|
||||||
|
|
||||||
popd
|
|
||||||
%endif # with_python3
|
%endif # with_python3
|
||||||
|
|
||||||
|
%if 0%{?build_wheel}
|
||||||
|
pip2 install -I dist/%{python2_wheelname} --root %{buildroot} --strip-file-prefix %{buildroot}
|
||||||
|
%else
|
||||||
%{__python} setup.py install -O1 --skip-build --root %{buildroot}
|
%{__python} setup.py install -O1 --skip-build --root %{buildroot}
|
||||||
|
%endif
|
||||||
|
|
||||||
pushd %{buildroot}%{_bindir}
|
%check
|
||||||
# The install process creates both pip and pip-<python_abiversion> that seem to
|
python setup.py test
|
||||||
# be the same. Since removing pip-* also clobbers pip-python3, just remove pip-2*
|
|
||||||
%{__rm} -rf pip-2*
|
|
||||||
|
|
||||||
# The pip executable no longer needs to be renamed to avoid conflict with perl-pip
|
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=958377
|
|
||||||
# However, we'll keep a python-pip alias for now
|
|
||||||
ln -s pip python-pip
|
|
||||||
|
|
||||||
# after changing the pip-python binary name, make a symlink to the old name,
|
|
||||||
# that will be removed in a later version
|
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=855495
|
|
||||||
ln -s pip pip-python
|
|
||||||
popd
|
|
||||||
|
|
||||||
|
|
||||||
%clean
|
%clean
|
||||||
@ -120,22 +142,53 @@ popd
|
|||||||
|
|
||||||
%files
|
%files
|
||||||
%defattr(-,root,root,-)
|
%defattr(-,root,root,-)
|
||||||
%doc PKG-INFO docs
|
%doc LICENSE.txt README.rst docs
|
||||||
%attr(755,root,root) %{_bindir}/pip
|
%attr(755,root,root) %{_bindir}/pip
|
||||||
%attr(755,root,root) %{_bindir}/pip-python
|
%attr(755,root,root) %{_bindir}/pip2*
|
||||||
%attr(755,root,root) %{_bindir}/python-pip
|
|
||||||
%{python_sitelib}/pip*
|
%{python_sitelib}/pip*
|
||||||
|
|
||||||
%if 0%{?with_python3}
|
%if 0%{?with_python3}
|
||||||
%files -n python3-pip
|
%files -n python3-pip
|
||||||
%defattr(-,root,root,-)
|
%defattr(-,root,root,-)
|
||||||
%doc PKG-INFO docs
|
%doc LICENSE.txt README.rst docs
|
||||||
%attr(755,root,root) %{_bindir}/pip-python3
|
%attr(755,root,root) %{_bindir}/pip3*
|
||||||
%attr(755,root,root) %{_bindir}/python3-pip
|
|
||||||
%{python3_sitelib}/pip*
|
%{python3_sitelib}/pip*
|
||||||
%endif # with_python3
|
%endif # with_python3
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Dec 01 2014 Matej Stuchlik <mstuchli@redhat.com> - 1.5.6-4
|
||||||
|
- Add tests
|
||||||
|
- Add patch skipping tests requiring Internet access
|
||||||
|
|
||||||
|
* Tue Nov 18 2014 Matej Stuchlik <mstuchli@redhat.com> - 1.5.6-3
|
||||||
|
- Added patch for local dos with predictable temp dictionary names
|
||||||
|
(http://seclists.org/oss-sec/2014/q4/655)
|
||||||
|
|
||||||
|
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.5.6-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
|
||||||
|
|
||||||
|
* Sun May 25 2014 Matej Stuchlik <mstuchli@redhat.com> - 1.5.6-1
|
||||||
|
- Update to 1.5.6
|
||||||
|
|
||||||
|
* Fri Apr 25 2014 Matej Stuchlik <mstuchli@redhat.com> - 1.5.4-4
|
||||||
|
- Rebuild as wheel for Python 3.4
|
||||||
|
|
||||||
|
* Thu Apr 24 2014 Matej Stuchlik <mstuchli@redhat.com> - 1.5.4-3
|
||||||
|
- Disable build_wheel
|
||||||
|
|
||||||
|
* Thu Apr 24 2014 Matej Stuchlik <mstuchli@redhat.com> - 1.5.4-2
|
||||||
|
- Rebuild as wheel for Python 3.4
|
||||||
|
|
||||||
|
* Mon Apr 07 2014 Matej Stuchlik <mstuchli@redhat.com> - 1.5.4-1
|
||||||
|
- Updated to 1.5.4
|
||||||
|
|
||||||
|
* Mon Oct 14 2013 Tim Flink <tflink@fedoraproject.org> - 1.4.1-1
|
||||||
|
- Removed patch for CVE 2013-2099 as it has been included in the upstream 1.4.1 release
|
||||||
|
- Updated version to 1.4.1
|
||||||
|
|
||||||
|
* Sun Aug 04 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.1-5
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
|
||||||
|
|
||||||
* Tue Jul 16 2013 Toshio Kuratomi <toshio@fedoraproject.org> - 1.3.1-4
|
* Tue Jul 16 2013 Toshio Kuratomi <toshio@fedoraproject.org> - 1.3.1-4
|
||||||
- Fix for CVE 2013-2099
|
- Fix for CVE 2013-2099
|
||||||
|
|
||||||
@ -188,9 +241,9 @@ popd
|
|||||||
- update to 0.7.1 of pip
|
- update to 0.7.1 of pip
|
||||||
* Fri Jan 1 2010 Peter Halliday <phalliday@excelsiorsystems.net> - 0.6.1.4
|
* Fri Jan 1 2010 Peter Halliday <phalliday@excelsiorsystems.net> - 0.6.1.4
|
||||||
- fix dependency issue
|
- fix dependency issue
|
||||||
* Tue Dec 18 2009 Peter Halliday <phalliday@excelsiorsystems.net> - 0.6.1-2
|
* Fri Dec 18 2009 Peter Halliday <phalliday@excelsiorsystems.net> - 0.6.1-2
|
||||||
- fix spec file
|
- fix spec file
|
||||||
* Mon Dec 17 2009 Peter Halliday <phalliday@excelsiorsystems.net> - 0.6.1-1
|
* Thu Dec 17 2009 Peter Halliday <phalliday@excelsiorsystems.net> - 0.6.1-1
|
||||||
- upgrade to 0.6.1 of pip
|
- upgrade to 0.6.1 of pip
|
||||||
* Mon Aug 31 2009 Peter Halliday <phalliday@excelsiorsystems.net> - 0.4-1
|
* Mon Aug 31 2009 Peter Halliday <phalliday@excelsiorsystems.net> - 0.4-1
|
||||||
- Initial package
|
- Initial package
|
||||||
|
1079
skip-network-tests.patch
Normal file
1079
skip-network-tests.patch
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user