lib: implement CheckoutOptions::filter (hackishly)
This commit is contained in:
1 parent
a521c838f5
commit
19fdf706d5
6 files changed
+154
-12
No files matched your search
@@ -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());
|
||||
}
|
||||
Reference in new issue
Block a user