Skip to main content

DispatchError

Enum DispatchError 

Source
pub enum DispatchError {
Show 39 variants UnsupportedScheme(String), MalformedUrl(String), RepositoryNotFound { identity: String, origin: String, }, NoHead, Interrupted, UploadInterrupted(String), Transport(TransportError), Refs(RefError), RepoLock(LockError), Discover(DiscoverError), Io(Error), Store(StoreError), Pack(PackError), PackList(PackListError), SshInit(SshInitError), DetachedHead, RemoteBranchMissing(String), NonFastForwardPull { branch: String, }, RestoreSafety(String), NotCommit, Restore(RestoreError), UntrustedRemote(String), NonFastForwardPush { branch: String, }, PackmapContended { branch: String, }, PackChainInvalid { branch: String, }, PackmapMissing(String), AdvertisedPackMissing { branch: String, pack: String, }, RemoteMissingObject(String), ClosureTooLarge(usize), UnsignedOrInvalidObject { hash: String, reason: String, }, InvalidRemoteName(String), PushTooLarge { packs: usize, limit: usize, commit: Option<String>, holds_remote_head: bool, }, RetryTooLarge { reason: RetryReason, packs: usize, limit: usize, }, PushSplitLimit(String), PushNotAuthorized(String), SplitInterrupted { branch: String, head: String, published: usize, total: usize, cause: Box<DispatchError>, }, TicketRejected, DeltaBaseUnavailable, PacklistNotInRepository,
}
Expand description

Errors returned by the push / pull helpers. Mapped to exit codes by the commands themselves.

Variants§

§

UnsupportedScheme(String)

§

MalformedUrl(String)

§

RepositoryNotFound

Fields

§identity: String
§origin: String
§

NoHead

§

Interrupted

A poll-loop checkpoint observed signal::is_shutdown() == true and aborted partway through. Callers should map this to exit::TEMPFAIL (75) so retries are safe — the transfer is half-finished but the remote is unmodified for any ref we hadn’t reached yet.

§

UploadInterrupted(String)

§

Transport(TransportError)

§

Refs(RefError)

§

RepoLock(LockError)

§

Discover(DiscoverError)

§

Io(Error)

§

Store(StoreError)

§

Pack(PackError)

§

PackList(PackListError)

§

SshInit(SshInitError)

§

DetachedHead

§

RemoteBranchMissing(String)

§

NonFastForwardPull

Fields

§branch: String
§

RestoreSafety(String)

§

NotCommit

§

Restore(RestoreError)

§

UntrustedRemote(String)

The per-endpoint credential-trust gate (#97) refused to build a credential-bearing transport for a repo-chosen endpoint the user has not explicitly trusted. The wrapped string is the actionable message produced by crate::config::endpoint_credential_trust.

§

NonFastForwardPush

A CAS ref write was rejected because the remote moved under us (non-fast-forward). Callers map this to an actionable fetch-then-retry / --force-with-lease hint.

Fields

§branch: String
§

PackmapContended

The branch’s packmap pointer could not be durably advanced under sustained concurrent pushes. The branch ref was NOT moved, so the remote stays consistent; the push is safe to retry.

Fields

§branch: String
§

PackChainInvalid

A packmap chain was malformed — it exceeded the depth cap, contained a cycle, or a node could not be downloaded/decoded. Indicates a corrupt or hostile remote.

Fields

§branch: String
§

PackmapMissing(String)

The remote advertised a branch ref but no packmap (refs/mkit/packmap/<branch>) for it. mkit speaks a single, packmap-only transfer dialect: the push path ALWAYS advertises a packmap before moving the branch ref, so a branch with a tip but no packmap is a corrupt/incomplete remote, not a format we degrade to. We refuse to fetch rather than silently materialise a partial ref.

§

AdvertisedPackMissing

The packmap advertised a pack the remote does not hold. The branch’s closure cannot be reconstructed, so the fetch is aborted rather than publishing a ref to an incomplete history.

Fields

§branch: String
§pack: String
§

RemoteMissingObject(String)

After unpacking the branch’s whole packmap chain, an object reachable from the fetched tip is still absent from the local store — the chain did not deliver the full closure. This is a pure integrity assertion (no recovery download is attempted): the remote’s packmap is incomplete, so fetch aborts before publishing the ref.

§

ClosureTooLarge(usize)

The fetched tip’s object closure exceeds the mkit_core::ops::graph::MAX_REACHABLE verification cap, so completeness could not be confirmed. On the applied-pack skip path (#409) this closure walk is the sole guarantee the local store is whole; a truncated walk could silently pass over missing objects, so we fail closed rather than publish a ref we can’t fully verify. This is NOT a self-heal trigger.

§

UnsignedOrInvalidObject

A commit/remix/tag newly introduced by this fetch failed Ed25519 signature verification via mkit_core::sign::verify_commit / verify_remix / verify_tag — the exact check mkit verify <rev> runs manually (issue #692). A hostile remote (THREAT-MODEL §3.1) can otherwise push an unsigned or forged history that clone/pull/ fetch would silently materialise. Deliberately distinct from RemoteMissingObject so it does NOT feed the applied-pack self-heal retry (#409): an invalid signature is not evidence of local staleness, and clearing the applied-packs record would not make a hostile remote’s history valid. Fails closed by default; opt out with --no-verify-signatures or the user-scoped pull.require_signed = false config (never settable from repo-scoped config — see crate::config::REPO_FORBIDDEN_KEYS).

Fields

§hash: String
§reason: String
§

InvalidRemoteName(String)

A remote name passed to the applied-packs record (#409) is not a legal ref name (per mkit_core::refs::validate_ref_name). A remote name is a ref name, so this should never occur for a config-registered remote; it is defence-in-depth against a malformed name being used as a raw path component under .mkit/applied-packs/.

§

PushTooLarge

One advance would need more data packs than the server permits per advance. commit names the single commit or merge that cannot be split further when the refusal came from the pre-flight dry seal, before anything was published; without it the seal-time backstop fired.

Fields

§packs: usize
§limit: usize
§commit: Option<String>
§holds_remote_head: bool

The unsplittable commit is the first that contains the remote head, so the split could not cut before it.

§

RetryTooLarge

A retry of one advance (a rejected ticket, a lost delta base) re-planned the push and the new plan no longer fits one advance. Found by a dry seal, so nothing was uploaded for the retry.

Fields

§packs: usize
§limit: usize
§

PushSplitLimit(String)

A split push would exceed a bound (steps or chain length). Nothing was published.

§

PushNotAuthorized(String)

The stored grants do not authorize every advance of a split push. Nothing was published.

§

SplitInterrupted

A split push failed after publishing some advances. head is the last advance this push published, a first-parent ancestor of the local tip (another pusher may have moved the branch since); re-running the push resumes from the remote branch unless a concurrent push caused the failure.

Fields

§branch: String
§head: String
§published: usize
§total: usize
§

TicketRejected

§

DeltaBaseUnavailable

§

PacklistNotInRepository

Implementations§

Source§

impl DispatchError

Source

pub fn into_published_prefix(self) -> (Self, Option<PublishedPrefix>)

The error a split push failed with, without its published-prefix wrapper, and that prefix (None when no advance of this branch was published).

Trait Implementations§

Source§

impl Debug for DispatchError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for DispatchError

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for DispatchError

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl From<DiscoverError> for DispatchError

Source§

fn from(source: DiscoverError) -> Self

Converts to this type from the input type.
Source§

impl From<Error> for DispatchError

Source§

fn from(source: Error) -> Self

Converts to this type from the input type.
Source§

impl From<LockError> for DispatchError

Source§

fn from(source: LockError) -> Self

Converts to this type from the input type.
Source§

impl From<PackError> for DispatchError

Source§

fn from(source: PackError) -> Self

Converts to this type from the input type.
Source§

impl From<PackListError> for DispatchError

Source§

fn from(source: PackListError) -> Self

Converts to this type from the input type.
Source§

impl From<RefError> for DispatchError

Source§

fn from(source: RefError) -> Self

Converts to this type from the input type.
Source§

impl From<RestoreError> for DispatchError

Source§

fn from(source: RestoreError) -> Self

Converts to this type from the input type.
Source§

impl From<SshInitError> for DispatchError

Source§

fn from(source: SshInitError) -> Self

Converts to this type from the input type.
Source§

impl From<StoreError> for DispatchError

Source§

fn from(source: StoreError) -> Self

Converts to this type from the input type.
Source§

impl From<TransportError> for DispatchError

Source§

fn from(source: TransportError) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self> ⓘ

Attaches the current Context to this type, returning a WithContext wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> MaybeSend for T
where T: Send + ?Sized,

Source§

impl<T> MaybeSync for T
where T: Sync + ?Sized,

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Threaded<T> for T

Source§

type Rest = ()

The outputs beyond the threaded value.
Source§

fn split(self) -> (T, ())

Splits into the threaded value and the extra outputs.
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more