The current code assumes that when running prepare with --bin, that we can remove all members and just add one member that is equal to whatever we passed in --bin.
The problem with that is that if your packages aren't in the exact same root directory, then this will result in a recipe file that breaks once you try calling cook on it.
To fix this, this PR instead sets the sole member to the path of the package, which (I think) can be found using in cargo_metadata::Metadata, grabbing the manifest path, and setting it to be relative to the workspace root + removing Cargo.toml from the path. I chose to do it this way rather than just matching + grabbing whatever's in the members array as I don't think that would work due to wildcards being valid.
This also adds a test emulating various package locations in a workspace and seeing if the path is correctly set. This previously failed, but now passes with these changes. All other previously-existing tests seem to pass, so I don't believe this should break things. That said, if people were using the workaround mentioned in #232, then I believe this will be a breaking change, so that'll probably have to be communicated.
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.
Issue #, if available:
Closes: #232
Description of changes:
The current code assumes that when running
prepare
with--bin
, that we can remove all members and just add one member that is equal to whatever we passed in--bin
.The problem with that is that if your packages aren't in the exact same root directory, then this will result in a recipe file that breaks once you try calling
cook
on it.To fix this, this PR instead sets the sole member to the path of the package, which (I think) can be found using in
cargo_metadata::Metadata
, grabbing the manifest path, and setting it to be relative to the workspace root + removingCargo.toml
from the path. I chose to do it this way rather than just matching + grabbing whatever's in themembers
array as I don't think that would work due to wildcards being valid.This also adds a test emulating various package locations in a workspace and seeing if the path is correctly set. This previously failed, but now passes with these changes. All other previously-existing tests seem to pass, so I don't believe this should break things. That said, if people were using the workaround mentioned in #232, then I believe this will be a breaking change, so that'll probably have to be communicated.
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.