diff --git a/src/module_writer.rs b/src/module_writer.rs index 309d0890b..8e372a4bb 100644 --- a/src/module_writer.rs +++ b/src/module_writer.rs @@ -1286,8 +1286,17 @@ pub fn write_python_part( } for package in python_packages { - for absolute in WalkBuilder::new(package).hidden(false).build() { + for absolute in WalkBuilder::new(&project_layout.project_root) + .hidden(false) + .parents(false) + .git_global(false) + .git_exclude(false) + .build() + { let absolute = absolute?.into_path(); + if !absolute.starts_with(package.as_path()) { + continue; + } let relative = absolute.strip_prefix(python_dir).unwrap(); if absolute.is_dir() { writer.add_directory(relative)?; diff --git a/src/project_layout.rs b/src/project_layout.rs index 1714530ba..fe53fd5f8 100644 --- a/src/project_layout.rs +++ b/src/project_layout.rs @@ -14,6 +14,8 @@ const PYPROJECT_TOML: &str = "pyproject.toml"; /// Whether this project is pure rust or rust mixed with python and whether it has wheel data #[derive(Clone, Debug, PartialEq, Eq)] pub struct ProjectLayout { + /// Contains the absolute path to the project root directory + pub project_root: PathBuf, /// Contains the absolute path to the python source directory pub python_dir: PathBuf, /// Contains the canonicalized (i.e. absolute) path to the python part of the project @@ -397,6 +399,7 @@ impl ProjectLayout { eprintln!("🍹 Building a mixed python/rust project"); Ok(ProjectLayout { + project_root: project_root.to_path_buf(), python_dir: python_root, python_packages, python_module: Some(python_module), @@ -415,6 +418,7 @@ impl ProjectLayout { } Ok(ProjectLayout { + project_root: project_root.to_path_buf(), python_dir: python_root, python_packages, python_module: None, diff --git a/test-crates/pyo3-mixed-implicit/.gitignore b/test-crates/pyo3-mixed-implicit/.gitignore new file mode 100644 index 000000000..18880a5ac --- /dev/null +++ b/test-crates/pyo3-mixed-implicit/.gitignore @@ -0,0 +1 @@ +*.py[cdo] diff --git a/test-crates/pyo3-mixed-include-exclude/.gitignore b/test-crates/pyo3-mixed-include-exclude/.gitignore new file mode 100644 index 000000000..18880a5ac --- /dev/null +++ b/test-crates/pyo3-mixed-include-exclude/.gitignore @@ -0,0 +1 @@ +*.py[cdo] diff --git a/test-crates/pyo3-mixed-py-subdir/.gitignore b/test-crates/pyo3-mixed-py-subdir/.gitignore new file mode 100644 index 000000000..18880a5ac --- /dev/null +++ b/test-crates/pyo3-mixed-py-subdir/.gitignore @@ -0,0 +1 @@ +*.py[cdo] diff --git a/test-crates/pyo3-mixed-src/.gitignore b/test-crates/pyo3-mixed-src/.gitignore new file mode 100644 index 000000000..18880a5ac --- /dev/null +++ b/test-crates/pyo3-mixed-src/.gitignore @@ -0,0 +1 @@ +*.py[cdo] diff --git a/test-crates/pyo3-mixed/.gitignore b/test-crates/pyo3-mixed/.gitignore new file mode 100644 index 000000000..18880a5ac --- /dev/null +++ b/test-crates/pyo3-mixed/.gitignore @@ -0,0 +1 @@ +*.py[cdo] diff --git a/tests/run.rs b/tests/run.rs index d5383563c..7455faabb 100644 --- a/tests/run.rs +++ b/tests/run.rs @@ -730,6 +730,7 @@ fn pyo3_mixed_include_exclude_sdist() { SdistGenerator::Cargo, expect![[r#" { + "pyo3_mixed_include_exclude-2.1.3/.gitignore", "pyo3_mixed_include_exclude-2.1.3/Cargo.lock", "pyo3_mixed_include_exclude-2.1.3/Cargo.toml", "pyo3_mixed_include_exclude-2.1.3/PKG-INFO", @@ -759,6 +760,7 @@ fn pyo3_mixed_include_exclude_git_sdist_generator() { SdistGenerator::Git, expect![[r#" { + "pyo3_mixed_include_exclude-2.1.3/.gitignore", "pyo3_mixed_include_exclude-2.1.3/Cargo.lock", "pyo3_mixed_include_exclude-2.1.3/Cargo.toml", "pyo3_mixed_include_exclude-2.1.3/PKG-INFO",