2019-06-12 21:00:09 +03:00
use crate ::util ::* ;
2019-05-21 23:58:40 +03:00
use gio ::NONE_CANCELLABLE ;
2019-06-01 00:53:10 +03:00
use ostree ::* ;
2019-05-26 20:18:12 +03:00
use std ::os ::unix ::io ::AsRawFd ;
2019-05-21 23:58:40 +03:00
#[ test ]
2019-05-26 20:18:12 +03:00
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 dirfd = openat ::Dir ::open ( checkout_dir . path ( ) ) . expect ( " openat " ) ;
test_repo
. repo
. checkout_at (
None ,
dirfd . as_raw_fd ( ) ,
" test-checkout " ,
& checksum ,
NONE_CANCELLABLE ,
)
. expect ( " checkout at " ) ;
assert_test_file ( checkout_dir . path ( ) ) ;
}
2019-05-31 21:02:02 +03:00
#[ 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 dirfd = openat ::Dir ::open ( checkout_dir . path ( ) ) . expect ( " openat " ) ;
test_repo
. repo
. checkout_at (
Some ( & RepoCheckoutAtOptions ::default ( ) ) ,
dirfd . as_raw_fd ( ) ,
" test-checkout " ,
& checksum ,
NONE_CANCELLABLE ,
)
. expect ( " checkout at " ) ;
assert_test_file ( checkout_dir . path ( ) ) ;
}
2019-05-26 20:18:12 +03:00
#[ 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 dirfd = openat ::Dir ::open ( checkout_dir . path ( ) ) . expect ( " openat " ) ;
test_repo
. repo
. checkout_at (
Some ( & RepoCheckoutAtOptions {
mode : RepoCheckoutMode ::User ,
2019-05-31 21:02:02 +03:00
overwrite_mode : RepoCheckoutOverwriteMode ::AddFiles ,
enable_fsync : true ,
force_copy : true ,
force_copy_zerosized : true ,
devino_to_csum_cache : Some ( RepoDevInoCache ::new ( ) ) ,
2019-06-12 21:38:46 +03:00
filter : repo_checkout_filter ( | _repo , _path , _stat | RepoCheckoutFilterResult ::Allow ) ,
2019-05-26 20:18:12 +03:00
.. Default ::default ( )
} ) ,
dirfd . as_raw_fd ( ) ,
" test-checkout " ,
& checksum ,
NONE_CANCELLABLE ,
)
. expect ( " checkout at " ) ;
assert_test_file ( checkout_dir . path ( ) ) ;
2019-05-25 01:59:22 +03:00
}
2019-05-31 22:56:44 +03:00
#[ test ]
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 {
2019-06-12 21:38:46 +03:00
filter : repo_checkout_filter ( | _repo , path , _stat | {
2019-05-31 22:56:44 +03:00
if let Some ( " testfile " ) = path . file_name ( ) . map ( | s | s . to_str ( ) . unwrap ( ) ) {
RepoCheckoutFilterResult ::Skip
} else {
RepoCheckoutFilterResult ::Allow
}
2019-06-12 21:38:46 +03:00
} ) ,
2019-05-31 22:56:44 +03:00
.. 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 ( ) ) ;
}