Add support for reinstall to editable packages (#674)

Closes https://github.com/astral-sh/puffin/issues/673.
This commit is contained in:
Charlie Marsh 2023-12-17 10:41:57 -05:00 committed by GitHub
parent 00e1c33af4
commit 77c6e6fa6c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 64 additions and 18 deletions

View file

@ -308,8 +308,8 @@ async fn install(
extraneous: _,
} = InstallPlan::from_requirements(
&resolution.requirements(),
reinstall,
editables,
reinstall,
&index_urls,
cache,
venv,

View file

@ -62,7 +62,7 @@ pub(crate) async fn pip_sync(
pub(crate) async fn sync_requirements(
requirements: &[Requirement],
reinstall: &Reinstall,
editables: &[EditableRequirement],
editable_requirements: &[EditableRequirement],
link_mode: LinkMode,
index_urls: IndexUrls,
no_build: bool,
@ -92,8 +92,8 @@ pub(crate) async fn sync_requirements(
extraneous,
} = InstallPlan::from_requirements(
requirements,
editable_requirements,
reinstall,
editables,
&index_urls,
cache,
&venv,
@ -108,13 +108,14 @@ pub(crate) async fn sync_requirements(
&& extraneous.is_empty()
&& editables.is_empty()
{
let s = if requirements.len() == 1 { "" } else { "s" };
let num_requirements = requirements.len() + editable_requirements.len();
let s = if num_requirements == 1 { "" } else { "s" };
writeln!(
printer,
"{}",
format!(
"Audited {} in {}",
format!("{} package{}", requirements.len(), s).bold(),
format!("{num_requirements} package{s}").bold(),
elapsed(start.elapsed())
)
.dimmed()

View file

@ -6,7 +6,6 @@ use std::process::Command;
use anyhow::{Context, Result};
use assert_cmd::prelude::*;
use assert_fs::prelude::*;
use assert_fs::TempDir;
use indoc::indoc;
use insta_cmd::_macro_support::insta;
use insta_cmd::{assert_cmd_snapshot, get_cargo_bin};
@ -2092,8 +2091,8 @@ fn reinstall_package() -> Result<()> {
#[test]
fn install_editable() -> Result<()> {
let temp_dir = TempDir::new()?;
let cache_dir = TempDir::new()?;
let temp_dir = assert_fs::TempDir::new()?;
let cache_dir = assert_fs::TempDir::new()?;
let venv = create_venv_py312(&temp_dir, &cache_dir);
let requirements_txt = temp_dir.child("requirements.txt");
@ -2106,6 +2105,7 @@ fn install_editable() -> Result<()> {
"
})?;
// Install the editable packages.
let filter_path = requirements_txt.display().to_string();
let filters = INSTA_FILTERS
.iter()
@ -2113,7 +2113,7 @@ fn install_editable() -> Result<()> {
.copied()
.collect::<Vec<_>>();
insta::with_settings!({
filters => filters
filters => filters.clone()
}, {
assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME))
.arg("pip-sync")
@ -2138,7 +2138,33 @@ fn install_editable() -> Result<()> {
"###);
});
// Make sure we have the right base case
// Reinstall the editable packages.
insta::with_settings!({
filters => filters.clone()
}, {
assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME))
.arg("pip-sync")
.arg(requirements_txt.path())
.arg("--reinstall-package")
.arg("poetry-editable")
.arg("--cache-dir")
.arg(cache_dir.path())
.env("VIRTUAL_ENV", venv.as_os_str())
.env("CARGO_TARGET_DIR", "../../../target/target_install_editable"), @r###"
success: true
exit_code: 0
----- stdout -----
----- stderr -----
Built 1 editable in [TIME]
Uninstalled 1 package in [TIME]
Installed 1 package in [TIME]
- poetry-editable==0.1.0
+ poetry-editable @ ../../scripts/editable-installs/poetry_editable
"###);
});
// Make sure we have the right base case.
let python_source_file =
"../../scripts/editable-installs/maturin_editable/python/maturin_editable/__init__.py";
let python_version_1 = indoc! {r"
@ -2155,7 +2181,7 @@ fn install_editable() -> Result<()> {
"#};
check_command(&venv, command, &temp_dir);
// Edit the sources
// Edit the sources.
let python_version_2 = indoc! {r"
from .maturin_editable import *
version = 2
@ -2171,7 +2197,7 @@ fn install_editable() -> Result<()> {
"#};
check_command(&venv, command, &temp_dir);
// Don't create a git diff
// Don't create a git diff.
fs_err::write(python_source_file, python_version_1)?;
let filters = INSTA_FILTERS
@ -2194,7 +2220,7 @@ fn install_editable() -> Result<()> {
----- stdout -----
----- stderr -----
Audited 2 packages in [TIME]
Audited 4 packages in [TIME]
"###);
});