From 6064dd1ddb3a086f9df5efcfb585e1e7343d033d Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Sun, 4 Aug 2013 04:01:34 -0500 Subject: [PATCH 01/14] - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild --- python-pip.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python-pip.spec b/python-pip.spec index 105313e..da4e626 100644 --- a/python-pip.spec +++ b/python-pip.spec @@ -9,7 +9,7 @@ Name: python-%{srcname} Version: 1.3.1 -Release: 4%{?dist} +Release: 5%{?dist} Summary: A tool for installing and managing Python packages Group: Development/Libraries @@ -136,6 +136,9 @@ popd %endif # with_python3 %changelog +* Sun Aug 04 2013 Fedora Release Engineering - 1.3.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + * Tue Jul 16 2013 Toshio Kuratomi - 1.3.1-4 - Fix for CVE 2013-2099 From 42d5421d5012877bcf4e6c0238f54ba06c6e686e Mon Sep 17 00:00:00 2001 From: Tim Flink Date: Mon, 14 Oct 2013 15:13:50 -0600 Subject: [PATCH 02/14] updating to pip 1.4.1 and removing old CVE patch that's not needed anymore --- ...s.python.org-issue17980-in-code-back.patch | 36 ------------------- python-pip.spec | 11 +++--- sources | 1 + 3 files changed, 7 insertions(+), 41 deletions(-) delete mode 100644 0001-fix-for-http-bugs.python.org-issue17980-in-code-back.patch diff --git a/0001-fix-for-http-bugs.python.org-issue17980-in-code-back.patch b/0001-fix-for-http-bugs.python.org-issue17980-in-code-back.patch deleted file mode 100644 index 5f928ef..0000000 --- a/0001-fix-for-http-bugs.python.org-issue17980-in-code-back.patch +++ /dev/null @@ -1,36 +0,0 @@ -From ca207acb4fdea344bb3a775d44aa0d9f59ad31a1 Mon Sep 17 00:00:00 2001 -From: Toshio Kuratomi -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 - diff --git a/python-pip.spec b/python-pip.spec index da4e626..d4aecd8 100644 --- a/python-pip.spec +++ b/python-pip.spec @@ -8,16 +8,14 @@ %global srcname pip Name: python-%{srcname} -Version: 1.3.1 -Release: 5%{?dist} +Version: 1.4.1 +Release: 1%{?dist} Summary: A tool for installing and managing Python packages Group: Development/Libraries License: MIT URL: http://www.pip-installer.org 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 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildArch: noarch @@ -50,7 +48,6 @@ easy_installable should be pip-installable as well. %prep %setup -q -n %{srcname}-%{version} -%patch0 -p1 %{__sed} -i '1d' pip/__init__.py @@ -136,6 +133,10 @@ popd %endif # with_python3 %changelog +* Mon Oct 14 2013 Tim Flink - 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 - 1.3.1-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild diff --git a/sources b/sources index 4b91cac..23e5b3b 100644 --- a/sources +++ b/sources @@ -1 +1,2 @@ +6afbb46aeb48abac658d4df742bff714 pip-1.4.1.tar.gz cbb27a191cebc58997c4da8513863153 pip-1.3.1.tar.gz From 6a15b7c1f7bb34d3e890352c3531fa2bb6c83a88 Mon Sep 17 00:00:00 2001 From: Tim Flink Date: Mon, 14 Oct 2013 15:17:15 -0600 Subject: [PATCH 03/14] removing pip-1.3.1 from sources and updating gitignore --- .gitignore | 1 + sources | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index f3ead45..5c538e3 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ pip-0.7.2.tar.gz /pip-1.0.2.tar.gz /pip-1.1.tar.gz /pip-1.3.1.tar.gz +/pip-1.4.1.tar.gz diff --git a/sources b/sources index 23e5b3b..3dd2690 100644 --- a/sources +++ b/sources @@ -1,2 +1 @@ 6afbb46aeb48abac658d4df742bff714 pip-1.4.1.tar.gz -cbb27a191cebc58997c4da8513863153 pip-1.3.1.tar.gz From dd9e7dc94db45086cb78b324a160d8f7cb27070d Mon Sep 17 00:00:00 2001 From: Matej Stuchlik Date: Mon, 7 Apr 2014 12:15:48 +0200 Subject: [PATCH 04/14] Update to 1.5.4 and add an option to build as wheel --- .gitignore | 1 + python-pip.spec | 88 ++++++++++++++++++++++++++----------------------- sources | 2 +- 3 files changed, 49 insertions(+), 42 deletions(-) diff --git a/.gitignore b/.gitignore index 5c538e3..8a7383c 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ pip-0.7.2.tar.gz /pip-1.1.tar.gz /pip-1.3.1.tar.gz /pip-1.4.1.tar.gz +/pip-1.5.4.tar.gz diff --git a/python-pip.spec b/python-pip.spec index d4aecd8..c4d8c9e 100644 --- a/python-pip.spec +++ b/python-pip.spec @@ -1,14 +1,21 @@ %if (! 0%{?rhel}) || 0%{?rhel} > 6 %global with_python3 1 +%global build_wheel 0 %endif %if 0%{?rhel} && 0%{?rhel} < 6 %{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")} %endif %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} -Version: 1.4.1 +Version: 1.5.4 Release: 1%{?dist} Summary: A tool for installing and managing Python packages @@ -16,11 +23,16 @@ Group: Development/Libraries License: MIT URL: http://www.pip-installer.org Source0: http://pypi.python.org/packages/source/p/pip/%{srcname}-%{version}.tar.gz +Patch0: pip-1.5rc1-allow-stripping-prefix-from-wheel-RECORD-files.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildArch: noarch BuildRequires: python-devel BuildRequires: python-setuptools +%if 0%{?build_wheel} +BuildRequires: python-pip +BuildRequires: python-wheel +%endif Requires: python-setuptools %description @@ -37,6 +49,10 @@ Group: Development/Libraries BuildRequires: python3-devel BuildRequires: python3-setuptools +%if 0%{?build_wheel} +BuildRequires: python3-pip +BuildRequires: python3-wheel +%endif Requires: python3-setuptools %description -n python3-pip @@ -49,6 +65,8 @@ easy_installable should be pip-installable as well. %prep %setup -q -n %{srcname}-%{version} +%patch0 -p1 + %{__sed} -i '1d' pip/__init__.py %if 0%{?with_python3} @@ -57,11 +75,19 @@ cp -a . %{py3dir} %build +%if 0%{?build_wheel} +%{__python} setup.py bdist_wheel +%else %{__python} setup.py build +%endif %if 0%{?with_python3} pushd %{py3dir} +%if 0%{?build_wheel} +%{__python3} setup.py bdist_wheel +%else %{__python3} setup.py build +%endif popd %endif # with_python3 @@ -71,42 +97,21 @@ popd %if 0%{?with_python3} 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} - -# 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- that seem to -# be the same. Remove the extra script -%{__rm} -rf pip-3* - -popd +%endif %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} - -pushd %{buildroot}%{_bindir} -# The install process creates both pip and pip- that seem to -# 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 +%endif %clean @@ -117,22 +122,23 @@ popd %files %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-python -%attr(755,root,root) %{_bindir}/python-pip +%attr(755,root,root) %{_bindir}/pip2* %{python_sitelib}/pip* %if 0%{?with_python3} %files -n python3-pip %defattr(-,root,root,-) -%doc PKG-INFO docs -%attr(755,root,root) %{_bindir}/pip-python3 -%attr(755,root,root) %{_bindir}/python3-pip +%doc LICENSE.txt README.rst docs +%attr(755,root,root) %{_bindir}/pip3* %{python3_sitelib}/pip* %endif # with_python3 %changelog +* Mon Apr 07 2014 Matej Stuchlik - 1.5.4-1 +- Updated to 1.5.4 + * Mon Oct 14 2013 Tim Flink - 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 @@ -192,9 +198,9 @@ popd - update to 0.7.1 of pip * Fri Jan 1 2010 Peter Halliday - 0.6.1.4 - fix dependency issue -* Tue Dec 18 2009 Peter Halliday - 0.6.1-2 +* Fri Dec 18 2009 Peter Halliday - 0.6.1-2 - fix spec file -* Mon Dec 17 2009 Peter Halliday - 0.6.1-1 +* Thu Dec 17 2009 Peter Halliday - 0.6.1-1 - upgrade to 0.6.1 of pip * Mon Aug 31 2009 Peter Halliday - 0.4-1 - Initial package diff --git a/sources b/sources index 3dd2690..4b0b385 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -6afbb46aeb48abac658d4df742bff714 pip-1.4.1.tar.gz +834b2904f92d46aaa333267fb1c922bb pip-1.5.4.tar.gz From 638c2fb55354c0f78ae092e7b94f8062f00e9338 Mon Sep 17 00:00:00 2001 From: Matej Stuchlik Date: Mon, 7 Apr 2014 12:26:27 +0200 Subject: [PATCH 05/14] Add patch allowing stripping prefix from wheel RECORD files --- ...pping-prefix-from-wheel-RECORD-files.patch | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 pip-1.5rc1-allow-stripping-prefix-from-wheel-RECORD-files.patch diff --git a/pip-1.5rc1-allow-stripping-prefix-from-wheel-RECORD-files.patch b/pip-1.5rc1-allow-stripping-prefix-from-wheel-RECORD-files.patch new file mode 100644 index 0000000..eebe2cc --- /dev/null +++ b/pip-1.5rc1-allow-stripping-prefix-from-wheel-RECORD-files.patch @@ -0,0 +1,102 @@ +commit aefacbb76661520415a1c35028f2984e70cfe0bf +Author: Slavek Kabrda +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): ++ pycompile=True, strip_file_prefix=None): + """Install a wheel""" + + scheme = distutils_scheme(name, user=user, home=home, root=root) +@@ -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], '', '')) From a48e4cb297b14eb69c0c9f74ae59102717a46447 Mon Sep 17 00:00:00 2001 From: Matej Stuchlik Date: Thu, 24 Apr 2014 12:37:03 +0200 Subject: [PATCH 06/14] Rebuild as wheel for Python 3.4 --- python-pip.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/python-pip.spec b/python-pip.spec index c4d8c9e..7665830 100644 --- a/python-pip.spec +++ b/python-pip.spec @@ -1,6 +1,6 @@ %if (! 0%{?rhel}) || 0%{?rhel} > 6 %global with_python3 1 -%global build_wheel 0 +%global build_wheel 1 %endif %if 0%{?rhel} && 0%{?rhel} < 6 %{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")} @@ -16,7 +16,7 @@ Name: python-%{srcname} Version: 1.5.4 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A tool for installing and managing Python packages Group: Development/Libraries @@ -136,6 +136,9 @@ pip2 install -I dist/%{python2_wheelname} --root %{buildroot} --strip-file-prefi %endif # with_python3 %changelog +* Thu Apr 24 2014 Matej Stuchlik - 1.5.4-2 +- Rebuild as wheel for Python 3.4 + * Mon Apr 07 2014 Matej Stuchlik - 1.5.4-1 - Updated to 1.5.4 From 5d7f89437bb14be4c050103aea7c55720a8e7333 Mon Sep 17 00:00:00 2001 From: Matej Stuchlik Date: Thu, 24 Apr 2014 13:20:46 +0200 Subject: [PATCH 07/14] Disable build_wheel --- python-pip.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python-pip.spec b/python-pip.spec index 7665830..a21a283 100644 --- a/python-pip.spec +++ b/python-pip.spec @@ -16,7 +16,7 @@ Name: python-%{srcname} Version: 1.5.4 -Release: 2%{?dist} +Release: 3%{?dist} Summary: A tool for installing and managing Python packages Group: Development/Libraries @@ -136,6 +136,9 @@ pip2 install -I dist/%{python2_wheelname} --root %{buildroot} --strip-file-prefi %endif # with_python3 %changelog +* Thu Apr 24 2014 Matej Stuchlik - 1.5.4-3 +- Disable build_wheel + * Thu Apr 24 2014 Matej Stuchlik - 1.5.4-2 - Rebuild as wheel for Python 3.4 From 16abcb69d8809634bd845e2d71f1e7fe56c0049f Mon Sep 17 00:00:00 2001 From: Matej Stuchlik Date: Thu, 24 Apr 2014 13:27:28 +0200 Subject: [PATCH 08/14] Actually disable build_wheel --- python-pip.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python-pip.spec b/python-pip.spec index a21a283..da8d1fc 100644 --- a/python-pip.spec +++ b/python-pip.spec @@ -1,6 +1,6 @@ %if (! 0%{?rhel}) || 0%{?rhel} > 6 %global with_python3 1 -%global build_wheel 1 +%global build_wheel 0 %endif %if 0%{?rhel} && 0%{?rhel} < 6 %{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")} From 3e3470390a8644433869308acb28361263f26e64 Mon Sep 17 00:00:00 2001 From: Matej Stuchlik Date: Fri, 25 Apr 2014 14:12:12 +0200 Subject: [PATCH 09/14] Rebuild as wheel for Python 3.4 --- python-pip.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/python-pip.spec b/python-pip.spec index da8d1fc..fc3f1f4 100644 --- a/python-pip.spec +++ b/python-pip.spec @@ -1,6 +1,6 @@ %if (! 0%{?rhel}) || 0%{?rhel} > 6 %global with_python3 1 -%global build_wheel 0 +%global build_wheel 1 %endif %if 0%{?rhel} && 0%{?rhel} < 6 %{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")} @@ -16,7 +16,7 @@ Name: python-%{srcname} Version: 1.5.4 -Release: 3%{?dist} +Release: 4%{?dist} Summary: A tool for installing and managing Python packages Group: Development/Libraries @@ -136,6 +136,9 @@ pip2 install -I dist/%{python2_wheelname} --root %{buildroot} --strip-file-prefi %endif # with_python3 %changelog +* Fri Apr 25 2014 Matej Stuchlik - 1.5.4-4 +- Rebuild as wheel for Python 3.4 + * Thu Apr 24 2014 Matej Stuchlik - 1.5.4-3 - Disable build_wheel From 56b65b260147ff48bda74db91b58668ee4ac7b90 Mon Sep 17 00:00:00 2001 From: Matej Stuchlik Date: Mon, 26 May 2014 00:10:27 +0200 Subject: [PATCH 10/14] Update to 1.5.6 --- ...c1-allow-stripping-prefix-from-wheel-RECORD-files.patch | 6 +++--- python-pip.spec | 7 +++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/pip-1.5rc1-allow-stripping-prefix-from-wheel-RECORD-files.patch b/pip-1.5rc1-allow-stripping-prefix-from-wheel-RECORD-files.patch index eebe2cc..f2e8487 100644 --- a/pip-1.5rc1-allow-stripping-prefix-from-wheel-RECORD-files.patch +++ b/pip-1.5rc1-allow-stripping-prefix-from-wheel-RECORD-files.patch @@ -86,11 +86,11 @@ index fa3e270..3a366d0 100644 def move_wheel_files(name, req, wheeldir, user=False, home=None, root=None, -- pycompile=True): -+ pycompile=True, strip_file_prefix=None): +- pycompile=True, scheme=None): ++ pycompile=True, scheme=None, strip_file_prefix=None): """Install a wheel""" - scheme = distutils_scheme(name, user=user, home=home, root=root) + if not scheme: @@ -357,6 +357,8 @@ if __name__ == '__main__': writer.writerow(row) for f in generated: diff --git a/python-pip.spec b/python-pip.spec index fc3f1f4..e6d032e 100644 --- a/python-pip.spec +++ b/python-pip.spec @@ -15,8 +15,8 @@ %endif Name: python-%{srcname} -Version: 1.5.4 -Release: 4%{?dist} +Version: 1.5.6 +Release: 1%{?dist} Summary: A tool for installing and managing Python packages Group: Development/Libraries @@ -136,6 +136,9 @@ pip2 install -I dist/%{python2_wheelname} --root %{buildroot} --strip-file-prefi %endif # with_python3 %changelog +* Sun May 25 2014 Matej Stuchlik - 1.5.6-1 +- Update to 1.5.6 + * Fri Apr 25 2014 Matej Stuchlik - 1.5.4-4 - Rebuild as wheel for Python 3.4 From 594b9f1739942928753e5afe98c5ab8d7e4129d3 Mon Sep 17 00:00:00 2001 From: Matej Stuchlik Date: Mon, 26 May 2014 00:24:20 +0200 Subject: [PATCH 11/14] Upload 1.5.6 sources --- .gitignore | 1 + sources | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 8a7383c..c3f66d3 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ pip-0.7.2.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 diff --git a/sources b/sources index 4b0b385..28c4845 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -834b2904f92d46aaa333267fb1c922bb pip-1.5.4.tar.gz +01026f87978932060cc86c1dc527903e pip-1.5.6.tar.gz From e24e478a400f5558642e3e29a50b4ad716bff9d3 Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Sat, 7 Jun 2014 17:05:22 -0500 Subject: [PATCH 12/14] - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild --- python-pip.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python-pip.spec b/python-pip.spec index e6d032e..d35b6a2 100644 --- a/python-pip.spec +++ b/python-pip.spec @@ -16,7 +16,7 @@ Name: python-%{srcname} Version: 1.5.6 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A tool for installing and managing Python packages Group: Development/Libraries @@ -136,6 +136,9 @@ pip2 install -I dist/%{python2_wheelname} --root %{buildroot} --strip-file-prefi %endif # with_python3 %changelog +* Sat Jun 07 2014 Fedora Release Engineering - 1.5.6-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + * Sun May 25 2014 Matej Stuchlik - 1.5.6-1 - Update to 1.5.6 From a7c7b123d7d980c2f73096b9956f78c629fc301b Mon Sep 17 00:00:00 2001 From: Matej Stuchlik Date: Tue, 18 Nov 2014 13:49:10 +0100 Subject: [PATCH 13/14] Patch local dos with predictable temp directory names See more at http://seclists.org/oss-sec/2014/q4/655 --- local-dos.patch | 395 ++++++++++++++++++++++++++++++++++++++++++++++++ python-pip.spec | 11 +- 2 files changed, 405 insertions(+), 1 deletion(-) create mode 100644 local-dos.patch diff --git a/local-dos.patch b/local-dos.patch new file mode 100644 index 0000000..721ca51 --- /dev/null +++ b/local-dos.patch @@ -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 "/build". ' +- 'The default for global installs is "/pip_build_".') ++ 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) diff --git a/python-pip.spec b/python-pip.spec index d35b6a2..f4e0a28 100644 --- a/python-pip.spec +++ b/python-pip.spec @@ -16,7 +16,7 @@ Name: python-%{srcname} Version: 1.5.6 -Release: 2%{?dist} +Release: 3%{?dist} Summary: A tool for installing and managing Python packages Group: Development/Libraries @@ -24,6 +24,10 @@ License: MIT URL: http://www.pip-installer.org Source0: http://pypi.python.org/packages/source/p/pip/%{srcname}-%{version}.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 + BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildArch: noarch @@ -66,6 +70,7 @@ easy_installable should be pip-installable as well. %setup -q -n %{srcname}-%{version} %patch0 -p1 +%patch1 -p1 %{__sed} -i '1d' pip/__init__.py @@ -136,6 +141,10 @@ pip2 install -I dist/%{python2_wheelname} --root %{buildroot} --strip-file-prefi %endif # with_python3 %changelog +* Tue Nov 18 2014 Matej Stuchlik - 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 - 1.5.6-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild From 929716488711f715822f6801f51828d9991ea833 Mon Sep 17 00:00:00 2001 From: Matej Stuchlik Date: Mon, 1 Dec 2014 14:19:59 +0100 Subject: [PATCH 14/14] Add tests and patch skipping tests requiring networking --- .gitignore | 1 + python-pip.spec | 23 +- skip-network-tests.patch | 1079 ++++++++++++++++++++++++++++++++++++++ sources | 1 + 4 files changed, 1102 insertions(+), 2 deletions(-) create mode 100644 skip-network-tests.patch diff --git a/.gitignore b/.gitignore index c3f66d3..b633d86 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ pip-0.7.2.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 diff --git a/python-pip.spec b/python-pip.spec index f4e0a28..7deafae 100644 --- a/python-pip.spec +++ b/python-pip.spec @@ -16,23 +16,33 @@ Name: python-%{srcname} Version: 1.5.6 -Release: 3%{?dist} +Release: 4%{?dist} Summary: A tool for installing and managing Python packages Group: Development/Libraries License: MIT URL: http://www.pip-installer.org Source0: http://pypi.python.org/packages/source/p/pip/%{srcname}-%{version}.tar.gz -Patch0: pip-1.5rc1-allow-stripping-prefix-from-wheel-RECORD-files.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) BuildArch: noarch BuildRequires: python-devel BuildRequires: python-setuptools +BuildRequires: python-mock +BuildRequires: pytest +BuildRequires: python-scripttest +BuildRequires: python-virtualenv %if 0%{?build_wheel} BuildRequires: python-pip BuildRequires: python-wheel @@ -68,9 +78,11 @@ easy_installable should be pip-installable as well. %prep %setup -q -n %{srcname}-%{version} +tar -xf %{SOURCE1} %patch0 -p1 %patch1 -p1 +%patch2 -p1 %{__sed} -i '1d' pip/__init__.py @@ -118,6 +130,9 @@ pip2 install -I dist/%{python2_wheelname} --root %{buildroot} --strip-file-prefi %{__python} setup.py install -O1 --skip-build --root %{buildroot} %endif +%check +python setup.py test + %clean %{__rm} -rf %{buildroot} @@ -141,6 +156,10 @@ pip2 install -I dist/%{python2_wheelname} --root %{buildroot} --strip-file-prefi %endif # with_python3 %changelog +* Mon Dec 01 2014 Matej Stuchlik - 1.5.6-4 +- Add tests +- Add patch skipping tests requiring Internet access + * Tue Nov 18 2014 Matej Stuchlik - 1.5.6-3 - Added patch for local dos with predictable temp dictionary names (http://seclists.org/oss-sec/2014/q4/655) diff --git a/skip-network-tests.patch b/skip-network-tests.patch new file mode 100644 index 0000000..4fbbf1a --- /dev/null +++ b/skip-network-tests.patch @@ -0,0 +1,1079 @@ +diff -up pip-1.5.6/tests/functional/test_bundle.py.orig pip-1.5.6/tests/functional/test_bundle.py +--- pip-1.5.6/tests/functional/test_bundle.py.orig 2014-11-27 11:23:19.857665215 +0100 ++++ pip-1.5.6/tests/functional/test_bundle.py 2014-11-27 11:31:10.992460920 +0100 +@@ -1,10 +1,12 @@ + import zipfile + import textwrap ++import pytest + from os.path import abspath, exists, join + from pip.download import path_to_url + from tests.lib.local_repos import local_checkout + + ++@pytest.mark.skipif(True, reason='No network') + def test_create_bundle(script, tmpdir, data): + """ + Test making a bundle. We'll grab one package from the filesystem +@@ -30,6 +32,7 @@ def test_create_bundle(script, tmpdir, d + assert 'build/pip/' in files + + ++@pytest.mark.skipif(True, reason='No network') + def test_cleanup_after_create_bundle(script, tmpdir, data): + """ + Test clean up after making a bundle. Make sure (build|src)-bundle/ dirs are removed but not src/. +diff -up pip-1.5.6/tests/functional/test_freeze.py.orig pip-1.5.6/tests/functional/test_freeze.py +--- pip-1.5.6/tests/functional/test_freeze.py.orig 2014-11-27 11:23:19.947665742 +0100 ++++ pip-1.5.6/tests/functional/test_freeze.py 2014-11-27 11:30:45.937308998 +0100 +@@ -1,6 +1,7 @@ + import sys + import re + import textwrap ++import pytest + from doctest import OutputChecker, ELLIPSIS + + from tests.lib.local_repos import local_checkout, local_repo +@@ -58,6 +59,7 @@ def test_freeze_basic(script): + _check_output(result, expected) + + ++@pytest.mark.skipif(True, reason='No network') + def test_freeze_svn(script, tmpdir): + """Test freezing a svn checkout""" + +@@ -79,6 +81,7 @@ def test_freeze_svn(script, tmpdir): + _check_output(result, expected) + + ++@pytest.mark.skipif(True, reason='No network') + def test_freeze_git_clone(script, tmpdir): + """ + Test freezing a Git clone. +@@ -109,6 +112,7 @@ def test_freeze_git_clone(script, tmpdir + _check_output(result, expected) + + ++@pytest.mark.skipif(True, reason='No network') + def test_freeze_mercurial_clone(script, tmpdir): + """ + Test freezing a Mercurial clone. +@@ -140,6 +144,7 @@ def test_freeze_mercurial_clone(script, + _check_output(result, expected) + + ++@pytest.mark.skipif(True, reason='No network') + def test_freeze_bazaar_clone(script, tmpdir): + """ + Test freezing a Bazaar clone. +@@ -175,6 +180,7 @@ def test_freeze_bazaar_clone(script, tmp + _check_output(result, expected) + + ++@pytest.mark.skipif(True, reason='No network') + def test_freeze_with_local_option(script): + """ + Test that wsgiref (from global site-packages) is reported normally, but not with --local. +@@ -205,6 +211,7 @@ def test_freeze_with_local_option(script + _check_output(result, expected) + + ++@pytest.mark.skipif(True, reason='No network') + def test_freeze_with_requirement_option(script): + """ + Test that new requirements are created correctly with --requirement hints +diff -up pip-1.5.6/tests/functional/test_install_cleanup.py.orig pip-1.5.6/tests/functional/test_install_cleanup.py +--- pip-1.5.6/tests/functional/test_install_cleanup.py.orig 2014-11-27 11:23:20.863671103 +0100 ++++ pip-1.5.6/tests/functional/test_install_cleanup.py 2014-11-27 14:25:05.086297126 +0100 +@@ -1,4 +1,5 @@ + import os ++import pytest + + from os.path import abspath, exists, join + +@@ -20,6 +21,7 @@ def test_cleanup_after_install(script, d + script.assert_no_temp() + + ++@pytest.mark.skipif(True, reason='No network') + def test_no_clean_option_blocks_cleaning_after_install(script, data): + """ + Test --no-clean option blocks cleaning after install +@@ -29,6 +31,7 @@ def test_no_clean_option_blocks_cleaning + assert exists(build), "build/simple should still exist %s" % str(result) + + ++@pytest.mark.skipif(True, reason='No network') + def test_cleanup_after_install_editable_from_hg(script, tmpdir): + """ + Test clean up after cloning from Mercurial. +@@ -87,6 +90,7 @@ def test_cleanup_req_satisifed_no_name(s + script.assert_no_temp() + + ++@pytest.mark.skipif(True, reason='No network') + def test_download_should_not_delete_existing_build_dir(script): + """ + It should not delete build/ if existing before run the command +@@ -123,6 +127,7 @@ def test_cleanup_after_egg_info_exceptio + script.assert_no_temp() + + ++@pytest.mark.skipif(True, reason='No network') + def test_cleanup_prevented_upon_build_dir_exception(script, data): + """ + Test no cleanup occurs after a PreviousBuildDirError +diff -up pip-1.5.6/tests/functional/test_install_compat.py.orig pip-1.5.6/tests/functional/test_install_compat.py +--- pip-1.5.6/tests/functional/test_install_compat.py.orig 2014-11-27 11:23:20.912671389 +0100 ++++ pip-1.5.6/tests/functional/test_install_compat.py 2014-11-27 11:30:36.533251976 +0100 +@@ -3,9 +3,11 @@ Tests for compatibility workarounds. + + """ + import os ++import pytest + from tests.lib import pyversion, assert_all_changes + + ++@pytest.mark.skipif(True, reason='No network') + def test_debian_egg_name_workaround(script): + """ + We can uninstall packages installed with the pyversion removed from the +diff -up pip-1.5.6/tests/functional/test_install_config.py.orig pip-1.5.6/tests/functional/test_install_config.py +--- pip-1.5.6/tests/functional/test_install_config.py.orig 2014-11-27 11:23:20.920671436 +0100 ++++ pip-1.5.6/tests/functional/test_install_config.py 2014-11-27 11:30:03.530051860 +0100 +@@ -1,7 +1,7 @@ + import os + import tempfile + import textwrap +- ++import pytest + + def test_options_from_env_vars(script): + """ +@@ -28,6 +28,7 @@ def test_command_line_options_override_e + assert "Getting page http://download.zope.org/ppix" in result.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_env_vars_override_config_file(script, virtualenv): + """ + Test that environmental variables override settings in config files. +@@ -62,6 +63,7 @@ def _test_env_vars_override_config_file( + assert "Successfully installed INITools" in result.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_command_line_append_flags(script, virtualenv, data): + """ + Test command line flags that append to defaults set by environmental variables. +@@ -76,6 +78,7 @@ def test_command_line_append_flags(scrip + assert "Skipping link %s" % data.find_links in result.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_command_line_appends_correctly(script, data): + """ + Test multiple appending options set by environmental variables. +diff -up pip-1.5.6/tests/functional/test_install_download.py.orig pip-1.5.6/tests/functional/test_install_download.py +--- pip-1.5.6/tests/functional/test_install_download.py.orig 2014-11-27 11:23:20.970671729 +0100 ++++ pip-1.5.6/tests/functional/test_install_download.py 2014-11-27 11:29:42.503924368 +0100 +@@ -1,9 +1,11 @@ + import os + import textwrap ++import pytest + + from tests.lib.path import Path + + ++@pytest.mark.skipif(True, reason='No network') + def test_download_if_requested(script): + """ + It should download (in the scratch path) and not install if requested. +@@ -13,6 +15,7 @@ def test_download_if_requested(script): + assert script.site_packages/ 'initools' not in result.files_created + + ++@pytest.mark.skipif(True, reason='No network') + def test_download_wheel(script): + """ + Test using "pip install --download" to download a *.whl archive. +@@ -26,6 +29,7 @@ def test_download_wheel(script): + assert script.site_packages/ 'piptestpackage' not in result.files_created + + ++@pytest.mark.skipif(True, reason='No network') + def test_single_download_from_requirements_file(script): + """ + It should support download (in the scratch path) from PyPi from a requirements file +@@ -38,6 +42,7 @@ def test_single_download_from_requiremen + assert script.site_packages/ 'initools' not in result.files_created + + ++@pytest.mark.skipif(True, reason='No network') + def test_download_should_download_dependencies(script): + """ + It should download dependencies (in the scratch path) +@@ -77,6 +82,7 @@ def test_download_should_download_wheel_ + assert Path('scratch') / dep_filename in result.files_created + + ++@pytest.mark.skipif(True, reason='No network') + def test_download_should_skip_existing_files(script): + """ + It should not download files already existing in the scratch dir +diff -up pip-1.5.6/tests/functional/test_install_extras.py.orig pip-1.5.6/tests/functional/test_install_extras.py +--- pip-1.5.6/tests/functional/test_install_extras.py.orig 2014-11-27 11:23:21.066672291 +0100 ++++ pip-1.5.6/tests/functional/test_install_extras.py 2014-11-27 11:31:01.854405511 +0100 +@@ -1,6 +1,8 @@ ++import pytest + from os.path import join + + ++@pytest.mark.skipif(True, reason='No network') + def test_simple_extras_install_from_pypi(script): + """ + Test installing a package from PyPI using extras dependency Paste[openid]. +@@ -10,6 +12,7 @@ def test_simple_extras_install_from_pypi + assert initools_folder in result.files_created, result.files_created + + ++@pytest.mark.skipif(True, reason='No network') + def test_no_extras_uninstall(script): + """ + No extras dependency gets uninstalled when the root package is uninstalled +diff -up pip-1.5.6/tests/functional/test_install.py.orig pip-1.5.6/tests/functional/test_install.py +--- pip-1.5.6/tests/functional/test_install.py.orig 2014-11-27 11:23:20.227667380 +0100 ++++ pip-1.5.6/tests/functional/test_install.py 2014-11-27 11:23:20.825670880 +0100 +@@ -13,6 +13,7 @@ from tests.lib.local_repos import local_ + from tests.lib.path import Path + + ++@pytest.mark.skipif(True, reason='No network') + def test_without_setuptools(script): + script.run("pip", "uninstall", "setuptools", "-y") + result = script.run( +@@ -26,6 +27,7 @@ def test_without_setuptools(script): + ) + + ++@pytest.mark.skipif(True, reason='No network') + def test_pip_second_command_line_interface_works(script): + """ + Check if ``pip`` commands behaves equally +@@ -39,6 +41,7 @@ def test_pip_second_command_line_interfa + assert initools_folder in result.files_created, str(result) + + ++@pytest.mark.skipif(True, reason='No network') + def test_install_from_pypi(script): + """ + Test installing a package from PyPI. +@@ -60,6 +63,7 @@ def test_editable_install(script): + assert not result.files_updated, result.files_updated + + ++@pytest.mark.skipif(True, reason='No network') + def test_install_editable_from_svn(script, tmpdir): + """ + Test checking out from svn. +@@ -71,6 +75,7 @@ def test_install_editable_from_svn(scrip + result.assert_installed('INITools', with_files=['.svn']) + + ++@pytest.mark.skipif(True, reason='No network') + def test_download_editable_to_custom_path(script, tmpdir): + """ + Test downloading an editable using a relative custom src folder. +@@ -94,6 +99,7 @@ def test_download_editable_to_custom_pat + assert customdl_files_created + + ++@pytest.mark.skipif(True, reason='No network') + def test_editable_no_install_followed_by_no_download(script, tmpdir): + """ + Test installing an editable in two steps (first with --no-install, then with --no-download). +@@ -113,6 +119,7 @@ def test_editable_no_install_followed_by + result.assert_installed('INITools', without_files=[curdir, '.svn']) + + ++@pytest.mark.skipif(True, reason='No network') + def test_no_install_followed_by_no_download(script): + """ + Test installing in two steps (first with --no-install, then with --no-download). +@@ -143,6 +150,7 @@ def test_bad_install_with_no_download(sc + "an equivalent install with --no-install?" in result.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_install_dev_version_from_pypi(script): + """ + Test using package==dev. +@@ -154,6 +162,7 @@ def test_install_dev_version_from_pypi(s + assert (script.site_packages / 'initools') in result.files_created, str(result.stdout) + + ++@pytest.mark.skipif(True, reason='No network') + def test_install_editable_from_git(script, tmpdir): + """ + Test cloning from Git. +@@ -166,6 +175,7 @@ def test_install_editable_from_git(scrip + result.assert_installed('pip-test-package', with_files=['.git']) + + ++@pytest.mark.skipif(True, reason='No network') + def test_install_editable_from_hg(script, tmpdir): + """ + Test cloning from Mercurial. +@@ -177,6 +187,7 @@ def test_install_editable_from_hg(script + result.assert_installed('ScriptTest', with_files=['.hg']) + + ++@pytest.mark.skipif(True, reason='No network') + def test_vcs_url_final_slash_normalization(script, tmpdir): + """ + Test that presence or absence of final slash in VCS URL is normalized. +@@ -188,6 +199,7 @@ def test_vcs_url_final_slash_normalizati + assert 'pip-log.txt' not in result.files_created, result.files_created['pip-log.txt'].bytes + + ++@pytest.mark.skipif(True, reason='No network') + def test_install_editable_from_bazaar(script, tmpdir): + """ + Test checking out from Bazaar. +@@ -199,6 +211,7 @@ def test_install_editable_from_bazaar(sc + result.assert_installed('django-wikiapp', with_files=['.bzr']) + + ++@pytest.mark.skipif(True, reason='No network') + def test_vcs_url_urlquote_normalization(script, tmpdir): + """ + Test that urlquoted characters are normalized for repo URL comparison. +@@ -295,6 +308,7 @@ def test_install_pardir(script, data): + assert egg_info_folder in result.files_created, str(result) + + ++@pytest.mark.skipif(True, reason='No network') + def test_install_global_option(script): + """ + Test using global distutils options. +@@ -320,6 +334,7 @@ def test_install_with_hacked_egg_info(sc + assert 'Successfully installed hackedegginfo\n' in result.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_install_using_install_option_and_editable(script, tmpdir): + """ + Test installing a tool using -e and --install-option +@@ -334,6 +349,7 @@ def test_install_using_install_option_an + assert virtualenv_bin in result.files_created + + ++@pytest.mark.skipif(True, reason='No network') + def test_install_global_option_using_editable(script, tmpdir): + """ + Test using global distutils options, but in an editable installation +@@ -345,6 +361,7 @@ def test_install_global_option_using_edi + assert '0.2.5\n' in result.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_install_package_with_same_name_in_curdir(script): + """ + Test installing a package with the same name of a local folder +@@ -398,6 +415,7 @@ def test_install_folder_using_relative_p + assert egg_folder in result.files_created, str(result) + + ++@pytest.mark.skipif(True, reason='No network') + def test_install_package_which_contains_dev_in_name(script): + """ + Test installing package from pypi which contains 'dev' in name +@@ -409,6 +427,7 @@ def test_install_package_which_contains_ + assert egg_info_folder in result.files_created, str(result) + + ++@pytest.mark.skipif(True, reason='No network') + def test_install_package_with_target(script): + """ + Test installing a package using pip install --target +@@ -481,6 +500,7 @@ def test_url_req_case_mismatch(script, d + assert egg_folder not in result.files_created, str(result) + + ++@pytest.mark.skipif(True, reason='No network') + def test_compiles_pyc(script): + """ + Test installing with --compile on +@@ -501,6 +521,7 @@ def test_compiles_pyc(script): + assert any(exists) + + ++@pytest.mark.skipif(True, reason='No network') + def test_no_compiles_pyc(script, data): + """ + Test installing from wheel with --compile on +diff -up pip-1.5.6/tests/functional/test_install_reqs.py.orig pip-1.5.6/tests/functional/test_install_reqs.py +--- pip-1.5.6/tests/functional/test_install_reqs.py.orig 2014-11-27 11:23:21.114672571 +0100 ++++ pip-1.5.6/tests/functional/test_install_reqs.py 2014-11-27 14:25:42.443560282 +0100 +@@ -13,6 +13,7 @@ from tests.lib.local_repos import local_ + from tests.lib.path import Path + + ++@pytest.mark.skipif(True, reason='No network') + def test_requirements_file(script): + """ + Test installing from a requirements file. +@@ -59,6 +60,7 @@ def test_relative_requirements_file(scri + assert (script.site_packages/'fspkg') in result.files_created, str(result.stdout) + + ++@pytest.mark.skipif(True, reason='No network') + def test_multiple_requirements_files(script, tmpdir): + """ + Test installing from multiple nested requirements files. +@@ -110,6 +112,7 @@ def test_install_local_editable_with_ext + assert script.site_packages/'simple' in res.files_created, str(result) + + ++@pytest.mark.skipif(True, reason='No network') + def test_install_local_editable_with_subdirectory(script): + version_pkg_path = _create_test_package_with_subdirectory(script, + 'version_subpkg') +diff -up pip-1.5.6/tests/functional/test_install_upgrade.py.orig pip-1.5.6/tests/functional/test_install_upgrade.py +--- pip-1.5.6/tests/functional/test_install_upgrade.py.orig 2014-11-27 11:23:21.159672835 +0100 ++++ pip-1.5.6/tests/functional/test_install_upgrade.py 2014-11-27 11:23:21.743676253 +0100 +@@ -22,6 +22,7 @@ def test_no_upgrade_unless_requested(scr + assert not result.files_created, 'pip install INITools upgraded when it should not have' + + ++@pytest.mark.skipif(True, reason='No network') + def test_upgrade_to_specific_version(script): + """ + It does upgrade to specific version requested. +@@ -34,6 +35,7 @@ def test_upgrade_to_specific_version(scr + assert script.site_packages/'INITools-0.2-py%s.egg-info' % pyversion in result.files_created + + ++@pytest.mark.skipif(True, reason='No network') + def test_upgrade_if_requested(script): + """ + And it does upgrade if requested. +@@ -56,6 +58,7 @@ def test_upgrade_with_newest_already_ins + assert 'already up-to-date' in result.stdout, result.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_upgrade_force_reinstall_newest(script): + """ + Force reinstallation of a package even if it is already at its newest +@@ -69,6 +72,7 @@ def test_upgrade_force_reinstall_newest( + assert_all_changes(result, result3, [script.venv/'build', 'cache']) + + ++@pytest.mark.skipif(True, reason='No network') + def test_uninstall_before_upgrade(script): + """ + Automatic uninstall-before-upgrade. +@@ -82,6 +86,7 @@ def test_uninstall_before_upgrade(script + assert_all_changes(result, result3, [script.venv/'build', 'cache']) + + ++@pytest.mark.skipif(True, reason='No network') + def test_uninstall_before_upgrade_from_url(script): + """ + Automatic uninstall-before-upgrade from URL. +@@ -95,6 +100,7 @@ def test_uninstall_before_upgrade_from_u + assert_all_changes(result, result3, [script.venv/'build', 'cache']) + + ++@pytest.mark.skipif(True, reason='No network') + def test_upgrade_to_same_version_from_url(script): + """ + When installing from a URL the same version that is already installed, no +@@ -109,6 +115,7 @@ def test_upgrade_to_same_version_from_ur + assert_all_changes(result, result3, [script.venv/'build', 'cache']) + + ++@pytest.mark.skipif(True, reason='No network') + def test_upgrade_from_reqs_file(script): + """ + Upgrade from a requirements file. +@@ -161,6 +168,7 @@ def test_editable_git_upgrade(script): + assert 'some different version' in version2.stdout, "Output: %s" % (version2.stdout) + + ++@pytest.mark.skipif(True, reason='No network') + def test_should_not_install_always_from_cache(script): + """ + If there is an old cached package, pip should download the newer version +@@ -173,6 +181,7 @@ def test_should_not_install_always_from_ + assert script.site_packages/'INITools-0.1-py%s.egg-info' % pyversion in result.files_created + + ++@pytest.mark.skipif(True, reason='No network') + def test_install_with_ignoreinstalled_requested(script): + """ + Test old conflicting package is completely ignored +@@ -185,6 +194,7 @@ def test_install_with_ignoreinstalled_re + assert os.path.exists(script.site_packages_path/'INITools-0.3-py%s.egg-info' % pyversion) + + ++@pytest.mark.skipif(True, reason='No network') + def test_upgrade_vcs_req_with_no_dists_found(script, tmpdir): + """It can upgrade a VCS requirement that has no distributions otherwise.""" + req = "%s#egg=pip-test-package" % local_checkout( +@@ -194,6 +204,7 @@ def test_upgrade_vcs_req_with_no_dists_f + assert not result.returncode + + ++@pytest.mark.skipif(True, reason='No network') + def test_upgrade_vcs_req_with_dist_found(script): + """It can upgrade a VCS requirement that has distributions on the index.""" + # TODO(pnasrat) Using local_checkout fails on windows - oddness with the test path urls/git. +diff -up pip-1.5.6/tests/functional/test_install_user.py.orig pip-1.5.6/tests/functional/test_install_user.py +--- pip-1.5.6/tests/functional/test_install_user.py.orig 2014-11-27 11:23:21.750676293 +0100 ++++ pip-1.5.6/tests/functional/test_install_user.py 2014-11-27 11:23:22.157678676 +0100 +@@ -42,7 +42,8 @@ def _patch_dist_in_site_packages(script) + @pytest.mark.skipif("hasattr(sys, 'pypy_version_info')") + class Tests_UserSite: + +- def test_reset_env_system_site_packages_usersite(self, script, virtualenv): ++ @pytest.mark.skipif(True, reason='No network') ++ def test_reset_env_system_site_packages_usersite(self, script, virtualenv): + """ + reset_env(system_site_packages=True) produces env where a --user install can be found using pkg_resources + """ +@@ -53,7 +54,8 @@ class Tests_UserSite: + assert 'INITools'== project_name, "'%s' should be 'INITools'" %project_name + + +- def test_install_subversion_usersite_editable_with_distribute(self, script, virtualenv, tmpdir): ++ @pytest.mark.skipif(True, reason='No network') ++ def test_install_subversion_usersite_editable_with_distribute(self, script, virtualenv, tmpdir): + """ + Test installing current directory ('.') into usersite after installing distribute + """ +@@ -85,7 +87,8 @@ class Tests_UserSite: + result = script.pip('install', '--user', curdir, cwd=run_from, expect_error=True) + assert "Can not perform a '--user' install. User site-packages are not visible in this virtualenv." in result.stdout + +- def test_install_user_conflict_in_usersite(self, script, virtualenv): ++ @pytest.mark.skipif(True, reason='No network') ++ def test_install_user_conflict_in_usersite(self, script, virtualenv): + """ + Test user install with conflict in usersite updates usersite. + """ +@@ -99,7 +102,8 @@ class Tests_UserSite: + assert egg_info_folder in result2.files_created, str(result2) + assert not isfile(initools_v3_file), initools_v3_file + +- def test_install_user_conflict_in_globalsite(self, script, virtualenv): ++ @pytest.mark.skipif(True, reason='No network') ++ def test_install_user_conflict_in_globalsite(self, script, virtualenv): + """ + Test user install with conflict in global site ignores site and installs to usersite + """ +@@ -129,7 +133,8 @@ class Tests_UserSite: + assert isdir(egg_info_folder) + assert isdir(initools_folder) + +- def test_upgrade_user_conflict_in_globalsite(self, script, virtualenv): ++ @pytest.mark.skipif(True, reason='No network') ++ def test_upgrade_user_conflict_in_globalsite(self, script, virtualenv): + """ + Test user install/upgrade with conflict in global site ignores site and installs to usersite + """ +@@ -159,7 +164,8 @@ class Tests_UserSite: + assert isdir(egg_info_folder), result2.stdout + assert isdir(initools_folder) + +- def test_install_user_conflict_in_globalsite_and_usersite(self, script, virtualenv): ++ @pytest.mark.skipif(True, reason='No network') ++ def test_install_user_conflict_in_globalsite_and_usersite(self, script, virtualenv): + """ + Test user install with conflict in globalsite and usersite ignores global site and updates usersite. + """ +@@ -190,7 +196,8 @@ class Tests_UserSite: + assert isdir(egg_info_folder) + assert isdir(initools_folder) + +- def test_install_user_in_global_virtualenv_with_conflict_fails(self, script, virtualenv): ++ @pytest.mark.skipif(True, reason='No network') ++ def test_install_user_in_global_virtualenv_with_conflict_fails(self, script, virtualenv): + """ + Test user install in --system-site-packages virtualenv with conflict in site fails. + """ +diff -up pip-1.5.6/tests/functional/test_install_vcs_git.py.orig pip-1.5.6/tests/functional/test_install_vcs_git.py +--- pip-1.5.6/tests/functional/test_install_vcs_git.py.orig 2014-11-27 14:27:33.238340755 +0100 ++++ pip-1.5.6/tests/functional/test_install_vcs_git.py 2014-11-27 14:28:28.154727603 +0100 +@@ -36,6 +36,7 @@ def test_get_refs_should_return_branch_n + assert result['branch0.1'] == commit, result + + ++@pytest.mark.skipif(True, reason='No network') + def test_get_refs_should_ignore_no_branch(script): + version_pkg_path = _create_test_package(script) + script.run('git', 'branch', 'branch0.1', cwd=version_pkg_path) +@@ -79,6 +80,7 @@ def test_check_rev_options_should_handle + + # TODO(pnasrat) fix all helpers to do right things with paths on windows. + @pytest.mark.skipif("sys.platform == 'win32'") ++@pytest.mark.skipif(True, reason='No network') + def test_check_submodule_addition(script): + """ + Submodules are pulled in on install and updated on upgrade. +diff -up pip-1.5.6/tests/functional/test_install_vcs.py.orig pip-1.5.6/tests/functional/test_install_vcs.py +--- pip-1.5.6/tests/functional/test_install_vcs.py.orig 2014-11-27 11:23:22.169678746 +0100 ++++ pip-1.5.6/tests/functional/test_install_vcs.py 2014-11-27 14:27:14.133206173 +0100 +@@ -1,7 +1,9 @@ ++import pytest + from tests.lib import _create_test_package, _change_test_package_version + from tests.lib.local_repos import local_checkout + + ++@pytest.mark.skipif(True, reason='No network') + def test_install_editable_from_git_with_https(script, tmpdir): + """ + Test cloning from Git with https. +@@ -13,6 +15,7 @@ def test_install_editable_from_git_with_ + result.assert_installed('pip-test-package', with_files=['.git']) + + ++@pytest.mark.skipif(True, reason='No network') + def test_git_with_sha1_revisions(script): + """ + Git backend should be able to install from SHA1 revisions +@@ -25,6 +28,7 @@ def test_git_with_sha1_revisions(script) + assert '0.1' in version.stdout, version.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_git_with_branch_name_as_revision(script): + """ + Git backend should be able to install from branch names +@@ -37,6 +41,7 @@ def test_git_with_branch_name_as_revisio + assert 'some different version' in version.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_git_with_tag_name_as_revision(script): + """ + Git backend should be able to install from tag names +@@ -49,6 +54,7 @@ def test_git_with_tag_name_as_revision(s + assert '0.1' in version.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_git_with_tag_name_and_update(script, tmpdir): + """ + Test cloning a git repository and updating to a different version. +@@ -64,6 +70,7 @@ def test_git_with_tag_name_and_update(sc + assert '0.1.2' in result.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_git_branch_should_not_be_changed(script, tmpdir): + """ + Editable installations should not change branch +@@ -77,6 +84,7 @@ def test_git_branch_should_not_be_change + assert '* master' in result.stdout, result.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_git_with_non_editable_unpacking(script, tmpdir): + """ + Test cloning a git repository from a non-editable URL with a given tag. +@@ -88,6 +96,7 @@ def test_git_with_non_editable_unpacking + assert '0.1.2' in result.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_git_with_editable_where_egg_contains_dev_string(script, tmpdir): + """ + Test cloning a git repository from an editable url which contains "dev" string +@@ -97,6 +106,7 @@ def test_git_with_editable_where_egg_con + result.assert_installed('django-devserver', with_files=['.git']) + + ++@pytest.mark.skipif(True, reason='No network') + def test_git_with_non_editable_where_egg_contains_dev_string(script, tmpdir): + """ + Test cloning a git repository from a non-editable url which contains "dev" string +@@ -107,6 +117,7 @@ def test_git_with_non_editable_where_egg + assert devserver_folder in result.files_created, str(result) + + ++@pytest.mark.skipif(True, reason='No network') + def test_git_with_ambiguous_revs(script): + """ + Test git with two "names" (tag/branch) pointing to the same commit +@@ -121,6 +132,7 @@ def test_git_with_ambiguous_revs(script) + result.assert_installed('version-pkg', with_files=['.git']) + + ++@pytest.mark.skipif(True, reason='No network') + def test_git_works_with_editable_non_origin_repo(script): + # set up, create a git repo and install it as editable from a local directory path + version_pkg_path = _create_test_package(script) +diff -up pip-1.5.6/tests/functional/test_install_vcs_svn.py.orig pip-1.5.6/tests/functional/test_install_vcs_svn.py +--- pip-1.5.6/tests/functional/test_install_vcs_svn.py.orig 2014-11-27 14:30:00.551378474 +0100 ++++ pip-1.5.6/tests/functional/test_install_vcs_svn.py 2014-11-27 14:30:03.217397254 +0100 +@@ -1,7 +1,8 @@ ++import pytest + from mock import patch + from pip.vcs.subversion import Subversion + +- ++@pytest.mark.skipif(True, reason='No network') + @patch('pip.vcs.subversion.call_subprocess') + def test_obtain_should_recognize_auth_info_url(call_subprocess_mock, script): + svn = Subversion(url='svn+http://username:password@svn.example.com/') +@@ -11,6 +12,7 @@ def test_obtain_should_recognize_auth_in + 'http://username:password@svn.example.com/', script.scratch_path/'test']) + + ++@pytest.mark.skipif(True, reason='No network') + @patch('pip.vcs.subversion.call_subprocess') + def test_export_should_recognize_auth_info_url(call_subprocess_mock, script): + svn = Subversion(url='svn+http://username:password@svn.example.com/') +diff -up pip-1.5.6/tests/functional/test_install_wheel.py.orig pip-1.5.6/tests/functional/test_install_wheel.py +--- pip-1.5.6/tests/functional/test_install_wheel.py.orig 2014-11-27 11:23:22.371679928 +0100 ++++ pip-1.5.6/tests/functional/test_install_wheel.py 2014-11-27 11:23:22.372679934 +0100 +@@ -92,6 +92,7 @@ def test_install_from_wheel_with_headers + result.stdout) + + ++@pytest.mark.skipif(True, reason='No network') + def test_install_wheel_with_target(script, data): + """ + Test installing a wheel using pip install --target +diff -up pip-1.5.6/tests/functional/test_list.py.orig pip-1.5.6/tests/functional/test_list.py +--- pip-1.5.6/tests/functional/test_list.py.orig 2014-11-27 11:23:22.379679974 +0100 ++++ pip-1.5.6/tests/functional/test_list.py 2014-11-27 11:31:06.129431433 +0100 +@@ -1,6 +1,7 @@ + import os + import re + import textwrap ++import pytest + + from tests.lib.local_repos import local_checkout + +@@ -26,6 +27,7 @@ def test_local_flag(script, data): + assert 'simple (1.0)' in result.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_uptodate_flag(script, data): + """ + Test the behavior of --uptodate flag in the list command +@@ -39,6 +41,7 @@ def test_uptodate_flag(script, data): + assert 'simple2 (3.0)' in result.stdout, str(result) + + ++@pytest.mark.skipif(True, reason='No network') + def test_outdated_flag(script, data): + """ + Test the behavior of --outdated flag in the list command +@@ -52,6 +55,7 @@ def test_outdated_flag(script, data): + assert 'simple2' not in result.stdout, str(result) #3.0 is latest + + ++@pytest.mark.skipif(True, reason='No network') + def test_editables_flag(script, data): + """ + Test the behavior of --editables flag in the list command +diff -up pip-1.5.6/tests/functional/test_search.py.orig pip-1.5.6/tests/functional/test_search.py +--- pip-1.5.6/tests/functional/test_search.py.orig 2014-11-27 11:23:22.903683041 +0100 ++++ pip-1.5.6/tests/functional/test_search.py 2014-11-27 11:30:57.397378486 +0100 +@@ -1,3 +1,4 @@ ++import pytest + import pip.download + from pip.commands.search import (compare_versions, + highest_version, +@@ -53,6 +54,7 @@ def test_invalid_pypi_transformation(): + assert transform_hits(pypi_hits) == expected + + ++@pytest.mark.skipif(True, reason='No network') + def test_search(script): + """ + End to end test of search command. +@@ -62,6 +64,7 @@ def test_search(script): + assert 'A tool for installing and managing Python packages' in output.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_multiple_search(script): + """ + Test searching for multiple packages at once. +@@ -80,6 +83,7 @@ def test_search_missing_argument(script) + assert 'ERROR: Missing required argument (search query).' in result.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_run_method_should_return_sucess_when_find_packages(): + """ + Test SearchCommand.run for found package +@@ -91,6 +95,7 @@ def test_run_method_should_return_sucess + assert status == SUCCESS + + ++@pytest.mark.skipif(True, reason='No network') + def test_run_method_should_return_no_matches_found_when_does_not_find_packages(): + """ + Test SearchCommand.run for no matches +@@ -102,6 +107,7 @@ def test_run_method_should_return_no_mat + assert status == NO_MATCHES_FOUND, status + + ++@pytest.mark.skipif(True, reason='No network') + def test_search_should_exit_status_code_zero_when_find_packages(script): + """ + Test search exit status code for package found +@@ -110,6 +116,7 @@ def test_search_should_exit_status_code_ + assert result.returncode == SUCCESS + + ++@pytest.mark.skipif(True, reason='No network') + def test_search_exit_status_code_when_finds_no_package(script): + """ + Test search exit status code for no matches +diff -up pip-1.5.6/tests/functional/test_show.py.orig pip-1.5.6/tests/functional/test_show.py +--- pip-1.5.6/tests/functional/test_show.py.orig 2014-11-27 11:23:23.160684545 +0100 ++++ pip-1.5.6/tests/functional/test_show.py 2014-11-27 11:30:52.417348289 +0100 +@@ -1,4 +1,5 @@ + import re ++import pytest + from pip import __version__ + from pip.commands.show import search_packages_info + +@@ -34,6 +35,7 @@ def test_show_with_files_not_found(scrip + assert lines[6] == 'Cannot locate installed-files.txt', lines[5] + + ++@pytest.mark.skipif(True, reason='No network') + def test_show_with_all_files(script): + """ + Test listing all files in the show command. +diff -up pip-1.5.6/tests/functional/test_uninstall.py.orig pip-1.5.6/tests/functional/test_uninstall.py +--- pip-1.5.6/tests/functional/test_uninstall.py.orig 2014-11-27 11:23:23.168684592 +0100 ++++ pip-1.5.6/tests/functional/test_uninstall.py 2014-11-27 11:30:22.367166080 +0100 +@@ -3,6 +3,7 @@ from __future__ import with_statement + import textwrap + import os + import sys ++import pytest + from os.path import join, abspath, normpath + from tempfile import mkdtemp + from mock import patch +@@ -12,6 +13,7 @@ from tests.lib.local_repos import local_ + from pip.util import rmtree + + ++@pytest.mark.skipif(True, reason='No network') + def test_simple_uninstall(script): + """ + Test simple install and uninstall. +@@ -25,6 +27,7 @@ def test_simple_uninstall(script): + assert_all_changes(result, result2, [script.venv/'build', 'cache']) + + ++@pytest.mark.skipif(True, reason='No network') + def test_uninstall_with_scripts(script): + """ + Uninstall an easy_installed package with scripts. +@@ -38,6 +41,7 @@ def test_uninstall_with_scripts(script): + assert_all_changes(result, result2, [script.venv/'build', 'cache', easy_install_pth]) + + ++@pytest.mark.skipif(True, reason='No network') + def test_uninstall_easy_install_after_import(script): + """ + Uninstall an easy_installed package after it's been imported +@@ -50,6 +54,7 @@ def test_uninstall_easy_install_after_im + assert_all_changes(result, result2, [script.venv/'build', 'cache', script.site_packages/'easy-install.pth']) + + ++@pytest.mark.skipif(True, reason='No network') + def test_uninstall_namespace_package(script): + """ + Uninstall a distribution with a namespace package without clobbering +@@ -90,6 +95,7 @@ def test_uninstall_overlapping_package(s + assert_all_changes(result2, result3, []) + + ++@pytest.mark.skipif(True, reason='No network') + def test_uninstall_console_scripts(script): + """ + Test uninstalling a package with more files (console_script entry points, extra directories). +@@ -102,6 +108,7 @@ def test_uninstall_console_scripts(scrip + assert_all_changes(result, result2, [script.venv/'build', 'cache']) + + ++@pytest.mark.skipif(True, reason='No network') + def test_uninstall_easy_installed_console_scripts(script): + """ + Test uninstalling package with console_scripts that is easy_installed. +@@ -114,6 +121,7 @@ def test_uninstall_easy_installed_consol + assert_all_changes(result, result2, [script.venv/'build', 'cache', script.site_packages/'easy-install.pth']) + + ++@pytest.mark.skipif(True, reason='No network') + def test_uninstall_editable_from_svn(script, tmpdir): + """ + Test uninstalling an editable installation from svn. +@@ -126,6 +134,7 @@ def test_uninstall_editable_from_svn(scr + assert_all_changes(result, result2, [script.venv/'src', script.venv/'build', script.site_packages/'easy-install.pth']) + + ++@pytest.mark.skipif(True, reason='No network') + def test_uninstall_editable_with_source_outside_venv(script, tmpdir): + """ + Test uninstalling editable install from existing source outside the venv. +@@ -149,6 +158,7 @@ def _test_uninstall_editable_with_source + assert_all_changes(result, result3, [script.venv/'build', script.site_packages/'easy-install.pth']) + + ++@pytest.mark.skipif(True, reason='No network') + def test_uninstall_from_reqs_file(script, tmpdir): + """ + Test uninstall from a requirements file. +diff -up pip-1.5.6/tests/functional/test_uninstall_user.py.orig pip-1.5.6/tests/functional/test_uninstall_user.py +--- pip-1.5.6/tests/functional/test_uninstall_user.py.orig 2014-11-27 11:23:23.590687062 +0100 ++++ pip-1.5.6/tests/functional/test_uninstall_user.py 2014-11-27 11:29:55.413002643 +0100 +@@ -17,7 +17,8 @@ from tests.functional.test_install_user + @pytest.mark.skipif("hasattr(sys, 'pypy_version_info')") + class Tests_UninstallUserSite: + +- def test_uninstall_from_usersite(self, script, virtualenv): ++ @pytest.mark.skipif(True, reason='No network') ++ def test_uninstall_from_usersite(self, script, virtualenv): + """ + Test uninstall from usersite + """ +diff -up pip-1.5.6/tests/functional/test_wheel.py.orig pip-1.5.6/tests/functional/test_wheel.py +--- pip-1.5.6/tests/functional/test_wheel.py.orig 2014-11-27 11:23:23.598687109 +0100 ++++ pip-1.5.6/tests/functional/test_wheel.py 2014-11-27 11:30:30.345214455 +0100 +@@ -2,6 +2,7 @@ + import os + import sys + import textwrap ++import pytest + + from os.path import exists + +@@ -20,6 +21,7 @@ def test_pip_wheel_fails_without_wheel(s + assert "'pip wheel' requires the 'wheel' package" in result.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_pip_wheel_success(script, data): + """ + Test 'pip wheel' success. +@@ -32,6 +34,7 @@ def test_pip_wheel_success(script, data) + assert "Successfully built simple" in result.stdout, result.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_pip_wheel_downloads_wheels(script, data): + """ + Test 'pip wheel' downloads wheels +@@ -46,6 +49,7 @@ def test_pip_wheel_downloads_wheels(scri + assert "Saved" in result.stdout, result.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_pip_wheel_fail(script, data): + """ + Test 'pip wheel' failure. +@@ -59,6 +63,7 @@ def test_pip_wheel_fail(script, data): + assert "Failed to build wheelbroken" in result.stdout, result.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_pip_wheel_ignore_wheels_editables(script, data): + """ + Test 'pip wheel' ignores editables +@@ -85,6 +90,7 @@ def test_pip_wheel_ignore_wheels_editabl + assert ignore_editable in result.stdout, result.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_no_clean_option_blocks_cleaning_after_wheel(script, data): + """ + Test --no-clean option blocks cleaning after wheel build +@@ -95,6 +101,7 @@ def test_no_clean_option_blocks_cleaning + assert exists(build), "build/simple should still exist %s" % str(result) + + ++@pytest.mark.skipif(True, reason='No network') + def test_pip_wheel_source_deps(script, data): + """ + Test 'pip wheel --use-wheel' finds and builds source archive dependencies of wheels +@@ -108,6 +115,7 @@ def test_pip_wheel_source_deps(script, d + assert "Successfully built source" in result.stdout, result.stdout + + ++@pytest.mark.skipif(True, reason='No network') + def test_pip_wheel_fail_cause_of_previous_build_dir(script, data): + """Test when 'pip wheel' tries to install a package that has a previous build directory""" + +diff -up pip-1.5.6/tests/unit/test_finder.py.orig pip-1.5.6/tests/unit/test_finder.py +--- pip-1.5.6/tests/unit/test_finder.py.orig 2014-11-27 11:23:23.937689093 +0100 ++++ pip-1.5.6/tests/unit/test_finder.py 2014-11-27 14:30:48.597716927 +0100 +@@ -71,6 +71,7 @@ def test_finder_detects_latest_already_s + finder.find_requirement(req, True) + + ++@pytest.mark.skipif(True, reason='No network') + def test_finder_detects_latest_already_satisfied_pypi_links(): + """Test PackageFinder detects latest already satisified using pypi links""" + req = InstallRequirement.from_line('initools', None) +@@ -199,6 +200,7 @@ def test_finder_priority_file_over_page( + assert link.url.startswith("file://") + + ++@pytest.mark.skipif(True, reason='No network') + def test_finder_priority_page_over_deplink(): + """Test PackageFinder prefers page links over equivalent dependency links""" + req = InstallRequirement.from_line('gmpy==1.15', None) +diff -up pip-1.5.6/tests/unit/test_req.py.orig pip-1.5.6/tests/unit/test_req.py +--- pip-1.5.6/tests/unit/test_req.py.orig 2014-11-27 11:23:23.946689145 +0100 ++++ pip-1.5.6/tests/unit/test_req.py 2014-11-27 11:23:23.947689151 +0100 +@@ -149,6 +149,7 @@ def test_parse_editable_local_extras(isd + normcase_mock.return_value = "/some/path/foo" + assert parse_editable('foo[bar,baz]', 'git') == (None, 'file:///some/path/foo', ('bar', 'baz')) + ++@pytest.mark.skipif(True, reason='No network') + def test_remote_reqs_parse(): + """ + Test parsing a simple remote requirements file +diff -up pip-1.5.6/tests/functional/test_install_cleanup.py.orig pip-1.5.6/tests/functional/test_install_cleanup.py +--- pip-1.5.6/tests/functional/test_install_cleanup.py.orig 2014-12-01 13:31:24.075490830 +0100 ++++ pip-1.5.6/tests/functional/test_install_cleanup.py 2014-12-01 13:30:59.208326741 +0100 +@@ -62,6 +62,7 @@ def test_cleanup_after_install_from_loca + script.assert_no_temp() + + ++@pytest.mark.skipif(True, reason='No network') + def test_no_install_and_download_should_not_leave_build_dir(script): + """ + It should remove build/ dir if it was pip that created +diff -up pip-1.5.6/tests/functional/test_install_vcs_git.py.orig pip-1.5.6/tests/functional/test_install_vcs_git.py +--- pip-1.5.6/tests/functional/test_install_vcs_git.py.orig 2014-12-01 13:32:11.419803237 +0100 ++++ pip-1.5.6/tests/functional/test_install_vcs_git.py 2014-12-01 13:32:30.298927814 +0100 +@@ -13,6 +13,7 @@ from tests.lib.git_submodule_helpers imp + ) + + ++@pytest.mark.skipif(True, reason='No network') + def test_get_refs_should_return_tag_name_and_commit_pair(script): + version_pkg_path = _create_test_package(script) + script.run('git', 'tag', '0.1', cwd=version_pkg_path) +@@ -25,6 +26,7 @@ def test_get_refs_should_return_tag_name + assert result['0.2'] == commit, result + + ++@pytest.mark.skipif(True, reason='No network') + def test_get_refs_should_return_branch_name_and_commit_pair(script): + version_pkg_path = _create_test_package(script) + script.run('git', 'branch', 'branch0.1', cwd=version_pkg_path) diff --git a/sources b/sources index 28c4845..185df82 100644 --- a/sources +++ b/sources @@ -1 +1,2 @@ 01026f87978932060cc86c1dc527903e pip-1.5.6.tar.gz +03fb001023223970c16e9379f53af8b6 pip-1.5.6-tests.tar.gz