sxyazi/yazi · error · io::Error

Unsupported

Unsupported

Error message

Unsupported filesystem

What it means

Guard in `engine::identical`: the comparison is only implemented for local paths, and at least one of the two URLs is not local (no local path representation). The engine returns `Unsupported` rather than a hard I/O error; the caller `must_identical` propagates it. The faulting inputs are the non-local URL(s).

Source

Thrown at yazi-vfs/src/engine/engine.rs:144

	V: AsUrl,
{
	let (original, link) = (original.as_url(), link.as_url());
	if original.auth().same_service(link.auth()) {
		Engines::new(original).await?.hard_link(link.loc()).await
	} else {
		Err(io::ErrorKind::CrossesDevices.into())
	}
}

async fn identical<U, V>(a: U, b: V) -> io::Result<bool>
where
	U: AsUrl,
	V: AsUrl,
{
	if let (Some(a), Some(b)) = (a.as_url().as_local(), b.as_url().as_local()) {
		yazi_fs::engine::local::identical(a, b).await
	} else {
		Err(io::Error::new(io::ErrorKind::Unsupported, "Unsupported filesystem"))
	}
}

pub async fn metadata<U>(url: U) -> io::Result<Cha>
where
	U: AsUrl,
{
	Engines::new(url.as_url()).await?.metadata().await
}

pub async fn must_identical<U, V>(a: U, b: V) -> bool
where
	U: AsUrl,
	V: AsUrl,
{
	identical(a, b).await.unwrap_or(false)
}

View on GitHub (pinned to 5f901b886b)

Solutions

  1. Compare local paths only; for remote services, implement a service-specific identity check.
  2. Skip the identity optimization when either side is remote instead of relying on this function.
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at yazi-vfs/src/engine/engine.rs:144 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of sxyazi/yazi@5f901b886b (2026-09-02). Data as JSON: /api/errors/a3d3e9c467d4c6fa. Report an issue: GitHub.