struct SystemInstallStep {
program: String,
args: Vec<String>,
needs_elevation: bool,
verify_bin: String,
resolved_version: Option<String>,
}Expand description
One resolved, ready-to-spawn install command. Never constructed from
client input — always the output of resolve_install_step’s fixed
catalog lookup.
Fields§
§program: String§args: Vec<String>§needs_elevation: boolInforms the consent-step copy the frontend shows before running this (“This will show a Windows permission prompt” / “This will ask for your password”) — never used to skip or alter execution.
verify_bin: StringBinary name to re-probe after a successful package-manager exit
(git/node/python’s real executable — “npm” verifies via “node”,
same bundled-together reasoning as claim_key_for_tool). A
package manager reporting success does NOT mean this process’s
own PATH can see the new binary yet: on Windows especially,
winget/MSI installers update the registry-backed PATH, but a
long-running process (this srv) only re-reads its environment at
startup, not via the registry-change broadcast a newly-spawned
process would pick up. Verifying here lets the success message
tell the truth instead of silently declaring “installed” right
before the caller’s own immediate re-probe shows “still not
found” — Codex P1, PR #2790.
resolved_version: Option<String>Version this exact command would install, queried live from the
package manager’s own catalog at resolve time — never hardcoded.
A hardcoded “v24” here would repeat the exact staleness bug this
repo already hit once (Taskfile.yml’s VERSION var pinned to a
specific node@20 brew formula that outlived that major version
— see #2942). None when the query itself fails or isn’t
implemented for this package manager (most Linux managers below);
the frontend falls back to unversioned copy in that case, never a
stale guess.
Trait Implementations§
Source§impl Clone for SystemInstallStep
impl Clone for SystemInstallStep
Source§fn clone(&self) -> SystemInstallStep
fn clone(&self) -> SystemInstallStep
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for SystemInstallStep
impl RefUnwindSafe for SystemInstallStep
impl Send for SystemInstallStep
impl Sync for SystemInstallStep
impl Unpin for SystemInstallStep
impl UnsafeUnpin for SystemInstallStep
impl UnwindSafe for SystemInstallStep
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more