[package]
name = "btrfs-cli"
version.workspace = true
edition.workspace = true
description = "User-space command-line tool for inspecting and managing Btrfs filesystems"
license.workspace = true
repository.workspace = true
homepage.workspace = true
readme = "README.md"
categories = ["command-line-utilities", "filesystem"]
keywords = ["btrfs", "filesystem", "cli", "linux", "storage"]
default-run = "btrfs"
rust-version = "1.89"
[package.metadata.docs.rs]
all-features = true
targets = ["x86_64-unknown-linux-gnu"]
[[bin]]
name = "btrfs"
path = "src/main.rs"
[dependencies]
anyhow = { workspace = true }
btrfs-disk = { workspace = true }
btrfs-fs = { workspace = true }
btrfs-fuse = { workspace = true, optional = true }
btrfs-mkfs = { workspace = true, optional = true }
btrfs-stream = { workspace = true, features = ["receive"] }
btrfs-transaction = { workspace = true }
btrfs-tune = { workspace = true, optional = true }
btrfs-uapi = { workspace = true }
chrono = { version = "0.4.44", default-features = false, features = ["clock"] }
cols = { workspace = true }
clap = { workspace = true }
console = "0.15"
env_logger = { workspace = true }
flate2 = { workspace = true }
libc = { workspace = true }
log = { workspace = true }
lzokay = { workspace = true }
nix = { workspace = true }
regex-lite = "0.1"
serde = { workspace = true }
serde_json = { workspace = true }
tokio = { workspace = true, features = ["rt"] }
uuid = { workspace = true }
zstd = { workspace = true }
[features]
default = ["mkfs", "tune"]
fuse = ["dep:btrfs-fuse"]
mkfs = ["dep:btrfs-mkfs"]
tune = ["dep:btrfs-tune"]
multicall = []
[dev-dependencies]
btrfs-test-utils = { workspace = true }
insta = "1"
tempfile = "3"
[package.metadata.deb]
name = "btrfsutils"
maintainer = "Patrick Elsen <pelsen@xfbs.net>"
section = "admin"
priority = "optional"
depends = ""
conflicts = "btrfs-progs"
replaces = "btrfs-progs"
provides = "btrfs-progs"
extended-description = """
A clean-room reimplementation of btrfs-progs in Rust. Ships the
btrfs CLI as a single multicall binary with all inspection and
management commands plus mkfs, tune, and an experimental userspace
FUSE driver.
"""
assets = [
[
"target/release/btrfs",
"usr/bin/btrfs",
"0755",
],
[
"target/release/../symlinks/*",
"usr/bin/",
"0755",
],
[
"../README.md",
"usr/share/doc/btrfsutils/README",
"0644",
],
[
"../LICENSE.md",
"usr/share/doc/btrfsutils/LICENSE",
"0644",
],
[
"../CHANGELOG.md",
"usr/share/doc/btrfsutils/CHANGELOG",
"0644",
],
[
"target/release/../gen/man/*.1",
"usr/share/man/man1/",
"0644",
],
[
"target/release/../gen/completions/btrfs.bash",
"usr/share/bash-completion/completions/btrfs",
"0644",
],
[
"target/release/../gen/completions/mkfs.btrfs.bash",
"usr/share/bash-completion/completions/mkfs.btrfs",
"0644",
],
[
"target/release/../gen/completions/btrfs.fish",
"usr/share/fish/vendor_completions.d/btrfs.fish",
"0644",
],
[
"target/release/../gen/completions/mkfs.btrfs.fish",
"usr/share/fish/vendor_completions.d/mkfs.btrfs.fish",
"0644",
],
[
"target/release/../gen/completions/_btrfs",
"usr/share/zsh/vendor-completions/_btrfs",
"0644",
],
[
"target/release/../gen/completions/_mkfs.btrfs",
"usr/share/zsh/vendor-completions/_mkfs.btrfs",
"0644",
],
]
[package.metadata.generate-rpm]
name = "btrfsutils"
license = "GPL-2.0-only"
summary = "Rust reimplementation of the btrfs command-line tools"
auto-req = "no"
assets = [
{ source = "target/release/btrfs", dest = "/usr/bin/btrfs", mode = "755" },
{ source = "../README.md", dest = "/usr/share/doc/btrfsutils/README", mode = "644", doc = true },
{ source = "../LICENSE.md", dest = "/usr/share/doc/btrfsutils/LICENSE", mode = "644", doc = true },
{ source = "../CHANGELOG.md", dest = "/usr/share/doc/btrfsutils/CHANGELOG", mode = "644", doc = true },
{ source = "target/release/../gen/man/*.1", dest = "/usr/share/man/man1/", mode = "644", doc = true },
{ source = "target/release/../gen/completions/btrfs.bash", dest = "/usr/share/bash-completion/completions/btrfs", mode = "644" },
{ source = "target/release/../gen/completions/mkfs.btrfs.bash", dest = "/usr/share/bash-completion/completions/mkfs.btrfs", mode = "644" },
{ source = "target/release/../gen/completions/btrfs.fish", dest = "/usr/share/fish/vendor_completions.d/btrfs.fish", mode = "644" },
{ source = "target/release/../gen/completions/mkfs.btrfs.fish", dest = "/usr/share/fish/vendor_completions.d/mkfs.btrfs.fish", mode = "644" },
{ source = "target/release/../gen/completions/_btrfs", dest = "/usr/share/zsh/vendor-completions/_btrfs", mode = "644" },
{ source = "target/release/../gen/completions/_mkfs.btrfs", dest = "/usr/share/zsh/vendor-completions/_mkfs.btrfs", mode = "644" },
]
post_install_script = """
for t in mkfs.btrfs btrfs-mkfs btrfstune btrfs-tune; do
ln -sf btrfs /usr/bin/$t
done
"""
post_uninstall_script = """
if [ "$1" = 0 ]; then
for t in mkfs.btrfs btrfs-mkfs btrfstune btrfs-tune; do
rm -f /usr/bin/$t
done
fi
"""
[package.metadata.generate-rpm.conflicts]
"btrfs-progs" = "*"
[package.metadata.generate-rpm.obsoletes]
"btrfs-progs" = "*"