Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(embedded): Don't create an intermediate manifest #12268

Merged
merged 6 commits into from
Jun 17, 2023

Conversation

epage
Copy link
Contributor

@epage epage commented Jun 14, 2023

What does this PR try to resolve?

More immediately, this is to unblock rust-lang/rust#112601

More generally, this gets us away from hackily writing out an out-of-line manifest from an embedded manifest. To parse the manifest, we have to write it out so our regular manifest
loading code could handle it. This updates the manifest parsing code to
handle it.

This doesn't mean this will work everywhere in all cases though. For
example, ephemeral workspaces parses a manifest from the SourceId and
these won't have valid SourceIds.

As a consequence, Cargo.lock and CARGO_TARGET_DIR are changing from being next to
the temp manifest to being next to the script. This still isn't the
desired behavior but stepping stones.

How should we test and review this PR?

A Commit at a time

Additional information

In production code, this does not conflict with #12255 (due to #12262) but in test code, it does.

@rustbot
Copy link
Collaborator

rustbot commented Jun 14, 2023

r? @ehuss

(rustbot has picked a reviewer for you, use r? to override)

@rustbot rustbot added A-cli Area: Command-line interface, option parsing, etc. A-manifest Area: Cargo.toml issues A-workspaces Area: workspaces Command-package Command-run S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 14, 2023
Copy link
Member

@weihanglo weihanglo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CI is failing. Need a fix?

src/cargo/util/toml/mod.rs Outdated Show resolved Hide resolved
tests/testsuite/script.rs Show resolved Hide resolved
bors added a commit that referenced this pull request Jun 14, 2023
fix(embedded): Don't append hash to bin names

### What does this PR try to resolve?

More immediately, this is to unblock rust-lang/rust#112601

The hash existed for sharing a target directory.  That code isn't
implemented yet and a per-user build cache might remove the need for it,
so let's remove it for now and more carefully weigh adding it back in.

In general, this is also the more appropriate way for a feature that would be first class.

### How should we test and review this PR?

This originally built on #12268 but now stands alone as the other PR has windows issues to work out

### Additional information
@rustbot rustbot added the A-infrastructure Area: infrastructure around the cargo repo, ci, releases, etc. label Jun 14, 2023
@epage epage force-pushed the direct branch 5 times, most recently from e1348cf to eab5985 Compare June 15, 2023 17:08
@epage epage marked this pull request as draft June 16, 2023 00:14
@bors
Copy link
Contributor

bors commented Jun 17, 2023

