From e5fd2f41702aeafda5a7ae240e4a69dc14b6959f Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Wed, 20 Nov 2024 19:38:54 -0500 Subject: [PATCH] Remove dev dependencies in --all-groups --no-dev --- crates/uv-configuration/src/dev.rs | 31 +++++++++-- crates/uv/tests/it/sync.rs | 84 ++++++++++++++++++++++++++---- 2 files changed, 99 insertions(+), 16 deletions(-) diff --git a/crates/uv-configuration/src/dev.rs b/crates/uv-configuration/src/dev.rs index 0991eb64b578..a8980c060b1f 100644 --- a/crates/uv-configuration/src/dev.rs +++ b/crates/uv-configuration/src/dev.rs @@ -267,11 +267,32 @@ impl DevGroupsSpecification { /// Returns `true` if the group is included in the specification. pub fn contains(&self, group: &GroupName) -> bool { - self.dev.as_ref().map_or(false, |dev| dev.contains(group)) - || self - .groups - .as_ref() - .map_or(false, |groups| groups.contains(group)) + if group == &*DEV_DEPENDENCIES { + match self.dev.as_ref() { + None => {} + Some(DevMode::Exclude) => { + // If `--no-dev` was provided, always exclude dev. + return false; + } + Some(DevMode::Only) => { + // If `--only-dev` was provided, always include dev. + return true; + } + Some(DevMode::Include) => { + // If `--no-group dev` was provided, exclude dev. + return match self.groups.as_ref() { + Some(GroupsSpecification::Include { exclude, .. }) => { + !exclude.contains(group) + } + _ => true, + }; + } + } + } + + self.groups + .as_ref() + .map_or(false, |groups| groups.contains(group)) } } diff --git a/crates/uv/tests/it/sync.rs b/crates/uv/tests/it/sync.rs index f022f8eb1351..770042d9fb08 100644 --- a/crates/uv/tests/it/sync.rs +++ b/crates/uv/tests/it/sync.rs @@ -1212,7 +1212,10 @@ fn sync_group() -> Result<()> { requires-python = ">=3.12" dependencies = ["typing-extensions"] + [tool.uv] + [dependency-groups] + dev = ["iniconfig"] foo = ["anyio"] bar = ["requests"] "#, @@ -1226,9 +1229,10 @@ fn sync_group() -> Result<()> { ----- stdout ----- ----- stderr ----- - Resolved 9 packages in [TIME] - Prepared 1 package in [TIME] - Installed 1 package in [TIME] + Resolved 10 packages in [TIME] + Prepared 2 packages in [TIME] + Installed 2 packages in [TIME] + + iniconfig==2.0.0 + typing-extensions==4.10.0 "###); @@ -1238,7 +1242,7 @@ fn sync_group() -> Result<()> { ----- stdout ----- ----- stderr ----- - Resolved 9 packages in [TIME] + Resolved 10 packages in [TIME] Prepared 3 packages in [TIME] Installed 3 packages in [TIME] + anyio==4.3.0 @@ -1252,13 +1256,14 @@ fn sync_group() -> Result<()> { ----- stdout ----- ----- stderr ----- - Resolved 9 packages in [TIME] + Resolved 10 packages in [TIME] Prepared 4 packages in [TIME] - Uninstalled 3 packages in [TIME] + Uninstalled 4 packages in [TIME] Installed 4 packages in [TIME] - anyio==4.3.0 + certifi==2024.2.2 + charset-normalizer==3.3.2 + - iniconfig==2.0.0 + requests==2.31.0 - sniffio==1.3.1 - typing-extensions==4.10.0 @@ -1271,9 +1276,10 @@ fn sync_group() -> Result<()> { ----- stdout ----- ----- stderr ----- - Resolved 9 packages in [TIME] - Installed 3 packages in [TIME] + Resolved 10 packages in [TIME] + Installed 4 packages in [TIME] + anyio==4.3.0 + + iniconfig==2.0.0 + sniffio==1.3.1 + typing-extensions==4.10.0 "###); @@ -1284,8 +1290,8 @@ fn sync_group() -> Result<()> { ----- stdout ----- ----- stderr ----- - Resolved 9 packages in [TIME] - Audited 8 packages in [TIME] + Resolved 10 packages in [TIME] + Audited 9 packages in [TIME] "###); uv_snapshot!(context.filters(), context.sync().arg("--all-groups").arg("--no-group").arg("bar"), @r###" @@ -1294,7 +1300,7 @@ fn sync_group() -> Result<()> { ----- stdout ----- ----- stderr ----- - Resolved 9 packages in [TIME] + Resolved 10 packages in [TIME] Uninstalled 4 packages in [TIME] - certifi==2024.2.2 - charset-normalizer==3.3.2 @@ -1302,6 +1308,62 @@ fn sync_group() -> Result<()> { - urllib3==2.2.1 "###); + uv_snapshot!(context.filters(), context.sync().arg("--all-groups").arg("--no-dev"), @r###" + success: true + exit_code: 0 + ----- stdout ----- + + ----- stderr ----- + Resolved 10 packages in [TIME] + Uninstalled 1 package in [TIME] + Installed 4 packages in [TIME] + + certifi==2024.2.2 + + charset-normalizer==3.3.2 + - iniconfig==2.0.0 + + requests==2.31.0 + + urllib3==2.2.1 + "###); + + uv_snapshot!(context.filters(), context.sync().arg("--dev"), @r###" + success: true + exit_code: 0 + ----- stdout ----- + + ----- stderr ----- + Resolved 10 packages in [TIME] + Uninstalled 7 packages in [TIME] + Installed 1 package in [TIME] + - anyio==4.3.0 + - certifi==2024.2.2 + - charset-normalizer==3.3.2 + - idna==3.6 + + iniconfig==2.0.0 + - requests==2.31.0 + - sniffio==1.3.1 + - urllib3==2.2.1 + "###); + + uv_snapshot!(context.filters(), context.sync().arg("--dev").arg("--no-group").arg("dev"), @r###" + success: true + exit_code: 0 + ----- stdout ----- + + ----- stderr ----- + Resolved 10 packages in [TIME] + Uninstalled 1 package in [TIME] + - iniconfig==2.0.0 + "###); + + uv_snapshot!(context.filters(), context.sync().arg("--group").arg("dev").arg("--no-dev"), @r###" + success: true + exit_code: 0 + ----- stdout ----- + + ----- stderr ----- + Resolved 10 packages in [TIME] + Audited 1 package in [TIME] + "###); + Ok(()) }