[yabridgectl] Use reflinks instead of copies

Whenever available. This should speed up the copying process while also
reducing the amount of disk space wasted on Btrfs and XFS filesystems.
This commit is contained in:
Robbert van der Helm
2021-06-12 11:38:33 +02:00
parent 14ee304256
commit 9ae0e8ca38
5 changed files with 25 additions and 5 deletions
+7
View File
@@ -30,6 +30,13 @@ Versioning](https://semver.org/spec/v2.0.0.html).
serialized correctly. No plugins seem to actually use these, so it should not
have caused any issues.
### yabridgectl
- Copies of `libyabridge-vst2.so` and `libyabridge-vst3.so` are now reflinked
when supported by the file system. This speeds up the file coyping process
while also reducing the amount of disk space used for yabridge when using
Btrfs or XFS.
## [3.3.1] - 2021-06-09
### Added
+11
View File
@@ -387,6 +387,16 @@ dependencies = [
"redox_syscall",
]
[[package]]
name = "reflink"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc585ec28b565b4c28977ce8363a6636cedc280351ba25a7915f6c9f37f68cbe"
dependencies = [
"libc",
"winapi",
]
[[package]]
name = "rustyline"
version = "6.3.0"
@@ -625,6 +635,7 @@ dependencies = [
"lazy_static",
"promptly",
"rayon",
"reflink",
"serde",
"serde_derive",
"textwrap 0.11.0",
+1
View File
@@ -17,6 +17,7 @@ colored = "2.0.0"
is_executable = "0.1.2"
lazy_static = "1.4.0"
promptly = "0.3.0"
reflink = "0.1.3"
rayon = "1.3.1"
serde = "1.0.114"
serde_derive = "1.0.114"
+1 -1
View File
@@ -501,7 +501,7 @@ fn install_file(
match method {
InstallationMethod::Copy => {
utils::copy(from, to)?;
utils::copy_or_reflink(from, to)?;
}
InstallationMethod::Symlink => {
utils::symlink(from, to)?;
+5 -4
View File
@@ -37,11 +37,12 @@ use crate::files::NativeFile;
/// moment without causing issues.
const YABRIDGE_HOST_EXPECTED_OUTPUT_PREFIX: &str = "Usage: yabridge-";
/// Wrapper around [`std::fs::copy()`](std::fs::copy) with a human readable error message.
pub fn copy<P: AsRef<Path>, Q: AsRef<Path>>(from: P, to: Q) -> Result<u64> {
fs::copy(&from, &to).with_context(|| {
/// Wrapper around [`reflink::reflink_or_copy()`](reflink::reflink_or_copy) with a human readable
/// error message.
pub fn copy_or_reflink<P: AsRef<Path>, Q: AsRef<Path>>(from: P, to: Q) -> Result<Option<u64>> {
reflink::reflink_or_copy(&from, &to).with_context(|| {
format!(
"Error copying '{}' to '{}'",
"Error reflinking '{}' to '{}'",
from.as_ref().display(),
to.as_ref().display()
)