17560 Commits

Author SHA1 Message Date
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.
a6230e348b786420e83cc8220e0d8f4c61084a12 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
Herman Skogseth
845d376ce0 Add integration test for building only the specified artifact library 2024-05-07 12:46:00 +02:00
Tor Hovland
4aac847678 Added test. 2024-05-07 10:59:07 +02:00
Tor Hovland
2607f6d30f Old syntax suggestion. 2024-05-07 10:58:55 +02:00