Commit graph

17563 commits

Author SHA1 Message Date
Urgau 5e9ac4b314 Remove now unnecessary local-only build.rs example for check-cfg 2024-05-16 20:36:25 +02:00
Urgau 980afaabd4 Move malformatted check-cfg config warning to error
since it's always backwards compatible to go from error to warn, but not
the inverse.
2024-05-16 18:44:45 +02:00
Urgau 3335a6da1e Dogfood tests for check-cfg config of the unexpected_cfgs lint
Those new tests tries to be as exhaustive as possible while being
reasonable in the number of them. To do so we try to check for
check/doc/test/build-script/features with a the `check-cfg` config.

Many of those tests are very similar to their non-config counterpart.
2024-05-16 17:03:42 +02:00
Urgau e6dca67a84 Add special check-cfg config for the unexpected_cfgs lint
This permits things like this to be recognized and passed to
rustc/rustdoc.

```rust
[lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ["cfg(foo)"] }
```
2024-05-16 17:03:42 +02:00
Urgau 1e4857a4d9 Allow lint config to have extra custom configs
And report the unused manifest key warning for every key that we do not
use, which is currently every of them.
2024-05-16 17:03:42 +02:00
bors 8d68ed4fb2 Auto merge of #13920 - weihanglo:git-safe-directory, r=ehuss
test: set safe.directory for git repo in apache container

### What does this PR try to resolve?

Failure in container tests due to a new version of `git` package in Alpine Linux Package repository.

See also <https://github.com/rust-lang/cargo/pull/13913#issuecomment-2113712049>

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

Alpine Linux Package repository 3.19 just bumped git package to 2.43.4 from 2.43.0.
The docker image `httpd:2.4-alpine` we use in container tests failed due to the git version bump.
The `httpd` log shown that

```
240.10.0.1 - - [16/May/2024:03:52:36 +0000] "GET /repos/bar.git/info/refs?service=git-upload-pack HTTP/1.1" 500 -
[16/May/2024:03:52:36 +0000] 240.10.0.1 TLSv1.3 TLS_AES_256_GCM_SHA384 "GET /repos/bar.git/info/refs?service=git-upload-pack HTTP/1.1" -
fatal: detected dubious ownership in repository at '/repos/bar.git'
To add an exception for this directory, call:

        git config --global --add safe.directory /repos/bar.git
```

git/git@f4aa8c8bb1 is likely the commit causing problems.

So I ended up adding `git config --system --add safe.directory '*'` to the Dockerfile of apache container.
Note that we need `--system` instead of `--global` because `httpd` are running under the other user www-data, not root.
2024-05-16 13:54:54 +00:00
Weihang Lo 2fd4b440bc
test: use git clone --bare instead of manual mv 2024-05-16 00:14:12 -04:00
Weihang Lo 699f6f454d
test: set safe.directory for git repo in apache container
See f4aa8c8bb1
2024-05-16 00:14:12 -04:00
bors fc13634f78 Auto merge of #13917 - weihanglo:resolve, r=epage
refactor: misc refactors for `ops::resolve`

### What does this PR try to resolve?

This is a preparation for another `-Zpatch-files` experiment,
so that the future PR can move things around easier without too many conflicts.

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

Generally they shouldn't affect anything existing behavior.
a6230e348b might be a bit dubious,
though I believe preloading workspace members is kinda idempotent
and registering patches/lockfile never cares about it.

### Additional information
2024-05-15 14:39:18 +00:00
Weihang Lo 327649b24f
refactor: make keep-previous-lockfile clousre a type alias 2024-05-15 09:02:26 -04:00
Weihang Lo 178bde773b
refactor: iterator instead of extra allocation for registering patches 2024-05-15 08:52:46 -04:00
bors 0ea330d5a4 Auto merge of #13898 - stevenengler:cargo-add-perms, r=weihanglo
Preserve file permissions on unix during `write_atomic`

### What does this PR try to resolve?