☔ The latest upstream changes (presumably #12255) made this pull request unmergeable. Please resolve the merge conflicts.

To parse the manifest, we have to write it out so our regular manifest
loading code could handle it.  This updates the manifest parsing code to
handle it.

This doesn't mean this will work everywhere in all cases though.  For
example, ephemeral workspaces parses a manifest from the SourceId and
these won't have valid SourceIds.

As a consequence, `Cargo.lock` and `CARGO_TARGET_DIR` are changing from being next to
the temp manifest to being next to the script.  This still isn't the
desired behavior but stepping stones.

This also exposes the fact that we didn't disable `autobins` like the
documentation says we should.
This mirrors the logic `ArgMatchesExt::root_manifest`
@epage epage marked this pull request as ready for review June 17, 2023 02:12
@epage
Copy link
Contributor Author

epage commented Jun 17, 2023

@weihanglo figured out the windows issue (wasn't making paths absolute correctly) so this is now ready

Copy link
Member

@weihanglo weihanglo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cargo_util::paths::normalize_path did the trick, right? Thanks for the update!

@weihanglo
Copy link
Member

@bors r+

@bors
Copy link
Contributor

bors commented Jun 17, 2023

📌 Commit 224d2e6 has been approved by weihanglo

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 17, 2023
@bors
Copy link
Contributor

bors commented Jun 17, 2023

⌛ Testing commit 224d2e6 with merge 0d5370a...

@bors
Copy link
Contributor

bors commented Jun 17, 2023

☀️ Test successful - checks-actions
Approved by: weihanglo
Pushing 0d5370a to master...

@bors bors merged commit 0d5370a into rust-lang:master Jun 17, 2023
@epage
Copy link
Contributor Author

epage commented Jun 17, 2023

cargo_util::paths::normalize_path did the trick, right? Thanks for the update!

That combined with manually joining with the CWD

@epage epage deleted the direct branch June 17, 2023 11:36
epage added a commit to epage/cargo that referenced this pull request Jun 17, 2023
This was broken in rust-lang#12268 when we stopped using an intermediate
`Cargo.toml` file.

Unlike pre-rust-lang#12268,
- We are hashing the path, rather than the content, with the assumption
  that people change content more frequently than the path
- We are using a simpler hash than `blake3` in the hopes that we can get
  away with it

Unlike the Pre-RFC demo
- We are not forcing a single target dir for all scripts in the hopes
  that we get rust-lang#5931
epage added a commit to epage/cargo that referenced this pull request Jun 17, 2023
With rust-lang#12268, we moved the manifest root to be the scripts parent
directory, making it so auto-discovery might pick some things up.

We previously ensured `auto*` don't pick things up but missed `build.rs`
This is now addressed.
bors added a commit that referenced this pull request Jun 17, 2023
fix(embedded): Don't auto-discover build.rs files

With #12268, we moved the manifest root to be the scripts parent
directory, making it so auto-discovery might pick some things up.

We previously ensured `auto*` don't pick things up but missed `build.rs`
This is now addressed.
epage added a commit to epage/cargo that referenced this pull request Jun 17, 2023
With rust-lang#12268, we moved the manifest root to be the scripts parent
directory, making it so auto-discovery might pick some things up.

We previously ensured `auto*` don't pick things up but missed `build.rs`
This is now addressed.
bors added a commit that referenced this pull request Jun 17, 2023
fix(embeded): Don't pollute the scripts dir with `target/`

### What does this PR try to resolve?

This PR is part of #12207.

This specific behavior was broken in #12268 when we stopped using an intermediate
`Cargo.toml` file.

Unlike pre-#12268,
- We are hashing the path, rather than the content, with the assumption
  that people change content more frequently than the path
- We are using a simpler hash than `blake3` in the hopes that we can get
  away with it

Unlike the Pre-RFC demo
- We are not forcing a single target dir for all scripts in the hopes
  that we get #5931

### How should we test and review this PR?

A new test was added specifically to show the target dir behavior, rather than overloading an existing test or making all tests sensitive to changes in this behavior.

### Additional information

In the future, we might want to resolve symlinks before we get to this point
bors added a commit that referenced this pull request Jun 17, 2023
fix(embedded): Don't auto-discover build.rs files

With #12268, we moved the manifest root to be the scripts parent
directory, making it so auto-discovery might pick some things up.

We previously ensured `auto*` don't pick things up but missed `build.rs`
This is now addressed.
epage added a commit to epage/cargo that referenced this pull request Jun 17, 2023
This puts the lockfile back into a target directory in the users home,
like before rust-lang#12268.

Another idea that came up was to move the workspace root to be in the
target directory (which would effectively be like pre-rust-lang#12268) but I
think that is a bit hacky / misleading.

This does mean that the lockfile is buried away from the user and they
can't pass it along with their script.  In most cases I've dealt with,
this would be fine.  When the lockfile is needed, they will also most
likely have a workspace, so it shoud have a local lockfile in that case.
The inbetween case is something that needs further evaluation for
whether we should handle it and how.
epage added a commit to epage/cargo that referenced this pull request Jun 19, 2023
This puts the lockfile back into a target directory in the users home,
like before rust-lang#12268.

Another idea that came up was to move the workspace root to be in the
target directory (which would effectively be like pre-rust-lang#12268) but I
think that is a bit hacky / misleading.

This does mean that the lockfile is buried away from the user and they
can't pass it along with their script.  In most cases I've dealt with,
this would be fine.  When the lockfile is needed, they will also most
likely have a workspace, so it shoud have a local lockfile in that case.
The inbetween case is something that needs further evaluation for
whether we should handle it and how.
bors added a commit that referenced this pull request Jun 19, 2023
fix(embedded): Don't pollute script dir with lockfile

### What does this PR try to resolve?
This puts the lockfile back into a target directory in the users home,
like before #12268.

Another idea that came up was to move the workspace root to be in the
target directory (which would effectively be like pre-#12268) but I
think that is a bit hacky / misleading.

This does mean that the lockfile is buried away from the user and they
can't pass it along with their script.  In most cases I've dealt with,
this would be fine.  When the lockfile is needed, they will also most
likely have a workspace, so it shoud have a local lockfile in that case.
The inbetween case is something that needs further evaluation for
whether we should handle it and how.

### How should we test and review this PR?

Its a bit difficult to test for the lockfile in the new location, so this is mostly being tested in that the lockfile no longer exists next to the script.
bors added a commit to rust-lang-ci/rust that referenced this pull request Jun 20, 2023
Update cargo

12 commits in 0c14026aa84ee2ec4c67460c0a18abc8519ca6b2..dead4b8740c4b6a8ed5211e37c99cf81d01c3b1c
2023-06-14 18:43:05 +0000 to 2023-06-20 20:07:17 +0000
- Convert valid feature name warning to an error. (rust-lang/cargo#12291)
- fix(embedded): Don't pollute script dir with lockfile (rust-lang/cargo#12284)
- fix: remove `-Zjobserver-per-rustc` again (rust-lang/cargo#12285)
- docs: some tweaks around `cargo test` (rust-lang/cargo#12288)
- Enable `doctest-in-workspace` by default (rust-lang/cargo#12221)
- fix(embedded): Don't auto-discover build.rs files (rust-lang/cargo#12283)
- fix(embeded): Don't pollute the scripts dir with `target/` (rust-lang/cargo#12282)
- feat: prepare for the next lockfile bump (rust-lang/cargo#12279)
- fix(embedded): Don't create an intermediate manifest (rust-lang/cargo#12268)
- refactor(embedded): Switch to `syn` for parsing doc comments (rust-lang/cargo#12258)
- fix(embedded): Align package name sanitization with cargo-new (rust-lang/cargo#12255)
- Clarify the default behavior of cargo-install. (rust-lang/cargo#12276)

r? `@ghost`
@ehuss ehuss added this to the 1.72.0 milestone Jun 22, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-cli Area: Command-line interface, option parsing, etc. A-infrastructure Area: infrastructure around the cargo repo, ci, releases, etc. A-manifest Area: Cargo.toml issues A-workspaces Area: workspaces Command-package Command-run S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants