Problem
As of now, Cargo supports glob syntax for workspace.member to include crates as workspace members. However, for workspace.exclude it is implemented by a plain starts_with comparing with manifest path of certain crates. This confuses people as they need to figure out which rules overrides the other. It is also inconsistent with package.include and package.exclude, as they choose gitignore syntax.
For workspace.member, it proactively checks the existence of Cargo.toml to include a member, and throws an errors if Cargo.toml doesn't exist, which makes globbing **/* often invalid.
Similar issues have been raised from time to time:
Proposed Solution
There are several possible ways to "fix" the situation (to some extent).
There might be other possible solution I am not aware of here.
Notes
I would keep this as the main issue and close some. If this is inappropriate, please say it out load, and we can reopen the original issues.
Problem
As of now, Cargo supports glob syntax for
workspace.memberto include crates as workspace members. However, forworkspace.excludeit is implemented by a plainstarts_withcomparing with manifest path of certain crates. This confuses people as they need to figure out which rules overrides the other. It is also inconsistent withpackage.includeandpackage.exclude, as they choose gitignore syntax.For
workspace.member, it proactively checks the existence ofCargo.tomlto include a member, and throws an errors ifCargo.tomldoesn't exist, which makes globbing**/*often invalid.Similar issues have been raised from time to time:
excludedoesn't work if nested under amemberpath #6745memberunder[workspace], Glob pattern doesn’t work for paths whose parent isexcluded #11362Proposed Solution
There are several possible ways to "fix" the situation (to some extent).
workspace.exclude. Add globbing toworkspace.excludelist #11374 tries to do that. This is a relatively low effort approach but might confuse people still, and it won't fix Workspaceexcludedoesn't work if nested under amemberpath #6745.memberunder[workspace], Glob pattern doesn’t work for paths whose parent isexcluded #11362 (comment), we talked about using a singleworkspace.memberand dropworkspace.exclude. However, the re-include is not possible due to the limit of gitignore itself1.starts_withand instead check the existence ofCargo.tomlto exclude a package.There might be other possible solution I am not aware of here.
Notes
I would keep this as the main issue and close some. If this is inappropriate, please say it out load, and we can reopen the original issues.
Footnotes
An optional prefix "!" which negates the pattern; any matching file excluded by a previous pattern will become included again. It is not possible to re-include a file if a parent directory of that file is excluded.
See https://git-scm.com/docs/gitignore#_pattern_format ↩