update rustfmt references to reflect change from submod to subtree (#1129)
* update rustfmt references to reflect change to subtree * clarify broken toolstate hypothetical scenario
This commit is contained in:
parent
da1c7b423c
commit
2d3cc2a192
|
|
@ -169,7 +169,8 @@ the issue in question.
|
||||||
As a developer to this repository, you don't have to treat the following external projects
|
As a developer to this repository, you don't have to treat the following external projects
|
||||||
differently from other crates that are directly in this repo:
|
differently from other crates that are directly in this repo:
|
||||||
|
|
||||||
* Clippy
|
* [Clippy](https://github.com/rust-lang/rust-clippy)
|
||||||
|
* [rustfmt](https://github.com/rust-lang/rustfmt)
|
||||||
|
|
||||||
They are just regular files and directories. This is in contrast to `submodule` dependencies
|
They are just regular files and directories. This is in contrast to `submodule` dependencies
|
||||||
(see below for those). Only tool authors will actually use any operations here.
|
(see below for those). Only tool authors will actually use any operations here.
|
||||||
|
|
@ -233,7 +234,6 @@ subtrees) actually needs to use `git subtree`.
|
||||||
Currently building Rust will also build the following external projects:
|
Currently building Rust will also build the following external projects:
|
||||||
|
|
||||||
* [miri](https://github.com/rust-lang/miri)
|
* [miri](https://github.com/rust-lang/miri)
|
||||||
* [rustfmt](https://github.com/rust-lang/rustfmt)
|
|
||||||
* [rls](https://github.com/rust-lang/rls/)
|
* [rls](https://github.com/rust-lang/rls/)
|
||||||
|
|
||||||
We allow breakage of these tools in the nightly channel. Maintainers of these
|
We allow breakage of these tools in the nightly channel. Maintainers of these
|
||||||
|
|
@ -261,7 +261,7 @@ before the PR is merged.
|
||||||
Rust's build system builds a number of tools that make use of the
|
Rust's build system builds a number of tools that make use of the
|
||||||
internals of the compiler. This includes
|
internals of the compiler. This includes
|
||||||
[RLS](https://github.com/rust-lang/rls) and
|
[RLS](https://github.com/rust-lang/rls) and
|
||||||
[rustfmt](https://github.com/rust-lang/rustfmt). If these tools
|
[miri](https://github.com/rust-lang/miri). If these tools
|
||||||
break because of your changes, you may run into a sort of "chicken and egg"
|
break because of your changes, you may run into a sort of "chicken and egg"
|
||||||
problem. These tools rely on the latest compiler to be built so you can't update
|
problem. These tools rely on the latest compiler to be built so you can't update
|
||||||
them to reflect your changes to the compiler until those changes are merged into
|
them to reflect your changes to the compiler until those changes are merged into
|
||||||
|
|
@ -269,8 +269,8 @@ the compiler. At the same time, you can't get your changes merged into the compi
|
||||||
because the rust-lang/rust build won't pass until those tools build and pass their
|
because the rust-lang/rust build won't pass until those tools build and pass their
|
||||||
tests.
|
tests.
|
||||||
|
|
||||||
That means that, in the default state, you can't update the compiler without first
|
That would mean that, in the default state, you couldn't update the compiler without first
|
||||||
fixing rustfmt, rls and the other tools that the compiler builds.
|
fixing miri, rls and the other tools that the compiler builds.
|
||||||
|
|
||||||
Luckily, a feature was [added to Rust's build](https://github.com/rust-lang/rust/issues/45861)
|
Luckily, a feature was [added to Rust's build](https://github.com/rust-lang/rust/issues/45861)
|
||||||
to make all of this easy to handle. The idea is that we allow these tools to be "broken",
|
to make all of this easy to handle. The idea is that we allow these tools to be "broken",
|
||||||
|
|
@ -280,7 +280,7 @@ and the tools are working again, you go back in the compiler and update the tool
|
||||||
so they can be distributed again.
|
so they can be distributed again.
|
||||||
|
|
||||||
This should avoid a bunch of synchronization dances and is also much easier on contributors as
|
This should avoid a bunch of synchronization dances and is also much easier on contributors as
|
||||||
there's no need to block on rls/rustfmt/other tools changes going upstream.
|
there's no need to block on rls/miri/other tools changes going upstream.
|
||||||
|
|
||||||
Here are those same steps in detail:
|
Here are those same steps in detail:
|
||||||
|
|
||||||
|
|
@ -290,8 +290,8 @@ Here are those same steps in detail:
|
||||||
from resetting to the original branch after you make your changes. If you
|
from resetting to the original branch after you make your changes. If you
|
||||||
need to [update any submodules to their latest versions](#updating-submodules),
|
need to [update any submodules to their latest versions](#updating-submodules),
|
||||||
see the section of this file about that for more information.
|
see the section of this file about that for more information.
|
||||||
2. (optional) Run `./x.py test src/tools/rustfmt` (substituting the submodule
|
2. (optional) Run `./x.py test src/tools/rls` (substituting the submodule
|
||||||
that broke for `rustfmt`). Fix any errors in the submodule (and possibly others).
|
that broke for `rls`). Fix any errors in the submodule (and possibly others).
|
||||||
3. (optional) Make commits for your changes and send them to upstream repositories as a PR.
|
3. (optional) Make commits for your changes and send them to upstream repositories as a PR.
|
||||||
4. (optional) Maintainers of these submodules will **not** merge the PR. The PR can't be
|
4. (optional) Maintainers of these submodules will **not** merge the PR. The PR can't be
|
||||||
merged because CI will be broken. You'll want to write a message on the PR referencing
|
merged because CI will be broken. You'll want to write a message on the PR referencing
|
||||||
|
|
@ -303,16 +303,16 @@ Here are those same steps in detail:
|
||||||
|
|
||||||
#### Updating submodules
|
#### Updating submodules
|
||||||
|
|
||||||
These instructions are specific to updating `rustfmt`, however they may apply
|
These instructions are specific to updating `rls`, however they may apply
|
||||||
to the other submodules as well. Please help by improving these instructions
|
to the other submodules as well. Please help by improving these instructions
|
||||||
if you find any discrepancies or special cases that need to be addressed.
|
if you find any discrepancies or special cases that need to be addressed.
|
||||||
|
|
||||||
To update the `rustfmt` submodule, start by running the appropriate
|
To update the `rls` submodule, start by running the appropriate
|
||||||
[`git submodule` command](https://git-scm.com/book/en/v2/Git-Tools-Submodules).
|
[`git submodule` command](https://git-scm.com/book/en/v2/Git-Tools-Submodules).
|
||||||
For example, to update to the latest commit on the remote master branch,
|
For example, to update to the latest commit on the remote master branch,
|
||||||
you may want to run:
|
you may want to run:
|
||||||
```
|
```
|
||||||
git submodule update --remote src/tools/rustfmt
|
git submodule update --remote src/tools/rls
|
||||||
```
|
```
|
||||||
If you run `./x.py build` now, and you are lucky, it may just work. If you see
|
If you run `./x.py build` now, and you are lucky, it may just work. If you see
|
||||||
an error message about patches that did not resolve to any crates, you will need
|
an error message about patches that did not resolve to any crates, you will need
|
||||||
|
|
@ -320,10 +320,10 @@ to complete a few more steps which are outlined with their rationale below.
|
||||||
|
|
||||||
*(This error may change in the future to include more information.)*
|
*(This error may change in the future to include more information.)*
|
||||||
```
|
```
|
||||||
error: failed to resolve patches for `https://github.com/rust-lang/rustfmt`
|
error: failed to resolve patches for `https://github.com/rust-lang/rls`
|
||||||
|
|
||||||
Caused by:
|
Caused by:
|
||||||
patch for `rustfmt-nightly` in `https://github.com/rust-lang/rustfmt` did not resolve to any crates
|
patch for `rls` in `https://github.com/rust-lang/rls` did not resolve to any crates
|
||||||
failed to run: ~/rust/build/x86_64-unknown-linux-gnu/stage0/bin/cargo build --manifest-path ~/rust/src/bootstrap/Cargo.toml
|
failed to run: ~/rust/build/x86_64-unknown-linux-gnu/stage0/bin/cargo build --manifest-path ~/rust/src/bootstrap/Cargo.toml
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -354,14 +354,14 @@ reveals what the problem is:
|
||||||
> crates.io, but it's important to keep this in mind!
|
> crates.io, but it's important to keep this in mind!
|
||||||
|
|
||||||
This says that when we updated the submodule, the version number in our
|
This says that when we updated the submodule, the version number in our
|
||||||
`src/tools/rustfmt/Cargo.toml` changed. The new version is different from
|
`src/tools/rls/Cargo.toml` changed. The new version is different from
|
||||||
the version in `Cargo.lock`, so the build can no longer continue.
|
the version in `Cargo.lock`, so the build can no longer continue.
|
||||||
|
|
||||||
To resolve this, we need to update `Cargo.lock`. Luckily, cargo provides a
|
To resolve this, we need to update `Cargo.lock`. Luckily, cargo provides a
|
||||||
command to do this easily.
|
command to do this easily.
|
||||||
|
|
||||||
```
|
```
|
||||||
$ cargo update -p rustfmt-nightly
|
$ cargo update -p rls
|
||||||
```
|
```
|
||||||
|
|
||||||
This should change the version listed in `Cargo.lock` to the new version you updated
|
This should change the version listed in `Cargo.lock` to the new version you updated
|
||||||
|
|
|
||||||
|
|
@ -139,7 +139,6 @@ Changes not staged for commit:
|
||||||
(use "git restore <file>..." to discard changes in working directory)
|
(use "git restore <file>..." to discard changes in working directory)
|
||||||
modified: src/tools/cargo (new commits)
|
modified: src/tools/cargo (new commits)
|
||||||
modified: src/tools/rls (new commits)
|
modified: src/tools/rls (new commits)
|
||||||
modified: src/tools/rustfmt (new commits)
|
|
||||||
|
|
||||||
no changes added to commit (use "git add" and/or "git commit -a")
|
no changes added to commit (use "git add" and/or "git commit -a")
|
||||||
```
|
```
|
||||||
|
|
@ -347,9 +346,9 @@ you might want to get used to the main concepts of Git before reading this secti
|
||||||
|
|
||||||
The `rust-lang/rust` repository uses [Git submodules] as a way to use other
|
The `rust-lang/rust` repository uses [Git submodules] as a way to use other
|
||||||
Rust projects from within the `rust` repo. Examples include Rust's fork of
|
Rust projects from within the `rust` repo. Examples include Rust's fork of
|
||||||
`llvm-project` and many devtools such as `cargo`, `rust-analyzer` and `rustfmt`.
|
`llvm-project` and many devtools such as `cargo`, `rust-analyzer` and `rls`.
|
||||||
|
|
||||||
Those projects are developped and maintained in an separate Git (and GitHub)
|
Those projects are developed and maintained in an separate Git (and GitHub)
|
||||||
repository, and they have their own Git history/commits, issue tracker and PRs.
|
repository, and they have their own Git history/commits, issue tracker and PRs.
|
||||||
Submodules allow us to create some sort of embedded sub-repository inside the
|
Submodules allow us to create some sort of embedded sub-repository inside the
|
||||||
`rust` repository and use them like they were directories in the `rust` repository.
|
`rust` repository and use them like they were directories in the `rust` repository.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue