110 lines
3.3 KiB
Rust
110 lines
3.3 KiB
Rust
use crate::util::*;
|
|
use cap_std::fs::Dir;
|
|
use cap_tempfile::cap_std;
|
|
use ostree::*;
|
|
use std::os::unix::io::AsRawFd;
|
|
|
|
#[test]
|
|
fn should_checkout_at_with_none_options() {
|
|
let test_repo = TestRepo::new();
|
|
let checksum = test_repo.test_commit("test");
|
|
let checkout_dir = tempfile::tempdir().expect("checkout dir");
|
|
|
|
let dir = Dir::open_ambient_dir(checkout_dir.path(), cap_std::ambient_authority()).unwrap();
|
|
test_repo
|
|
.repo
|
|
.checkout_at(
|
|
None,
|
|
dir.as_raw_fd(),
|
|
"test-checkout",
|
|
&checksum,
|
|
gio::Cancellable::NONE,
|
|
)
|
|
.expect("checkout at");
|
|
|
|
assert_test_file(checkout_dir.path());
|
|
}
|
|
|
|
#[test]
|
|
fn should_checkout_at_with_default_options() {
|
|
let test_repo = TestRepo::new();
|
|
let checksum = test_repo.test_commit("test");
|
|
let checkout_dir = tempfile::tempdir().expect("checkout dir");
|
|
|
|
let dir = Dir::open_ambient_dir(checkout_dir.path(), cap_std::ambient_authority()).unwrap();
|
|
test_repo
|
|
.repo
|
|
.checkout_at(
|
|
Some(&RepoCheckoutAtOptions::default()),
|
|
dir.as_raw_fd(),
|
|
"test-checkout",
|
|
&checksum,
|
|
gio::Cancellable::NONE,
|
|
)
|
|
.expect("checkout at");
|
|
|
|
assert_test_file(checkout_dir.path());
|
|
}
|
|
|
|
#[test]
|
|
fn should_checkout_at_with_options() {
|
|
let test_repo = TestRepo::new();
|
|
let checksum = test_repo.test_commit("test");
|
|
let checkout_dir = tempfile::tempdir().expect("checkout dir");
|
|
|
|
let dir = Dir::open_ambient_dir(checkout_dir.path(), cap_std::ambient_authority()).unwrap();
|
|
test_repo
|
|
.repo
|
|
.checkout_at(
|
|
Some(&RepoCheckoutAtOptions {
|
|
mode: RepoCheckoutMode::User,
|
|
overwrite_mode: RepoCheckoutOverwriteMode::AddFiles,
|
|
enable_fsync: true,
|
|
devino_to_csum_cache: Some(RepoDevInoCache::new()),
|
|
..Default::default()
|
|
}),
|
|
dir.as_raw_fd(),
|
|
"test-checkout",
|
|
&checksum,
|
|
gio::Cancellable::NONE,
|
|
)
|
|
.expect("checkout at");
|
|
|
|
assert_test_file(checkout_dir.path());
|
|
}
|
|
|
|
#[test]
|
|
#[cfg(feature = "v2018_2")]
|
|
fn should_checkout_at_with_filter() {
|
|
use std::path::Path;
|
|
|
|
let test_repo = TestRepo::new();
|
|
let checksum = test_repo.test_commit("test");
|
|
let checkout_dir = tempfile::tempdir().expect("checkout dir");
|
|
|
|
let dir = Dir::open_ambient_dir(checkout_dir.path(), cap_std::ambient_authority()).unwrap();
|
|
test_repo
|
|
.repo
|
|
.checkout_at(
|
|
Some(&RepoCheckoutAtOptions {
|
|
filter: RepoCheckoutFilter::new(|_repo, path, _stat| {
|
|
if path == Path::new("/testdir/testfile") {
|
|
RepoCheckoutFilterResult::Skip
|
|
} else {
|
|
RepoCheckoutFilterResult::Allow
|
|
}
|
|
}),
|
|
..Default::default()
|
|
}),
|
|
dir.as_raw_fd(),
|
|
"test-checkout",
|
|
&checksum,
|
|
gio::Cancellable::NONE,
|
|
)
|
|
.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());
|
|
}
|