Skip to content

Commit 91c14c6

Browse files
committed
Avoid retraversing filesystem when testing exact glob matches
1 parent 9368268 commit 91c14c6

File tree

1 file changed

+10
-22
lines changed

1 file changed

+10
-22
lines changed

crates/uv-workspace/src/workspace.rs

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1312,17 +1312,11 @@ fn is_excluded_from_workspace(
13121312
let absolute_glob = PathBuf::from(glob::Pattern::escape(
13131313
workspace_root.simplified().to_string_lossy().as_ref(),
13141314
))
1315-
.join(exclude_glob.as_str())
1316-
.to_string_lossy()
1317-
.to_string();
1318-
for excluded_root in glob(&absolute_glob)
1319-
.map_err(|err| WorkspaceError::Pattern(absolute_glob.to_string(), err))?
1320-
{
1321-
let excluded_root = excluded_root
1322-
.map_err(|err| WorkspaceError::Glob(absolute_glob.to_string(), err))?;
1323-
if excluded_root == project_path.simplified() {
1324-
return Ok(true);
1325-
}
1315+
.join(exclude_glob.as_str());
1316+
let absolute_glob = absolute_glob.to_string_lossy();
1317+
let exclude_pattern = glob::Pattern::new(&absolute_glob).map_err(|err| WorkspaceError::Pattern(absolute_glob.to_string(), err))?;
1318+
if exclude_pattern.matches_path(project_path) {
1319+
return Ok(true);
13261320
}
13271321
}
13281322
Ok(false)
@@ -1338,17 +1332,11 @@ fn is_included_in_workspace(
13381332
let absolute_glob = PathBuf::from(glob::Pattern::escape(
13391333
workspace_root.simplified().to_string_lossy().as_ref(),
13401334
))
1341-
.join(member_glob.as_str())
1342-
.to_string_lossy()
1343-
.to_string();
1344-
for member_root in glob(&absolute_glob)
1345-
.map_err(|err| WorkspaceError::Pattern(absolute_glob.to_string(), err))?
1346-
{
1347-
let member_root =
1348-
member_root.map_err(|err| WorkspaceError::Glob(absolute_glob.to_string(), err))?;
1349-
if member_root == project_path {
1350-
return Ok(true);
1351-
}
1335+
.join(member_glob.as_str());
1336+
let absolute_glob = absolute_glob.to_string_lossy();
1337+
let include_pattern = glob::Pattern::new(&absolute_glob).map_err(|err| WorkspaceError::Pattern(absolute_glob.to_string(), err))?;
1338+
if include_pattern.matches_path(project_path) {
1339+
return Ok(true);
13521340
}
13531341
}
13541342
Ok(false)

0 commit comments

Comments
 (0)