lib: implement CheckoutOptions::filter (hackishly)

This commit is contained in:
Felix Krull authored and Colin Walters committed 2022-05-06 12:53:54 -04:00
1 parent a521c838f5
commit 19fdf706d5
6 files changed
+154 -12

No files matched your search

+38 -2
View File
@@ -13,8 +13,8 @@ use gio::prelude::*;
use gio::NONE_CANCELLABLE;
use glib::prelude::*;
use ostree::{
ObjectName, ObjectType, RepoCheckoutAtOptions, RepoCheckoutMode, RepoCheckoutOverwriteMode,
RepoDevInoCache,
ObjectName, ObjectType, RepoCheckoutAtOptions, RepoCheckoutFilterResult, RepoCheckoutMode,
RepoCheckoutOverwriteMode, RepoDevInoCache,
};
use std::os::unix::io::AsRawFd;
@@ -161,6 +161,9 @@ fn should_checkout_at_with_options() {
force_copy: true,
force_copy_zerosized: true,
devino_to_csum_cache: Some(RepoDevInoCache::new()),
filter: Some(Box::new(|_repo, _path, _stat| {
RepoCheckoutFilterResult::Allow
})),
..Default::default()
}),
dirfd.as_raw_fd(),
@@ -172,3 +175,36 @@ fn should_checkout_at_with_options() {
assert_test_file(checkout_dir.path());
}
#[test]
#[cfg(feature = "v2016_8")]
fn should_checkout_at_with_filter() {
let test_repo = TestRepo::new();
let checksum = test_repo.test_commit("test");
let checkout_dir = tempfile::tempdir().expect("checkout dir");
let dirfd = openat::Dir::open(checkout_dir.path()).expect("openat");
test_repo
.repo
.checkout_at(
Some(&RepoCheckoutAtOptions {
filter: Some(Box::new(|_repo, path, _stat| {
if let Some("testfile") = path.file_name().map(|s| s.to_str().unwrap()) {
RepoCheckoutFilterResult::Skip
} else {
RepoCheckoutFilterResult::Allow
}
})),
..Default::default()
}),
dirfd.as_raw_fd(),
"test-checkout",
&checksum,
NONE_CANCELLABLE,
)
.expect("checkout at");
let testdir = checkout_dir.path().join("test-checkout").join("testdir");
assert!(std::fs::read_dir(&testdir).is_ok());
assert!(std::fs::File::open(&testdir.join("testfile")).is_err());
}