Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign upFix spurious rebuilds of the script crate #7936
Conversation
The script crate currently has a build script, and Cargo will consider all files in the script crate as inputs to the build script as it otherwise doesn't know [what the input files are][cargo-1162]. This means that if any file in the source tree of the script crate changes (or is created) then Cargo will think it needs to re-run the build script and rebuild the crate. [cargo-1162]: rust-lang/cargo#1162 The build script of the script crate is invoking python, and consequently Python is generating some bytecode files in the source tree. On the second build of Servo, Cargo will see these new files, think that something has changed, and will re-run the build script of the script crate. This change passes the `-B` flag to python to avoid generating these bytecode files, which should avoid tampering with the source tree and appease Cargo by ensuring that it doesn't get rebuilt. --- As a helpful tip to if this comes up again, this was discovered by using the changes in rust-lang/cargo@c447e9d plus the change in rust-lang/cargo#2044. Once `RUST_LOG` was set to `cargo::ops::cargo_rustc::fingerprint=info`, the second run of `./mach build` printed out: ``` precalculated components have changed: 1444364448.000000000s (/build/servo/components/script/dom/bindings/codegen/parser/WebIDL.pyc) != 1444364235.000000000s (/build/servo/components/script/document_loader.rs) ``` Which should help easily diagnose these kinds of problems in the future!
highfive
commented
Oct 9, 2015
|
Thanks for the pull request, and welcome! The Servo team is excited to review your changes, and you should hear from @SimonSapin (or someone else) soon. |
|
|
|
@bors-servo r+ |
|
|
Fix spurious rebuilds of the script crate The script crate currently has a build script, and Cargo will consider all files in the script crate as inputs to the build script as it otherwise doesn't know [what the input files are][cargo-1162]. This means that if any file in the source tree of the script crate changes (or is created) then Cargo will think it needs to re-run the build script and rebuild the crate. [cargo-1162]: rust-lang/cargo#1162 The build script of the script crate is invoking python, and consequently Python is generating some bytecode files in the source tree. On the second build of Servo, Cargo will see these new files, think that something has changed, and will re-run the build script of the script crate. This change passes the `-B` flag to python to avoid generating these bytecode files, which should avoid tampering with the source tree and appease Cargo by ensuring that it doesn't get rebuilt. --- As a helpful tip to if this comes up again, this was discovered by using the changes in rust-lang/cargo@c447e9d plus the change in rust-lang/cargo#2044. Once `RUST_LOG` was set to `cargo::ops::cargo_rustc::fingerprint=info`, the second run of `./mach build` printed out: ``` precalculated components have changed: 1444364448.000000000s (/build/servo/components/script/dom/bindings/codegen/parser/WebIDL.pyc) != 1444364235.000000000s (/build/servo/components/script/document_loader.rs) ``` Which should help easily diagnose these kinds of problems in the future! <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7936) <!-- Reviewable:end -->
|
|
|
@bors-servo: r+ |
|
|
|
Was this a regression? I seem to recall that we were using -B before. In any case, nice find Alex! |
|
|
@bors-servo: retry |
|
Oh and I should also mention that this should still happen by default due to this gitignore rule but there's a bug in cargo which means that Cargo isn't picking this up. |
Fix spurious rebuilds of the script crate The script crate currently has a build script, and Cargo will consider all files in the script crate as inputs to the build script as it otherwise doesn't know [what the input files are][cargo-1162]. This means that if any file in the source tree of the script crate changes (or is created) then Cargo will think it needs to re-run the build script and rebuild the crate. [cargo-1162]: rust-lang/cargo#1162 The build script of the script crate is invoking python, and consequently Python is generating some bytecode files in the source tree. On the second build of Servo, Cargo will see these new files, think that something has changed, and will re-run the build script of the script crate. This change passes the `-B` flag to python to avoid generating these bytecode files, which should avoid tampering with the source tree and appease Cargo by ensuring that it doesn't get rebuilt. --- As a helpful tip to if this comes up again, this was discovered by using the changes in rust-lang/cargo@c447e9d plus the change in rust-lang/cargo#2044. Once `RUST_LOG` was set to `cargo::ops::cargo_rustc::fingerprint=info`, the second run of `./mach build` printed out: ``` precalculated components have changed: 1444364448.000000000s (/build/servo/components/script/dom/bindings/codegen/parser/WebIDL.pyc) != 1444364235.000000000s (/build/servo/components/script/document_loader.rs) ``` Which should help easily diagnose these kinds of problems in the future! <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7936) <!-- Reviewable:end -->
|
|
|
@bors-servo retry |
Fix spurious rebuilds of the script crate The script crate currently has a build script, and Cargo will consider all files in the script crate as inputs to the build script as it otherwise doesn't know [what the input files are][cargo-1162]. This means that if any file in the source tree of the script crate changes (or is created) then Cargo will think it needs to re-run the build script and rebuild the crate. [cargo-1162]: rust-lang/cargo#1162 The build script of the script crate is invoking python, and consequently Python is generating some bytecode files in the source tree. On the second build of Servo, Cargo will see these new files, think that something has changed, and will re-run the build script of the script crate. This change passes the `-B` flag to python to avoid generating these bytecode files, which should avoid tampering with the source tree and appease Cargo by ensuring that it doesn't get rebuilt. --- As a helpful tip to if this comes up again, this was discovered by using the changes in rust-lang/cargo@c447e9d plus the change in rust-lang/cargo#2044. Once `RUST_LOG` was set to `cargo::ops::cargo_rustc::fingerprint=info`, the second run of `./mach build` printed out: ``` precalculated components have changed: 1444364448.000000000s (/build/servo/components/script/dom/bindings/codegen/parser/WebIDL.pyc) != 1444364235.000000000s (/build/servo/components/script/document_loader.rs) ``` Which should help easily diagnose these kinds of problems in the future! <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7936) <!-- Reviewable:end -->
|
|

alexcrichton commentedOct 9, 2015
The script crate currently has a build script, and Cargo will consider all files
in the script crate as inputs to the build script as it otherwise doesn't know
what the input files are. This means that if any file in the
source tree of the script crate changes (or is created) then Cargo will think it
needs to re-run the build script and rebuild the crate.
The build script of the script crate is invoking python, and consequently Python
is generating some bytecode files in the source tree. On the second build of
Servo, Cargo will see these new files, think that something has changed, and
will re-run the build script of the script crate.
This change passes the
-Bflag to python to avoid generating these bytecodefiles, which should avoid tampering with the source tree and appease Cargo by
ensuring that it doesn't get rebuilt.
As a helpful tip to if this comes up again, this was discovered by using the
changes in rust-lang/cargo@c447e9d plus the change in rust-lang/cargo#2044. Once
RUST_LOGwas set tocargo::ops::cargo_rustc::fingerprint=info, the secondrun of
./mach buildprinted out:Which should help easily diagnose these kinds of problems in the future!