mirror of
https://github.com/pesde-pkg/pesde.git
synced 2024-12-12 11:00:36 +00:00
fix: support old includes behaviour
This commit is contained in:
parent
97cc58afcf
commit
a9243b0214
2 changed files with 75 additions and 8 deletions
|
@ -6,7 +6,7 @@ use colored::Colorize;
|
||||||
use fs_err::tokio as fs;
|
use fs_err::tokio as fs;
|
||||||
use pesde::{
|
use pesde::{
|
||||||
manifest::{target::Target, DependencyType},
|
manifest::{target::Target, DependencyType},
|
||||||
matching_globs,
|
matching_globs_old_behaviour,
|
||||||
scripts::ScriptName,
|
scripts::ScriptName,
|
||||||
source::{
|
source::{
|
||||||
pesde::{specifier::PesdeDependencySpecifier, PesdePackageSource},
|
pesde::{specifier::PesdeDependencySpecifier, PesdePackageSource},
|
||||||
|
@ -119,7 +119,7 @@ impl PublishCommand {
|
||||||
_ => None,
|
_ => None,
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut paths = matching_globs(
|
let mut paths = matching_globs_old_behaviour(
|
||||||
project.package_dir(),
|
project.package_dir(),
|
||||||
manifest.includes.iter().map(|s| s.as_str()),
|
manifest.includes.iter().map(|s| s.as_str()),
|
||||||
true,
|
true,
|
||||||
|
@ -288,12 +288,7 @@ info: otherwise, the file was deemed unnecessary, if you don't understand why, p
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if path.is_dir() {
|
if path.is_file() {
|
||||||
archive.append_dir(file_name, &path).await.context(format!(
|
|
||||||
"failed to include directory `{}`",
|
|
||||||
relative_path.display()
|
|
||||||
))?;
|
|
||||||
} else {
|
|
||||||
archive
|
archive
|
||||||
.append_file(
|
.append_file(
|
||||||
&relative_path,
|
&relative_path,
|
||||||
|
|
72
src/lib.rs
72
src/lib.rs
|
@ -215,6 +215,78 @@ impl Project {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Gets all matching paths in a directory
|
||||||
|
pub async fn matching_globs_old_behaviour<'a, P: AsRef<Path>, I: IntoIterator<Item = &'a str>>(
|
||||||
|
dir: P,
|
||||||
|
globs: I,
|
||||||
|
relative: bool,
|
||||||
|
) -> Result<HashSet<PathBuf>, errors::MatchingGlobsError> {
|
||||||
|
let (negative_globs, positive_globs) = globs
|
||||||
|
.into_iter()
|
||||||
|
.partition::<Vec<_>, _>(|glob| glob.starts_with('!'));
|
||||||
|
|
||||||
|
let negative_globs = wax::any(
|
||||||
|
negative_globs
|
||||||
|
.into_iter()
|
||||||
|
.map(|glob| wax::Glob::new(&glob[1..]))
|
||||||
|
.collect::<Result<Vec<_>, _>>()?,
|
||||||
|
)?;
|
||||||
|
|
||||||
|
let (positive_globs, file_names) = positive_globs
|
||||||
|
.into_iter()
|
||||||
|
// only globs we can be sure of (maintaining compatibility with old "only file/dir name" system)
|
||||||
|
.partition::<Vec<_>, _>(|glob| glob.contains('/'));
|
||||||
|
let file_names = file_names.into_iter().collect::<HashSet<_>>();
|
||||||
|
|
||||||
|
let positive_globs = wax::any(
|
||||||
|
positive_globs
|
||||||
|
.into_iter()
|
||||||
|
.map(wax::Glob::new)
|
||||||
|
.collect::<Result<Vec<_>, _>>()?,
|
||||||
|
)?;
|
||||||
|
|
||||||
|
let mut read_dirs = vec![(fs::read_dir(dir.as_ref().to_path_buf()).await?, false)];
|
||||||
|
let mut paths = HashSet::new();
|
||||||
|
|
||||||
|
let mut is_root = true;
|
||||||
|
|
||||||
|
while let Some((mut read_dir, is_entire_dir_included)) = read_dirs.pop() {
|
||||||
|
while let Some(entry) = read_dir.next_entry().await? {
|
||||||
|
let path = entry.path();
|
||||||
|
let relative_path = path.strip_prefix(dir.as_ref()).unwrap();
|
||||||
|
let file_name = path.file_name().unwrap();
|
||||||
|
let mut is_filename_match = false;
|
||||||
|
|
||||||
|
if entry.file_type().await?.is_dir() {
|
||||||
|
is_filename_match =
|
||||||
|
is_root && file_name.to_str().is_some_and(|s| file_names.contains(s));
|
||||||
|
read_dirs.push((
|
||||||
|
fs::read_dir(&path).await?,
|
||||||
|
is_entire_dir_included || is_filename_match,
|
||||||
|
));
|
||||||
|
if is_filename_match {
|
||||||
|
log::warn!("directory name usage found for {}. this is deprecated and will be removed in the future", path.display());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_entire_dir_included || is_filename_match)
|
||||||
|
|| (positive_globs.is_match(relative_path)
|
||||||
|
&& !negative_globs.is_match(relative_path))
|
||||||
|
{
|
||||||
|
paths.insert(if relative {
|
||||||
|
relative_path.to_path_buf()
|
||||||
|
} else {
|
||||||
|
path.to_path_buf()
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
is_root = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(paths)
|
||||||
|
}
|
||||||
|
|
||||||
/// Gets all matching paths in a directory
|
/// Gets all matching paths in a directory
|
||||||
pub async fn matching_globs<'a, P: AsRef<Path>, I: IntoIterator<Item = &'a str>>(
|
pub async fn matching_globs<'a, P: AsRef<Path>, I: IntoIterator<Item = &'a str>>(
|
||||||
dir: P,
|
dir: P,
|
||||||
|
|
Loading…
Reference in a new issue