|  | 
| 4 | 4 | 
 | 
| 5 | 5 | use crate::objgv::*; | 
| 6 | 6 | use anyhow::{Context, Result}; | 
|  | 7 | +use cap_std_ext::rustix::fd::BorrowedFd; | 
| 7 | 8 | use fn_error_context::context; | 
| 8 | 9 | use gio::glib; | 
| 9 | 10 | use gio::prelude::*; | 
| 10 | 11 | use glib::Cast; | 
| 11 | 12 | use glib::Variant; | 
| 12 | 13 | use gvariant::aligned_bytes::TryAsAligned; | 
| 13 | 14 | use gvariant::{gv, Marker, Structure}; | 
| 14 |  | -use openat_ext::FileExt; | 
|  | 15 | +use io_lifetimes::AsFilelike; | 
| 15 | 16 | use ostree::gio; | 
| 16 | 17 | use std::collections::{BTreeMap, HashMap}; | 
| 17 | 18 | use std::ffi::CString; | 
| 18 | 19 | use std::fs::File; | 
|  | 20 | +use std::ops::DerefMut; | 
| 19 | 21 | use std::os::unix::io::AsRawFd; | 
| 20 |  | -use std::os::unix::prelude::{FromRawFd, IntoRawFd}; | 
| 21 | 22 | use std::process::{Command, Stdio}; | 
| 22 | 23 | use std::rc::Rc; | 
| 23 | 24 | use std::{convert::TryInto, io::Seek}; | 
| @@ -122,10 +123,9 @@ impl<'a> CommitRewriter<'a> { | 
| 122 | 123 |         // If we're operating on a bare repo, we can clone the file (copy_file_range) directly. | 
| 123 | 124 |         if let Ok(instream) = instream.clone().downcast::<gio::UnixInputStream>() { | 
| 124 | 125 |             // View the fd as a File | 
| 125 |  | -            let instream_fd = unsafe { File::from_raw_fd(instream.as_raw_fd()) }; | 
| 126 |  | -            instream_fd.copy_to(tempf.as_file_mut())?; | 
| 127 |  | -            // Leak to avoid double close | 
| 128 |  | -            let _ = instream_fd.into_raw_fd(); | 
|  | 126 | +            let instream_fd = unsafe { BorrowedFd::borrow_raw_fd(instream.as_raw_fd()) }; | 
|  | 127 | +            let instream_fd = &mut instream_fd.as_filelike_view::<File>(); | 
|  | 128 | +            std::io::copy(instream_fd.deref_mut(), tempf.as_file_mut())?; | 
| 129 | 129 |         } else { | 
| 130 | 130 |             // If we're operating on an archive repo, then we need to uncompress | 
| 131 | 131 |             // and recompress... | 
|  | 
0 commit comments