-
Notifications
You must be signed in to change notification settings - Fork 13.4k
make Step
doc-comments more clear
#130965
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -72,36 +72,40 @@ impl<'a> Deref for Builder<'a> { | |
} | ||
|
||
pub trait Step: 'static + Clone + Debug + PartialEq + Eq + Hash { | ||
/// `PathBuf` when directories are created or to return a `Compiler` once | ||
/// it's been assembled. | ||
/// Result type of `Step::run`. | ||
type Output: Clone; | ||
|
||
/// Whether this step is run by default as part of its respective phase. | ||
/// `true` here can still be overwritten by `should_run` calling `default_condition`. | ||
/// Whether this step is run by default as part of its respective phase, as defined by the `describe` | ||
/// macro in [`Builder::get_step_descriptions`]. | ||
/// | ||
/// Note: Even if set to `true`, it can still be overridden with [`ShouldRun::default_condition`] | ||
/// by `Step::should_run`. | ||
const DEFAULT: bool = false; | ||
|
||
/// If true, then this rule should be skipped if --target was specified, but --host was not | ||
const ONLY_HOSTS: bool = false; | ||
|
||
/// Primary function to execute this rule. Can call `builder.ensure()` | ||
/// with other steps to run those. | ||
/// Primary function to implement `Step` logic. | ||
/// | ||
/// This function can be triggered in two ways: | ||
/// 1. Directly from [`Builder::execute_cli`]. | ||
/// 2. Indirectly by being called from other `Step`s using [`Builder::ensure`]. | ||
/// | ||
/// This gets called twice during a normal `./x.py` execution: first | ||
/// with `dry_run() == true`, and then for real. | ||
/// When called with [`Builder::execute_cli`] (as done by `Build::build`), this function executed twice: | ||
/// - First in "dry-run" mode to validate certain things (like cyclic Step invocations, | ||
/// directory creation, etc) super quickly. | ||
/// - Then it's called again to run the actual, very expensive process. | ||
Comment on lines
+95
to
+97
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Remark: I almost wonder if this wants to be split into |
||
/// | ||
/// When triggered indirectly from other `Step`s, it may still run twice (as dry-run and real mode) | ||
/// depending on the `Step::run` implementation of the caller. | ||
fn run(self, builder: &Builder<'_>) -> Self::Output; | ||
|
||
/// When bootstrap is passed a set of paths, this controls whether this rule | ||
/// will execute. However, it does not get called in a "default" context | ||
/// when we are not passed any paths; in that case, `make_run` is called | ||
/// directly. | ||
/// Determines if this `Step` should be run when given specific paths (e.g., `x build $path`). | ||
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_>; | ||
|
||
/// Builds up a "root" rule, either as a default rule or from a path passed | ||
/// to us. | ||
/// | ||
/// When path is `None`, we are executing in a context where no paths were | ||
/// passed. When `./x.py build` is run, for example, this rule could get | ||
/// called if it is in the correct list below with a path of `None`. | ||
/// Called directly by the bootstrap `Step` handler when not triggered indirectly by other `Step`s using [`Builder::ensure`]. | ||
/// For example, `./x.py test bootstrap` runs this for `test::Bootstrap`. Similarly, `./x.py test` runs it for every step | ||
/// that is listed by the `describe` macro in [`Builder::get_step_descriptions`]. | ||
fn make_run(_run: RunConfig<'_>) { | ||
// It is reasonable to not have an implementation of make_run for rules | ||
// who do not want to get called from the root context. This means that | ||
|
Uh oh!
There was an error while loading. Please reload this page.