Fixes #13896.

> When you run `cargo add`, it changes the file permissions of `Cargo.toml` to 600 (user read+write only). This is a little bit painful when you're building the code as a different user than the user writing the code, for example if you're running the code in a container. This applies to `cargo remove` as well. I tested this behaviour on Cargo 1.78.0 and nightly.

I'm not entirely sure how permissions are handled on Windows, but the tempfile lib [doesn't seem to support them](https://docs.rs/tempfile/3.10.1/tempfile/struct.Builder.html#windows-and-others), so I haven't changed the behaviour on Windows.

Only the user/group/other read/write/execute permission bits are copied.

This PR sets the permissions ~twice~ once:
~1. When creating the file. This has the umask applied, but means that we don't create a file that is more permissive than the original.~
2. After the file has been created. This doesn't apply the umask, resulting in the file having the same u/g/o r/w/x permissions as the original file.

Since this PR changes a util function, it has a wider scope than just changing the behaviour of `cargo add` and `cargo remove`. `write_atomic` is called from the following functions:

- [`migrate_manifests`](4de0094ac7/src/cargo/ops/fix.rs (L340))
- [`update_manifest_with_new_member`](4de0094ac7/src/cargo/ops/cargo_new.rs (L1008))
- [`LocalManifest::write`](4de0094ac7/src/cargo/util/toml_mut/manifest.rs (L299))
- [`gc_workspace`](4de0094ac7/src/bin/cargo/commands/remove.rs (L274))

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

Unit test was added (`cargo test -p cargo-util write_atomic_permissions`).
2024-05-15 12:44:40 +00:00
Weihang Lo a6230e348b
refactor: start workspace preload earlier before patching
This is a preparation for patch re-resolving.
2024-05-15 01:09:07 -04:00
Weihang Lo f6d8f9ccf8
refactor: exact [replace] locking to a function 2024-05-15 00:59:49 -04:00
Weihang Lo ab95ab4cc1
refactor: remove unnecessary Workspace::preload
Already did that in
2f17770a15/src/cargo/ops/resolve.rs (L375-L378)

See also rust-lang/cargo@cda5f82498
2024-05-15 00:27:20 -04:00
Steven Engler 36a63b4039 fix: preserve file permissions on unix during write_atomic
Preseves u/g/o r/w/x permissions on unix platforms.
2024-05-14 22:50:28 -04:00
Steven Engler 038ccd29c0 test: write_atomic changes file permissions to 0o600 on unix 2024-05-14 22:48:34 -04:00
Weihang Lo ced58bfd67
fix: support IPv6-only network for cargo fix
To coordinate diagnositcs between different cargo-as-rustc-proxies,
`cargo fix` launches a diagnostc server on localhost.
However, the TCP server was hard-coded with an IPv4 address 127.0.0.1,
which didn't work with IPv6-only network.

This commit fixes the issue by attempting to bind both IPv6 and IPv6
localhost addessses.
2024-05-12 17:55:29 -04:00
bors 2f17770a15 Auto merge of #13901 - gmorenz:fix_bench, r=weihanglo
Update benchmark formatting for new nightly
2024-05-11 12:57:28 +00:00
Greg Morenz 4ea824b51e Update benchmark formatting for new nightly 2024-05-11 08:19:03 -04:00
bors 4de0094ac7 Auto merge of #13893 - justsmth:rust-script-doc-fix, r=weihanglo
Fix docs for unstable script feature

### What does this PR try to resolve?
* [Recent change](https://github.com/rust-lang/cargo/pull/13861) to accepted syntax in the script feature is not reflected in the documentation.

### How should we test and review this PR?
* Verify that this documentation is consistent with syntax expected.

### Additional information
N/A
2024-05-09 16:09:22 +00:00
bors baca68ef47 Auto merge of #13880 - Muscraft:refactor-cargo-lint-tests, r=weihanglo
Refactor cargo lint tests

In #13621, it was brought up that [the lints tests are nested more deeply than other UI tests](https://github.com/rust-lang/cargo/pull/13621#discussion_r1538065181). This got me wondering if there was a better way to structure all the lint tests.
What I came up with was:
- Lints should not have UI tests, only parts of the diagnostic system, i.e., how warnings, errors, notes, etc., look
  - This is because UI tests should focus on parts of the system that make up each lint's output
  - We can always add UI tests for each lint if desired
- All tests related to the linting system should live in `tests/testsuite/lints/`
- Tests related to `[lints.cargo]` should stay in `lints_table.rs` as it is for the whole lints table
- Each lint will get a file in `lints/` for all of its tests
  - This makes `lints/mod.rs` smaller and targeted only at tests for the linting system itself
  - It makes it much easier to know where to place a test
2024-05-09 15:39:41 +00:00
Justin Smith ad254b884d Fix docs for unstable script feature 2024-05-09 11:38:37 -04:00
bors 7297f0f06f Auto merge of #13890 - weihanglo:rustfix, r=ehuss
test(rustfix): run some tests only on nightly
2024-05-09 14:16:19 +00:00
Weihang Lo a47766149f
test(rustfix): bless multiple-solutions.nightly.rs 2024-05-09 09:30:25 -04:00
Weihang Lo 26bcf58bfe
test(rustfix): run some tests only on nightly 2024-05-09 09:30:25 -04:00
Scott Schafer b79fd591ce
test: Add UI tests showing parts of diagnostic system 2024-05-08 22:42:35 -06:00
bors 1fec089991 Auto merge of #13874 - torhovland:old-syntax-suggestion, r=weihanglo
Old syntax suggestion

Fixes #13868.

The build error in the issue will now include a suggestion:

```
   Compiling zerocopy v0.8.0-alpha.9
error: the `cargo::` syntax for build script output instructions was added in Rust 1.77.0, but the minimum supported Rust version of `zerocopy v0.8.0-alpha.9` is 1.56.0.
Consider using the old `cargo:` syntax in front of `rustc-check-cfg=`.
See https://doc.rust-lang.org/cargo/reference/build-scripts.html#outputs-of-the-build-script for more information about build script outputs.
```

The suggestion is only included for reserved prefixes.

A test has been added.
2024-05-08 21:27:30 +00:00
Scott Schafer 6f81cff16c
refactor: Move lint specific tests to lints/mod.rs 2024-05-08 15:18:49 -06:00
Tor Hovland 3ea3638c1b Adjusted the suggestion text. 2024-05-08 23:04:59 +02:00
Tor Hovland ff0453b21f Added another test. 2024-05-08 23:04:59 +02:00
Tor Hovland 4b498267c8 Added a similar suggestion when using cargo::metadata=. 2024-05-08 23:04:59 +02:00
bors 91a6b8faa3 Auto merge of #13887 - weihanglo:message, r=Muscraft
docs: clarify dash replacement rule in target name
2024-05-08 19:12:16 +00:00
Weihang Lo 4b3123ef4f
docs(cargo-target): clarify dashs in bin target name wont be replaced 2024-05-08 13:00:59 -04:00
Weihang Lo 03354288e3
docs(json): mention dashes replaced with underscores 2024-05-08 13:00:59 -04:00
Scott Schafer c1f0c0b8d8
refactor: Move off UI tests for individual lints 2024-05-08 10:58:39 -06:00
bors 6914ead3bf Auto merge of #13884 - Urgau:check-cfg-local-build-scripts, r=epage
Add local-only build scripts example in check-cfg docs

This PR adds an example about creating/having "local-only" build scripts in the check-cfg docs.

r? `@weihanglo`
cc `@epage`
2024-05-08 13:40:59 +00:00
Urgau 3c809b291a Add local-only build scripts example in check-cfg docs 2024-05-08 15:09:34 +02:00
bors de88d8e1d6 Auto merge of #13882 - weihanglo:changelog, r=epage
docs(changelog): also mention `--message-format=json`
2024-05-08 04:43:44 +00:00
Weihang Lo b907805a6f
docs(changelog): reorder entries for 1.79 2024-05-08 00:16:54 -04:00
Weihang Lo b6244bf2aa
docs(changelog): also mention --message-format=json 2024-05-08 00:16:54 -04:00
bors 0ca60e9408 Auto merge of #13881 - Muscraft:lints-unstable-docs, r=weihanglo
chore: Add cargo-lints to unstable docs

When originally implementing a linting system for `cargo`, I missed adding it to the unstable docs. This PR adds (basic) documentation for `[lints.cargo]`/`-Zcargo-lints` to the unstable docs.
2024-05-08 01:54:25 +00:00
Scott Schafer b34551457e
chore: Add cargo-lints to unstable docs 2024-05-07 19:06:37 -06:00
bors e6603b7243 Auto merge of #13879 - weihanglo:test, r=Muscraft
test: clean up unnecessary uses of `match_exact`

It was found during the review of <https://github.com/rust-lang/cargo/pull/13842#discussion_r1591789376>

We should be happy using `assert_match_exact` directly.
The extra arguments to `match_exact` are not necessary for those test cases.
2024-05-07 21:46:55 +00:00
bors 451d384655 Auto merge of #13878 - kpreid:patch-2, r=weihanglo
docs(ref): Correct heading level of `[lints]` documentation

It was two levels too deep. (Compare with the following `[badges]` section header.)
2024-05-07 19:04:07 +00:00
Kevin Reid ccf160721b
Correct heading level of [lints] documentation
It was two levels too deep. (Compare with the following `[badges]` section header.)
2024-05-07 11:45:21 -07:00
Weihang Lo 88ac4aaf2e
test: switch to assert_match_exact
There is no need to provide additional messages here.
2024-05-07 14:24:43 -04:00
Weihang Lo 950aa4e983
test: remove duplicate assertion functions 2024-05-07 14:24:43 -04:00
bors 4e59631d94 Auto merge of #13842 - skogseth:build-only-specified-artifact-library, r=weihanglo
Fix: Build only the specified artifact library when multiple types are available

### What does this PR try to resolve?
Fixes #12109.

#### TL;DR:
A crate `bar` exposes it's library as both a `staticlib` and a `cdylib`. A second crate `foo` specifies an artifact dependency of type `staticlib` on `bar`, meaning cargo should build `bar` as a `staticlib` and expose certain environment variables (e.g. `CARGO_STATICLIB_FILE_BAR`). However, due to a bug, cargo ends up building (and exposing the associated environment variables) for both the `staticlib` and `cdylib`.

The same happens if `foo` specifies an artifact dependency of type `cdylib`; both artifact types are built.

### How should we test and review this PR?
The first commit introduces a test which reproduces the issue, the second commit introduces the fix. This setup was recommended by `@ehuss.`

### Additional information
Artifact dependencies: https://rust-lang.github.io/rfcs/3028-cargo-binary-dependencies.html

#### TL;DR
If a crate `foo` requests an artifact dependency of kind <artifact_kind> from a crate `bar` then the following happens:

- `bar` is built with crate-type <artifact_kind> and a directory is created at `target/<profile>/deps/artifact/bar-<build_hash_or_something>/<artifact_kind>`. The binary artifact is placed in this directory.
- Cargo exposes certain environment variables, the most important for this PR is `CARGO_<artifact_kind>_FILE_BAR`, which points to the binary artifact that was specified. This environment variable is available at compile time for normal dependencies and at runtime for build-dependencies.

If multiple artifact-kinds are requested cargo will create a unit for each, and so they will all be built separately.
2024-05-07 12:56:31 +00:00
Herman Skogseth 9a5cfbcbb9 Only build the specified artifact library when multiple types are available 2024-05-07 13:20:30 +02:00