mirror of
https://github.com/ostreedev/ostree.git
synced 2025-02-01 09:47:45 +03:00
repo: Add two more cap-std APIs
Followup to the previous PR. I realized now with `io_lifetimes` we can offer a safe `dfd_borrow()` that *borrows* the file descriptor for the repository. (In contrast to the current `.dfd()` that returns the raw version) Building on that, add another API that re-acquires a `Dir` instance. (In the future in theory we could optimize this more by knowing whether or not the repo was constructed via cap-std, and perhaps in theory synthesize a `&Dir` reference, but I don't think we need that now)
This commit is contained in:
parent
6940896c4e
commit
19224a411a
@ -145,6 +145,18 @@ impl Repo {
|
||||
}
|
||||
}
|
||||
|
||||
/// Borrow the directory file descriptor for this repository.
|
||||
#[cfg(feature = "cap-std-apis")]
|
||||
pub fn dfd_borrow<'a>(&'a self) -> io_lifetimes::BorrowedFd<'a> {
|
||||
unsafe { io_lifetimes::BorrowedFd::borrow_raw_fd(self.dfd()) }
|
||||
}
|
||||
|
||||
/// Return a new `cap-std` directory reference for this repository.
|
||||
#[cfg(feature = "cap-std-apis")]
|
||||
pub fn dfd_as_dir(&self) -> std::io::Result<cap_std::fs::Dir> {
|
||||
cap_std::fs::Dir::reopen_dir(&self.dfd_borrow())
|
||||
}
|
||||
|
||||
/// Find all objects reachable from a commit.
|
||||
pub fn traverse_commit<P: IsA<gio::Cancellable>>(
|
||||
&self,
|
||||
|
@ -31,6 +31,10 @@ fn should_commit_content_to_repo_and_list_refs_again() {
|
||||
fn cap_std_commit() {
|
||||
let test_repo = CapTestRepo::new();
|
||||
|
||||
assert!(test_repo.dir.exists("config"));
|
||||
// Also test re-acquiring a new dfd
|
||||
assert!(test_repo.repo.dfd_as_dir().unwrap().exists("config"));
|
||||
|
||||
assert!(test_repo.repo.require_rev("nosuchrev").is_err());
|
||||
|
||||
let mtree = create_mtree(&test_repo.repo);
|
||||
|
Loading…
x
Reference in New Issue
Block a user