Skip to content

chore(deps)(deps): update fs4 requirement from 0.7 to 1.1 - #58

Closed
dependabot[bot] wants to merge 1 commit into
nextfrom
dependabot/cargo/next/fs4-1.1
Closed

chore(deps)(deps): update fs4 requirement from 0.7 to 1.1#58
dependabot[bot] wants to merge 1 commit into
nextfrom
dependabot/cargo/next/fs4-1.1

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jun 22, 2026

Copy link
Copy Markdown
Contributor

Updates the requirements on fs4 to permit the latest version.

Release notes

Sourced from fs4's releases.

v1.1.0

Changes

  • Consolidate FileExt and AsyncFileExt into single crate-root traits (fs4::FileExt, fs4::AsyncFileExt) instead of generating a distinct trait per backend module. The per-backend modules (fs4::tokio, fs4::async_std, fs4::smol, fs4::fs_err2, fs4::fs_err3, fs4::fs_err2_tokio, fs4::fs_err3_tokio) now re-export the unified crate-root trait. Method-call sites that import the trait via use continue to compile unchanged; code that named two backend traits as distinct types will see them unify.
  • Add blanket impls impl<F: FileExt + ?Sized> FileExt for &F and impl<F: AsyncFileExt + ?Sized> AsyncFileExt for &F, so the extension methods are now callable through shared references.
  • Seal FileExt and AsyncFileExt via a private sealed::Sealed supertrait, so the set of implementing types is closed to the concrete file types fs4 already supports (and references to them). This locks in the freedom to add methods to either trait in future minor releases without breaking downstream impls.
  • Add DynAsyncFileExt, an object-safe mirror of AsyncFileExt whose async methods return BoxFuture<'_, T> (alias for Pin<Box<dyn Future<Output = T> + Send + '_>>). Use it whenever type erasure is needed (Box<dyn DynAsyncFileExt>, &dyn DynAsyncFileExt); prefer the static AsyncFileExt for generic code since it has no allocation or dynamic-dispatch overhead. Every type implementing AsyncFileExt also implements DynAsyncFileExt, and the trait is sealed.
  • Mark the delegating methods #[inline(always)] (skipped under tarpaulin coverage builds).
Changelog

Sourced from fs4's changelog.

1.1.0

Changes

  • Consolidate FileExt and AsyncFileExt into single crate-root traits (fs4::FileExt, fs4::AsyncFileExt) instead of generating a distinct trait per backend module. The per-backend modules (fs4::tokio, fs4::async_std, fs4::smol, fs4::fs_err2, fs4::fs_err3, fs4::fs_err2_tokio, fs4::fs_err3_tokio) now re-export the unified crate-root trait. Method-call sites that import the trait via use continue to compile unchanged; code that named two backend traits as distinct types will see them unify.
  • Add blanket impls impl<F: FileExt + ?Sized> FileExt for &F and impl<F: AsyncFileExt + ?Sized> AsyncFileExt for &F, so the extension methods are now callable through shared references.
  • Seal FileExt and AsyncFileExt via a private sealed::Sealed supertrait, so the set of implementing types is closed to the concrete file types fs4 already supports (and references to them). This locks in the freedom to add methods to either trait in future minor releases without breaking downstream impls.
  • Add DynAsyncFileExt, an object-safe mirror of AsyncFileExt whose async methods return BoxFuture<'_, T> (alias for Pin<Box<dyn Future<Output = T> + Send + '_>>). Use it whenever type erasure is needed (Box<dyn DynAsyncFileExt>, &dyn DynAsyncFileExt); prefer the static AsyncFileExt for generic code since it has no allocation or dynamic-dispatch overhead. Every type implementing AsyncFileExt also implements DynAsyncFileExt, and the trait is sealed.
  • Mark the delegating methods #[inline(always)] (skipped under tarpaulin coverage builds).

1.0.1

Fixes

  • Unix allocate: short-circuit on allocated blocks (metadata().blocks() * 512 >= len) instead of logical EOF. The previous metadata().len() >= len check silently turned allocate into a no-op on sparse files (logical length large, zero blocks reserved), violating the documented preallocation guarantee. The new check still skips the macOS F_PREALLOCATE re-allocate-ENOSPC path from #15, since it asks the right question: "are the blocks already reserved?" Applies to both the sync and async implementations.
  • Windows statvfs: route the three GetDiskFreeSpaceExW outputs correctly. free_space now comes from lpTotalNumberOfFreeBytes (volume-wide, quota-independent), available_space from lpFreeBytesAvailable (caller-scoped, honours per-user quotas), and total_space is computed from cluster math (sectors_per_cluster * bytes_per_sector * total_number_of_clusters)

... (truncated)

