Skip to content

feat(cargo-vendor): vendor path dep if it is not in any given workspaces#55

Closed
weihanglo wants to merge 1 commit intomasterfrom
vendor-path-deps
Closed

feat(cargo-vendor): vendor path dep if it is not in any given workspaces#55
weihanglo wants to merge 1 commit intomasterfrom
vendor-path-deps

Conversation

@weihanglo
Copy link
Copy Markdown
Owner

What does this PR try to resolve?

feat(cargo-vendor): vendor path dep if it is not in any given workspaces

Generally cargo don't vendor path dependencies.
This seems quiet reasonable path dependencies are "local" comparing
to git or registry dependencies, and usually under the user's control.
However, it is not always the case.

A workspace might contain

  • any [patch] to local path dependencies
  • a set of shared path dependencies outside the current workspace

These use cases demonstrate that users might not have controls or
permissions to those dependencies. When they want to create a
reproducible tarball for their own workspace, cargo vendor is not a
tool helping them achieve the goal.

There is one workaround: Have a [patch] to a local git repository
instead of a lcoal path dependency. This is not ergonomic and adds
overhead of setting git repositories.

This PR proposes that Cargo vendors path dependencies if they are
not belong to any given workspaces.

As a side effect, this exposes a new [source] kind path:

[source."path+file:///path/to/package"]
path = "/path/to/package"
replace-with = "vendored-sources"

How should we test and review this PR?

This is a proof-of-concept, not ready for serious code review.

Additional information

An alternative to rust-lang#12858
Fixes rust-lang#9172
Possibly also rust-lang#10134, but I am not sure if they intend to vendor workspace members.

Generally cargo don't vendor path dependencies.
This seems quiet reasonable path dependencies are "local" comparing
to git or registry dependencies, and usually under the user's control.
However, it is not always the case.

A workspace might contain

* any `[patch]` to local path dependencies
* a set of shared path dependencies outside the current workspace

These use cases demonstrate that users might not have controls or
permissions to those dependencies. When they want to create a
reproducible tarball for their own workspace, `cargo vendor` is not a
tool helping them achieve the goal.

There is one workaround: Have a `[patch]` to a local git repository
instead of a lcoal path dependency. This is not ergonomic and adds
overhead of setting git repositories.

This PR proposes that Cargo vendors path dependencies if they are
not belong to any given workspaces.

As a side effect, this exposes a new  `[source]` kind `path`:

```toml
[source."path+file:///path/to/package"]
path = "/path/to/package"
replace-with = "vendored-sources"
```
@weihanglo weihanglo closed this Apr 28, 2024
@weihanglo weihanglo deleted the vendor-path-deps branch July 18, 2024 21:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cargo vendor with patch section and local sources does not vendor the local files

1 participant