@@ -189,6 +189,35 @@ Clippy in the `rust-lang/rust` repository.
189189For general information about ` subtree ` s in the Rust repository see [ Rust's
190190` CONTRIBUTING.md ` ] [ subtree ] .
191191
192+ ### Patching git-subtree to work with big repos
193+
194+ Currently there's a bug in ` git-subtree ` that prevents it from working properly
195+ with the [ ` rust-lang/rust ` ] repo. There's an open PR to fix that, but it's stale.
196+ Before continuing with the following steps, we need to manually apply that fix to
197+ our local copy of ` git-subtree ` .
198+
199+ You can get the patched version of ` git-subtree ` from [ here] [ gitgitgadget-pr ] .
200+ Put this file under ` /usr/lib/git-core ` (taking a backup of the previous file)
201+ and make sure it has the proper permissions:
202+
203+ ``` bash
204+ sudo cp --backup /path/to/patched/git-subtree.sh /usr/lib/git-core/git-subtree
205+ sudo chmod --reference=/usr/lib/git-core/git-subtree~ /usr/lib/git-core/git-subtree
206+ sudo chown --reference=/usr/lib/git-core/git-subtree~ /usr/lib/git-core/git-subtree
207+ ```
208+
209+ _ Note:_ The first time running ` git subtree push ` a cache has to be built. This
210+ involves going through the complete Clippy history once. For this you have to
211+ increase the stack limit though, which you can do with ` ulimit -s 60000 ` .
212+ Make sure to run the ` ulimit ` command from the same session you call git subtree.
213+
214+ _ Note:_ If you are a Debian user, ` dash ` is the shell used by default for scripts instead of ` sh ` .
215+ This shell has a hardcoded recursion limit set to 1000. In order to make this process work,
216+ you need to force the script to run ` bash ` instead. You can do this by editing the first
217+ line of the ` git-subtree ` script and changing ` sh ` to ` bash ` .
218+
219+ ### Performing the sync
220+
192221Here is a TL;DR version of the sync process (all of the following commands have
193222to be run inside the ` rust ` directory):
194223
@@ -198,6 +227,7 @@ to be run inside the `rust` directory):
198227 # Make sure to change `your-github-name` to your github name in the following command
199228 git subtree push -P src/tools/clippy git@github.com:your-github-name/rust-clippy sync-from-rust
200229 ```
230+
201231 _Note:_ This will directly push to the remote repository. You can also push
202232 to your local copy by replacing the remote address with ` /path/to/rust-clippy`
203233 directory.
@@ -213,14 +243,30 @@ to be run inside the `rust` directory):
2132433. Open a PR to ` rust-lang/rust-clippy` and wait for it to get merged (to
214244 accelerate the process ping the ` @rust-lang/clippy` team in your PR and/or
215245 ~ ~annoy~~ ask them in the [Discord] channel.)
216- 4. Sync the ` rust-lang/rust-clippy` master to the rust-copy of Clippy:
246+
247+ # ## Syncing back changes in Clippy to [`rust-lang/rust`]
248+
249+ To avoid flooding the [` rust-lang/rust` ] PR queue, changes in Clippy' s repo are synced back
250+ in a bi-weekly basis if there' s no urgent changes. This is done starting on the day of
251+ the Rust stable release and then every other week. That way we guarantee that
252+ every feature in Clippy is available for 2 weeks in nightly, before it can get to beta.
253+ For reference, the first sync following this cadence was performed the 2020-08-27.
254+
255+ All of the following commands have to be run inside the ` rust` directory.
256+
257+ 1. Make sure Clippy itself is up-to-date by following the steps outlined in the previous
258+ section if necessary.
259+
260+ 2. Sync the ` rust-lang/rust-clippy` master to the rust-copy of Clippy:
217261 ` ` ` bash
218262 git checkout -b sync-from-clippy
219263 git subtree pull -P src/tools/clippy https://github.com/rust-lang/rust-clippy master
220264 ` ` `
221- 5. Open a PR to [` rust-lang/rust` ]
265+ 3. Open a PR to [` rust-lang/rust` ]
266+
267+ # ## Defining remotes
222268
223- Also, you may want to define remotes, so you don' t have to type out the remote
269+ You may want to define remotes, so you don' t have to type out the remote
224270addresses on every sync. You can do this with the following commands (these
225271commands still have to be run inside the `rust` directory):
226272
@@ -241,12 +287,6 @@ You can then sync with the remote names from above, e.g.:
241287$ git subtree push -P src/tools/clippy clippy-local sync-from-rust
242288```
243289
244- _Note:_ The first time running `git subtree push` a cache has to be built. This
245- involves going through the complete Clippy history once. For this you have to
246- increase the stack limit though, which you can do with `ulimit -s 60000`. For
247- this to work, you will need the fix of `git subtree` available
248- [here][gitgitgadget-pr].
249-
250290[gitgitgadget-pr]: https://github.com/gitgitgadget/git/pull/493
251291[subtree]: https://rustc-dev-guide.rust-lang.org/contributing.html#external-dependencies-subtree
252292[`rust-lang/rust`]: https://github.com/rust-lang/rust
0 commit comments