pub enum PruneStatus {
Show 16 variants
Pruned,
SkippedActive,
SkippedDryRun,
LockfileError(String),
ActivityCheckError(String),
PathMissing,
NotARepo,
SkippedAdapterWindow(u64),
NoBloat,
Disabled,
SkippedIgnored,
DeleteError(String),
SkippedSymlink(String),
ConfigError(String),
SkippedDeclaration(String),
SkippedNestedRepo(String),
}Expand description
The outcome of pruning a single bloat directory.
Variants§
Pruned
Successfully deleted the bloat directory.
SkippedActive
Skipped because the repo is still active (not idle).
SkippedDryRun
Skipped because it’s a dry run.
LockfileError(String)
Skipped because lockfile enforcement failed.
ActivityCheckError(String)
Skipped because the repository’s last activity could not be determined.
Not a LockfileError: that tag carries a fix_command an agent is told it can
run, and “git failed to answer” has no such mechanical fix.
PathMissing
The registered path no longer exists on disk.
NotARepo
The registered path still exists on disk but no longer holds a .git.
A standing state, not an error: the clone was deleted and recreated by hand, or
it was a worktree git worktree prune has since removed — and reporting it as
a failure made every scheduled pass exit non-zero forever, for a directory
nothing could ever have been touched in. Same reasoning as
Self::PathMissing, but its own variant because the fix is different:
devp unlink --missing only clears entries whose directory has gone, and this
one is still there.
SkippedAdapterWindow(u64)
An adapter that waits for a longer idle window than the repository’s own threshold was not examined, because the repository has not been idle that long yet. Carries the window, in days.
This was a bare continue with no row behind it, and every surface downstream
then disagreed about the repository: --explain said “idle, but no known bloat
directories were found”, status said Candidate, doctor said Yes — and a run
touched nothing. Worded as “not examined” rather than “skipped bloat”
deliberately: the gate fires before the adapter is asked for its directories,
so there may be nothing behind it at all.
NoBloat
Skipped because the bloat directory doesn’t exist.
Disabled
Repo is disabled in the registry.
SkippedIgnored
Repo has a ignore.devprune.json file — opted out.
DeleteError(String)
Error during deletion.
SkippedSymlink(String)
The bloat directory is a symlink or junction, so it was deliberately left alone.
A skip, not an error: the storage it points at is not this repository’s to delete, and the situation is permanent — reporting it as a failure made every scheduled pass over such a repo exit non-zero forever.
ConfigError(String)
.devprune.json exists but could not be parsed, so the repo was left alone.
SkippedDeclaration(String)
A directory the project declared prunable did not survive its checks.
Not a LockfileError even though it is the same kind of refusal: that tag
carries a fix_command in --json, and there is no command that fixes “your
repository declares its own source directory”.
SkippedNestedRepo(String)
The directory holds a git repository of its own, so it was deliberately left alone.
A skip, not a DeleteError: a vendored checkout — a pip -e git+… install
under .venv/src/, a file: dependency — is a permanent fact of the
repository, and reporting it as a failure made every scheduled pass over such
a repo exit non-zero forever while --dry-run over the same repo exited 0.
Trait Implementations§
Source§impl Clone for PruneStatus
impl Clone for PruneStatus
Source§impl Debug for PruneStatus
impl Debug for PruneStatus
Auto Trait Implementations§
impl Freeze for PruneStatus
impl RefUnwindSafe for PruneStatus
impl Send for PruneStatus
impl Sync for PruneStatus
impl Unpin for PruneStatus
impl UnsafeUnpin for PruneStatus
impl UnwindSafe for PruneStatus
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,
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 moreSource§impl<T> ToCompactString for Twhere
T: Display,
impl<T> ToCompactString for Twhere
T: Display,
Source§fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
ToCompactString::to_compact_string() Read moreSource§fn to_compact_string(&self) -> CompactString
fn to_compact_string(&self) -> CompactString
CompactString. Read more