pub struct Workspace<'a, R: CommandRunner, D: DependencyResolver = ManifestWalkResolver> {
pub root: PathBuf,
pub config: ResolvedConfig,
pub graph: D,
pub tags: OnceCell<TagIndex>,
pub git: OnceCell<GitAccess<'a>>,
pub runner: &'a R,
pub manifest_cache: RefCell<BTreeMap<PathBuf, Arc<dyn Manifest>>>,
pub identity: IdentityIndex,
}Fields§
§root: PathBuf§config: ResolvedConfig§graph: DDeferred TagIndex: built at most once, the first time
Workspace::tags is called, not eagerly by Workspace::load.
TagIndex::build fetches the repo’s full tag list – native gix, or
(unavailable on wasm32) a shelled git tag --list Extism
round-trip. Several command paths never consult tags at all (add’s
non-interactive path only needs Workspace::root; init only
needs package names/root), so building unconditionally in
Workspace::load charged every caller for work only some need. All
of TagIndex::build’s inputs are already Workspace fields, so a
OnceCell needs no extra state – go through Workspace::tags,
not this field directly.
git: OnceCell<GitAccess<'a>>Deferred GitAccess: built at most once, the first time
Workspace::git_access is called, mirroring tags above.
GitAccess::discover never fails (native gix, falling back to a
CommandRunner shell round-trip when unavailable), so simpler
than tags – no Result to thread through. Consolidates what
were multiple independent GitAccess::discover calls within one
command invocation (plan_publish’s head_sha resolution,
TagIndex::build via Workspace::tags) into one shared
discovery. pub so tests can hand-construct a Workspace with a
pre-seeded value, bypassing discovery.
runner: &'a R§manifest_cache: RefCell<BTreeMap<PathBuf, Arc<dyn Manifest>>>Path-keyed cache of manifest handles opened read-only during this
workspace’s lifetime. Populated during graph discovery
(ManifestWalkResolver::build) and reused by read-only accessors
such as Workspace::base_versions so a given manifest is opened
(read + parsed) at most once per command run. Never consulted by the
manifest-open-for-write path in apply.rs, which always needs a
fresh, exclusively-owned &mut handle.
identity: IdentityIndexImplementations§
Source§impl<'a, R: CommandRunner> Workspace<'a, R, ManifestWalkResolver>
impl<'a, R: CommandRunner> Workspace<'a, R, ManifestWalkResolver>
pub fn load<L: ProjectLocator>( root: PathBuf, locator: &L, runner: &'a R, ) -> Result<Self, GraphError>
Source§impl<'a, R: CommandRunner, D: DependencyResolver> Workspace<'a, R, D>
impl<'a, R: CommandRunner, D: DependencyResolver> Workspace<'a, R, D>
Returns the workspace’s TagIndex, building it on first access and
reusing the cached result afterwards. See the doc comment on the
tags field for why this is deferred rather than built eagerly by
Workspace::load.
Sourcepub fn git_access(&self) -> &GitAccess<'a>
pub fn git_access(&self) -> &GitAccess<'a>
Returns the workspace’s shared GitAccess, discovering it on
first access and reusing the cached result afterwards – mirrors
Workspace::tags. Every command that needs git (tag resolution,
head SHA lookup, commit history walks, …) should go through this
rather than calling GitAccess::discover itself, so a single
command invocation never pays for more than one discovery
(native gix repository-open, or a CommandRunner shell round-trip
when gix is unavailable) regardless of how many of those it needs.
pub fn base_versions(&self) -> Result<BTreeMap<PackageId, Version>, GraphError>
pub fn pre_json_key<'b>(&self, id: &'b PackageId) -> Result<&'b str, GraphError>
pub fn initial_versions(&self) -> Result<Vec<(String, Version)>, GraphError>
Auto Trait Implementations§
impl<'a, R, D = ManifestWalkResolver> !Freeze for Workspace<'a, R, D>
impl<'a, R, D = ManifestWalkResolver> !RefUnwindSafe for Workspace<'a, R, D>
impl<'a, R, D = ManifestWalkResolver> !Sync for Workspace<'a, R, D>
impl<'a, R, D = ManifestWalkResolver> !UnwindSafe for Workspace<'a, R, D>
impl<'a, R, D> Send for Workspace<'a, R, D>
impl<'a, R, D> Unpin for Workspace<'a, R, D>
impl<'a, R, D> UnsafeUnpin for Workspace<'a, R, D>
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<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more