@@ -939,6 +939,56 @@ def test_upgrade_packages_version_option_and_upgrade_no_existing_file(pip_conf,
939939 assert "small-fake-b==0.1" in out .stderr
940940
941941
942+ def test_upgrade_package_with_extra (runner , make_package , make_sdist , tmpdir ):
943+ """
944+ piptools ignores extras on --upgrade-package/-P items if already constrained.
945+ """
946+ test_package_1 = make_package (
947+ "test_package_1" , version = "0.1" , extras_require = {"more" : "test_package_2" }
948+ )
949+ test_package_2 = make_package (
950+ "test_package_2" ,
951+ version = "0.1" ,
952+ )
953+ dists_dir = tmpdir / "dists"
954+ for pkg in (test_package_1 , test_package_2 ):
955+ make_sdist (pkg , dists_dir )
956+
957+ # Constrain our requirement with an extra
958+ with open ("requirements.in" , "w" ) as req_in :
959+ req_in .write ("test-package-1[more]" )
960+
961+ # Run update on test-package-1[more] -- this should be equivalent
962+ # to running an update on test-package-1
963+ out = runner .invoke (
964+ cli ,
965+ [
966+ "--output-file" ,
967+ "-" ,
968+ "--quiet" ,
969+ "--find-links" ,
970+ str (dists_dir ),
971+ "--no-annotate" ,
972+ "--no-header" ,
973+ "--no-emit-options" ,
974+ "--no-build-isolation" ,
975+ "--upgrade-package" ,
976+ "test-package-1[more]" ,
977+ ],
978+ )
979+
980+ assert out .exit_code == 0 , out
981+ assert (
982+ dedent (
983+ """\
984+ test-package-1[more]==0.1
985+ test-package-2==0.1
986+ """
987+ )
988+ == out .stdout
989+ )
990+
991+
942992def test_quiet_option (pip_conf , runner ):
943993 with open ("requirements.in" , "w" ) as req_in :
944994 req_in .write ("small-fake-a" )
0 commit comments