Commits
  • 5f81cf2 Release v1.1.0: unify backend traits, seal them, add DynAsyncFileExt (#51)
  • 16bab4b Release v1.0.2: fix WASI no-default build, MSRV CI, repo rename (#50)
  • f5e148e Release v1.0.1: fix sparse allocate, Windows statvfs, Fuchsia build (#49)
  • fb3e036 Release v1.0.0: match std file-lock API, fix platform bugs (#48)
  • 4732891 Fix Rust 1.89+ compatibility. (#46)
  • 9ce618c Add redox support (#43)
  • 8217d4c README: Adds link to rustix (#42)
  • 9d15e85 Update outdated docs
  • 511e2d2 bumpup rustix version (#40)
  • 7267083 CHANGELOG.md: Fix some typos (#37)
  • Additional commits viewable in compare view

mmacedoeu added a commit that referenced this pull request Jul 17, 2026
Unblocks 6+ Dependabot cargo PRs (#57 #58 #59 #60 #62 #65) stuck on
'build-test (20, 3.11, stable)' due to libdbus-sys build.rs panic.

octo-cable -> bluer -> dbus -> libdbus-sys chain needs pkg-config and
libdbus-1-dev headers. ci.yml + coverage.yml already install these;
quota-router.yml lacked the install. Dependabot cargo lockfile bumps
invalidate the cache, exposing the gap.

Same install line as ci.yml + coverage.yml for parity. Both jobs
(test, clippy-stable) get the step.
@mmacedoeu

Copy link
Copy Markdown
Contributor

@dependabot rebase

@dependabot
dependabot Bot force-pushed the dependabot/cargo/next/fs4-1.1 branch from ccc40ff to d66517e Compare July 17, 2026 23:58
@mmacedoeu

Copy link
Copy Markdown
Contributor

@dependabot rebase

Updates the requirements on [fs4](https://github.com/al8n/fs4) to permit the latest version.
- [Release notes](https://github.com/al8n/fs4/releases)
- [Changelog](https://github.com/al8n/fs4/blob/main/CHANGELOG.md)
- [Commits](al8n/fs4@0.7.0...1.1.0)

---
updated-dependencies:
- dependency-name: fs4
  dependency-version: 1.1.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabot Bot force-pushed the dependabot/cargo/next/fs4-1.1 branch from d66517e to 2ce7472 Compare July 18, 2026 01:04
@mmacedoeu

Copy link
Copy Markdown
Contributor

Closed in favor of upstream removal.

fs4 dep was removed in 81226a1; config_writer now uses std::fs::File::try_lock / lock / unlock (stable since Rust 1.89, same flock(2) / LockFileEx primitives). Dependabot will re-open once a future fs4 1.x API change is desired; until then the dep stays out of the workspace.

@mmacedoeu mmacedoeu closed this Jul 18, 2026
@dependabot @github

dependabot Bot commented on behalf of github Jul 18, 2026

Copy link
Copy Markdown
Contributor Author

OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting @dependabot ignore this major version or @dependabot ignore this minor version. You can also ignore all major, minor, or patch releases for a dependency by adding an ignore condition with the desired update_types to your config file.

If you change your mind, just re-open this PR and I'll resolve any conflicts on it.

@dependabot
dependabot Bot deleted the dependabot/cargo/next/fs4-1.1 branch July 18, 2026 02:29
mmacedoeu added a commit that referenced this pull request Jul 18, 2026
Rust 1.89 stabilized std::fs::File::try_lock / lock / unlock, backed
by flock(2) on Unix and LockFileEx on Windows — same primitives fs4
wraps. Migration unblocks PR #58 (fs4 0.7->1.1) by removing the fs4
dependency entirely instead of re-mapping its API across the
0.7 -> 0.8 (free functions) -> 1.1 (renamed trait methods) churn.

Changes:
- config_writer.rs: lock_file.try_lock_exclusive() -> try_lock()
                    holder.lock_exclusive() -> holder.lock()
                    holder.unlock() -> holder.unlock()
- config_writer.rs: convert fs4 TryLockError -> io::Error via .into()
                    (both fs4 and std types impl From for io::Error)
- drop use fs4::FileExt imports (no longer needed)
- Cargo.toml: remove fs4 = { version = "1.1", features = ["sync"] }

Behavior preserved:
- Linux: flock(LOCK_EX | LOCK_NB) on open file description (same as fs4)
- Windows: LockFileEx with ERROR_LOCK_VIOLATION handling (same as fs4)
- 39 lib tests pass; clippy clean.
mmacedoeu added a commit that referenced this pull request Jul 18, 2026
13 Dependabot PRs reviewed for impact + feasibility.
6 merged (#54 #55 #56 #61 #64 #66), 7 closed (#57 #58 #59 #60 #62
#63 #65). Analysis covers each PR's CI status, dep ownership,
bump rationale, breaking-change audit, merge sequencing, and
infra fixes landed (libdbus install + hmac-sha256 + std lock +
stoolap parser catch-all).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant