From 09c096bf9f82cc034b1a1969659e93e354cefde1 Mon Sep 17 00:00:00 2001 From: Ethan Jucovy Date: Mon, 2 Jul 2012 02:17:40 -0400 Subject: [PATCH 1/3] add tests for proper recursive upgrade behavior --- .../FSPkgUsesInitools/fspkg/__init__.py | 1 + tests/packages/FSPkgUsesInitools/setup.cfg | 3 ++ tests/packages/FSPkgUsesInitools/setup.py | 25 +++++++++++++ .../FSPkgUsesInitools/fspkg/__init__.py | 1 + .../FSPkgUsesInitools/setup.cfg | 3 ++ .../FSPkgUsesInitools/setup.py | 25 +++++++++++++ .../FSPkgUsesNewishInitools/fspkg/__init__.py | 1 + .../FSPkgUsesNewishInitools/setup.cfg | 3 ++ .../packages/FSPkgUsesNewishInitools/setup.py | 25 +++++++++++++ tests/test_upgrade.py | 37 ++++++++++++++++++- 10 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 tests/packages/FSPkgUsesInitools/fspkg/__init__.py create mode 100644 tests/packages/FSPkgUsesInitools/setup.cfg create mode 100644 tests/packages/FSPkgUsesInitools/setup.py create mode 100644 tests/packages/FSPkgUsesNewishInitools/FSPkgUsesInitools/fspkg/__init__.py create mode 100644 tests/packages/FSPkgUsesNewishInitools/FSPkgUsesInitools/setup.cfg create mode 100644 tests/packages/FSPkgUsesNewishInitools/FSPkgUsesInitools/setup.py create mode 100644 tests/packages/FSPkgUsesNewishInitools/fspkg/__init__.py create mode 100644 tests/packages/FSPkgUsesNewishInitools/setup.cfg create mode 100644 tests/packages/FSPkgUsesNewishInitools/setup.py diff --git a/tests/packages/FSPkgUsesInitools/fspkg/__init__.py b/tests/packages/FSPkgUsesInitools/fspkg/__init__.py new file mode 100644 index 00000000000..792d6005489 --- /dev/null +++ b/tests/packages/FSPkgUsesInitools/fspkg/__init__.py @@ -0,0 +1 @@ +# diff --git a/tests/packages/FSPkgUsesInitools/setup.cfg b/tests/packages/FSPkgUsesInitools/setup.cfg new file mode 100644 index 00000000000..01bb954499e --- /dev/null +++ b/tests/packages/FSPkgUsesInitools/setup.cfg @@ -0,0 +1,3 @@ +[egg_info] +tag_build = dev +tag_svn_revision = true diff --git a/tests/packages/FSPkgUsesInitools/setup.py b/tests/packages/FSPkgUsesInitools/setup.py new file mode 100644 index 00000000000..59387ed007c --- /dev/null +++ b/tests/packages/FSPkgUsesInitools/setup.py @@ -0,0 +1,25 @@ +from setuptools import setup, find_packages + +version = '0.1' + +setup(name='FSPkgUsesInitools', + version=version, + description="File system test package", + long_description="""\ +File system test package""", + classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers + keywords='pip tests', + author='pip', + author_email='pip@openplans.org', + url='http://pip.openplans.org', + license='', + packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), + include_package_data=True, + zip_safe=False, + install_requires=[ + "INItools", + ], + entry_points=""" + # -*- Entry points: -*- + """, + ) diff --git a/tests/packages/FSPkgUsesNewishInitools/FSPkgUsesInitools/fspkg/__init__.py b/tests/packages/FSPkgUsesNewishInitools/FSPkgUsesInitools/fspkg/__init__.py new file mode 100644 index 00000000000..792d6005489 --- /dev/null +++ b/tests/packages/FSPkgUsesNewishInitools/FSPkgUsesInitools/fspkg/__init__.py @@ -0,0 +1 @@ +# diff --git a/tests/packages/FSPkgUsesNewishInitools/FSPkgUsesInitools/setup.cfg b/tests/packages/FSPkgUsesNewishInitools/FSPkgUsesInitools/setup.cfg new file mode 100644 index 00000000000..01bb954499e --- /dev/null +++ b/tests/packages/FSPkgUsesNewishInitools/FSPkgUsesInitools/setup.cfg @@ -0,0 +1,3 @@ +[egg_info] +tag_build = dev +tag_svn_revision = true diff --git a/tests/packages/FSPkgUsesNewishInitools/FSPkgUsesInitools/setup.py b/tests/packages/FSPkgUsesNewishInitools/FSPkgUsesInitools/setup.py new file mode 100644 index 00000000000..59387ed007c --- /dev/null +++ b/tests/packages/FSPkgUsesNewishInitools/FSPkgUsesInitools/setup.py @@ -0,0 +1,25 @@ +from setuptools import setup, find_packages + +version = '0.1' + +setup(name='FSPkgUsesInitools', + version=version, + description="File system test package", + long_description="""\ +File system test package""", + classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers + keywords='pip tests', + author='pip', + author_email='pip@openplans.org', + url='http://pip.openplans.org', + license='', + packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), + include_package_data=True, + zip_safe=False, + install_requires=[ + "INItools", + ], + entry_points=""" + # -*- Entry points: -*- + """, + ) diff --git a/tests/packages/FSPkgUsesNewishInitools/fspkg/__init__.py b/tests/packages/FSPkgUsesNewishInitools/fspkg/__init__.py new file mode 100644 index 00000000000..792d6005489 --- /dev/null +++ b/tests/packages/FSPkgUsesNewishInitools/fspkg/__init__.py @@ -0,0 +1 @@ +# diff --git a/tests/packages/FSPkgUsesNewishInitools/setup.cfg b/tests/packages/FSPkgUsesNewishInitools/setup.cfg new file mode 100644 index 00000000000..01bb954499e --- /dev/null +++ b/tests/packages/FSPkgUsesNewishInitools/setup.cfg @@ -0,0 +1,3 @@ +[egg_info] +tag_build = dev +tag_svn_revision = true diff --git a/tests/packages/FSPkgUsesNewishInitools/setup.py b/tests/packages/FSPkgUsesNewishInitools/setup.py new file mode 100644 index 00000000000..eea671ee792 --- /dev/null +++ b/tests/packages/FSPkgUsesNewishInitools/setup.py @@ -0,0 +1,25 @@ +from setuptools import setup, find_packages + +version = '0.1' + +setup(name='FSPkgUsesNewishInitools', + version=version, + description="File system test package", + long_description="""\ +File system test package""", + classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers + keywords='pip tests', + author='pip', + author_email='pip@openplans.org', + url='http://pip.openplans.org', + license='', + packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), + include_package_data=True, + zip_safe=False, + install_requires=[ + "INItools>=0.3", + ], + entry_points=""" + # -*- Entry points: -*- + """, + ) diff --git a/tests/test_upgrade.py b/tests/test_upgrade.py index 795e68f85aa..bc9fe2e2d70 100644 --- a/tests/test_upgrade.py +++ b/tests/test_upgrade.py @@ -1,5 +1,5 @@ import textwrap -from os.path import join +from os.path import abspath, join from nose.tools import nottest from tests.test_pip import (here, reset_env, run_pip, assert_all_changes, write_file, pyversion, _create_test_package, @@ -56,6 +56,41 @@ def test_upgrade_with_newest_already_installed(): assert 'already up-to-date' in result.stdout +def test_upgrade_without_unneeded_recursive_upgrades(): + env = reset_env() + run_pip('install', 'INITools==0.2') + + to_install = abspath(join(here, 'packages', 'FSPkgUsesInitools')) + result = run_pip('install', to_install) + + result = run_pip('install', '--upgrade', to_install) + + assert env.site_packages/ 'initools'/'__init__.py' not in result.files_updated, 'pip install --upgrade upgraded recursive dependency INITools when it should not have' + + +def test_upgrade_with_needed_recursive_upgrades(): + env = reset_env() + to_install = abspath(join(here, 'packages', 'FSPkgUsesNewishInitools')) + result = run_pip('install', to_install) + run_pip('install', 'INITools==0.2') + + result = run_pip('install', '--upgrade', to_install) + + assert env.site_packages/ 'initools'/'configparser.py' in result.files_created, 'pip install --upgrade failed to upgrade recursive dependency INITools when it should have' + + +def test_upgrade_with_unneeded_recursive_upgrades_explicitly_requested(): + env = reset_env() + run_pip('install', 'INITools==0.2') + + to_install = abspath(join(here, 'packages', 'FSPkgUsesInitools')) + result = run_pip('install', to_install) + + result = run_pip('install', '--upgrade-recursive', to_install) + + assert env.site_packages/ 'initools'/'__init__.py' in result.files_updated, 'pip install --upgrade failed to upgrade recursive dependency INITools when it was asked to' + + def test_upgrade_force_reinstall_newest(): """ Force reinstallation of a package even if it is already at its newest From e192a415bc75c18ed07bcd2894ac71b71c865c69 Mon Sep 17 00:00:00 2001 From: Ethan Jucovy Date: Mon, 2 Jul 2012 09:41:09 -0400 Subject: [PATCH 2/3] Add failing test to check whether all top-level dependencies in a requirements file are upgraded. Currently only the first will be upgraded. --- tests/test_upgrade.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/test_upgrade.py b/tests/test_upgrade.py index bc9fe2e2d70..21119d0cf5a 100644 --- a/tests/test_upgrade.py +++ b/tests/test_upgrade.py @@ -91,6 +91,30 @@ def test_upgrade_with_unneeded_recursive_upgrades_explicitly_requested(): assert env.site_packages/ 'initools'/'__init__.py' in result.files_updated, 'pip install --upgrade failed to upgrade recursive dependency INITools when it was asked to' +def test_upgrade_reqs_file_without_unneeded_recursive_upgrades(): + """ + When running non-recursive --upgrade against a requirements file, every package + explicitly listed in the requirements file should be upgraded; but any recursive + dependencies should not be upgraded. + """ + env = reset_env() + run_pip('install', 'INITools==0.2') + run_pip('install', 'PyLogo==0.1') + + to_install = abspath(join(here, 'packages', 'FSPkgUsesInitools')) + result = run_pip('install', to_install) + + write_file('test-req.txt', textwrap.dedent("""\ + %(FSPkgUsesInitools)s + PyLogo + """ % {'FSPkgUsesInitools': to_install})) + + result = run_pip('install', '--upgrade', '-r', env.scratch_path/ 'test-req.txt') + + assert env.site_packages/ 'initools'/'__init__.py' not in result.files_updated, 'pip install --upgrade upgraded recursive dependency INITools when it should not have' + assert env.site_packages/ 'pylogo'/'__init__.py' in result.files_updated, 'pip install --upgrade failed to upgrade explicit dependency PyLogo when it should have' + + def test_upgrade_force_reinstall_newest(): """ Force reinstallation of a package even if it is already at its newest @@ -247,3 +271,4 @@ def test_upgrade_vcs_req_with_dist_found(): run_pip("install", req) result = run_pip("install", "-U", req) assert not "pypi.python.org" in result.stdout, result.stdout + From 83972840a3dafe717738f3ffe89d67825141df06 Mon Sep 17 00:00:00 2001 From: Ethan Jucovy Date: Mon, 2 Jul 2012 10:04:42 -0400 Subject: [PATCH 3/3] explain the expected behavior of the new tests --- tests/test_upgrade.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/test_upgrade.py b/tests/test_upgrade.py index 21119d0cf5a..b7990549c38 100644 --- a/tests/test_upgrade.py +++ b/tests/test_upgrade.py @@ -57,6 +57,10 @@ def test_upgrade_with_newest_already_installed(): def test_upgrade_without_unneeded_recursive_upgrades(): + """ + When upgrading a single package, that package's own dependencies should not be + upgraded unnecessarily if the user doesn't explicitly ask for them to be upgraded. + """ env = reset_env() run_pip('install', 'INITools==0.2') @@ -69,6 +73,11 @@ def test_upgrade_without_unneeded_recursive_upgrades(): def test_upgrade_with_needed_recursive_upgrades(): + """ + When upgrading a single package A, that package's own dependencies should be + upgraded if the installed versions no longer satisfy A's requirements, even if + the user doesn't explicitly ask for them to be upgraded, + """ env = reset_env() to_install = abspath(join(here, 'packages', 'FSPkgUsesNewishInitools')) result = run_pip('install', to_install) @@ -80,6 +89,11 @@ def test_upgrade_with_needed_recursive_upgrades(): def test_upgrade_with_unneeded_recursive_upgrades_explicitly_requested(): + """ + When upgrading a single package A with --upgrade-recursive, all of A's + dependencies should be upgraded as well, even if the installed versions + already satisfy A's requirements. + """ env = reset_env() run_pip('install', 'INITools==0.2')