Struct git_tempfile::Handle
source · [−]pub struct Handle<Marker: Debug> { /* private fields */ }
Expand description
A registered temporary file which will delete itself on drop or if the program is receiving signals that should cause it to terminate.
Note
Signals interrupting the calling thread right after taking ownership of the registered tempfile will cause all but this tempfile to be removed automatically. In the common case it will persist on disk as destructors were not called or didn’t get to remove the file.
In the best case the file is a true temporary with a non-clashing name that ‘only’ fills up the disk, in the worst case the temporary file is used as a lock file which may leave the repository in a locked state forever.
This kind of raciness exists whenever take()
is used and can’t be circumvented.
Implementations
sourceimpl Handle<Writable>
impl Handle<Writable>
sourcepub fn persist(
self,
path: impl AsRef<Path>
) -> Result<Option<File>, Error<Writable>>
pub fn persist(
self,
path: impl AsRef<Path>
) -> Result<Option<File>, Error<Writable>>
Persist this tempfile to replace the file at the given path
if necessary, in a way that recovers the original instance
on error or returns the open now persisted former tempfile.
Note that it might not exist anymore if an interrupt handler managed to steal it and allowed the program to return to
its normal flow.
sourceimpl Handle<Closed>
impl Handle<Closed>
Creation and ownership transfer
sourcepub fn at(
path: impl AsRef<Path>,
directory: ContainingDirectory,
cleanup: AutoRemove
) -> Result<Self>
pub fn at(
path: impl AsRef<Path>,
directory: ContainingDirectory,
cleanup: AutoRemove
) -> Result<Self>
Create a registered tempfile at the given path
, where path
includes the desired filename and close it immediately.
Depending on the directory
configuration, intermediate directories will be created, and depending on cleanup
empty
intermediate directories will be removed.
sourceimpl Handle<Writable>
impl Handle<Writable>
Creation and ownership transfer
sourcepub fn at(
path: impl AsRef<Path>,
directory: ContainingDirectory,
cleanup: AutoRemove
) -> Result<Self>
pub fn at(
path: impl AsRef<Path>,
directory: ContainingDirectory,
cleanup: AutoRemove
) -> Result<Self>
Create a registered tempfile at the given path
, where path
includes the desired filename.
Depending on the directory
configuration, intermediate directories will be created, and depending on cleanup
empty
intermediate directories will be removed.
sourcepub fn new(
containing_directory: impl AsRef<Path>,
directory: ContainingDirectory,
cleanup: AutoRemove
) -> Result<Self>
pub fn new(
containing_directory: impl AsRef<Path>,
directory: ContainingDirectory,
cleanup: AutoRemove
) -> Result<Self>
Create a registered tempfile within containing_directory
with a name that won’t clash, and clean it up as specified with cleanup
.
Control how to deal with intermediate directories with directory
.
The temporary file is opened and can be written to using the with_mut()
method.
sourcepub fn take(self) -> Option<NamedTempFile>
pub fn take(self) -> Option<NamedTempFile>
Take ownership of the temporary file.
It’s a theoretical possibility that the file isn’t present anymore if signals interfere, hence the Option
sourcepub fn close(self) -> Result<Handle<Closed>>
pub fn close(self) -> Result<Handle<Closed>>
Close the underlying file handle but keep track of the temporary file as before for automatic cleanup.
This saves system resources in situations where one opens a tempfile file at a time, writes a new value, and closes it right after to perform more updates of this kind in other tempfiles. When all succeed, they can be renamed one after another.
sourceimpl Handle<Writable>
impl Handle<Writable>
Mutation
sourcepub fn with_mut<T>(
&mut self,
once: impl FnOnce(&mut NamedTempFile) -> T
) -> Result<T>
pub fn with_mut<T>(
&mut self,
once: impl FnOnce(&mut NamedTempFile) -> T
) -> Result<T>
Obtain a mutable handler to the underlying named tempfile and call f(&mut named_tempfile)
on it.
Note that for the duration of the call, a signal interrupting the operation will cause the tempfile not to be cleaned up as it is not visible anymore to the signal handler.
Assumptions
The caller must assure that the signal handler for cleanup will be followed by an abort call so that this code won’t run again on a removed instance. An error will occur otherwise.
Trait Implementations
sourceimpl Read for Handle<Writable>
impl Read for Handle<Writable>
sourcefn read(&mut self, buf: &mut [u8]) -> Result<usize>
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
1.36.0 · sourcefn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
Like read
, except that it reads into a slice of buffers. Read more
sourcefn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector
)Determines if this Read
er has an efficient read_vectored
implementation. Read more
1.0.0 · sourcefn read_to_end(&mut self, buf: &mut Vec<u8, Global>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8, Global>) -> Result<usize, Error>
Read all bytes until EOF in this source, placing them into buf
. Read more
1.0.0 · sourcefn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
Read all bytes until EOF in this source, appending them to buf
. Read more
1.6.0 · sourcefn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
Read the exact number of bytes required to fill buf
. Read more
sourcefn read_buf(&mut self, buf: &mut ReadBuf<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: &mut ReadBuf<'_>) -> Result<(), Error>
read_buf
)Pull some bytes from this source into the specified buffer. Read more
sourcefn read_buf_exact(&mut self, buf: &mut ReadBuf<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, buf: &mut ReadBuf<'_>) -> Result<(), Error>
read_buf
)Read the exact number of bytes required to fill buf
. Read more
1.0.0 · sourcefn by_ref(&mut self) -> &mut Self
fn by_ref(&mut self) -> &mut Self
Creates a “by reference” adaptor for this instance of Read
. Read more
sourceimpl Seek for Handle<Writable>
impl Seek for Handle<Writable>
sourcefn seek(&mut self, pos: SeekFrom) -> Result<u64>
fn seek(&mut self, pos: SeekFrom) -> Result<u64>
Seek to an offset, in bytes, in a stream. Read more
1.55.0 · sourcefn rewind(&mut self) -> Result<(), Error>
fn rewind(&mut self) -> Result<(), Error>
Rewind to the beginning of a stream. Read more
sourceimpl Write for Handle<Writable>
impl Write for Handle<Writable>
sourcefn write(&mut self, buf: &[u8]) -> Result<usize>
fn write(&mut self, buf: &[u8]) -> Result<usize>
Write a buffer into this writer, returning how many bytes were written. Read more
sourcefn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
sourcefn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
can_vector
)Determines if this Write
r has an efficient write_vectored
implementation. Read more
1.0.0 · sourcefn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
Attempts to write an entire buffer into this writer. Read more
sourcefn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
write_all_vectored
)Attempts to write multiple buffers into this writer. Read more
Auto Trait Implementations
impl<Marker> RefUnwindSafe for Handle<Marker> where
Marker: RefUnwindSafe,
impl<Marker> Send for Handle<Marker> where
Marker: Send,
impl<Marker> Sync for Handle<Marker> where
Marker: Sync,
impl<Marker> Unpin for Handle<Marker> where
Marker: Unpin,
impl<Marker> UnwindSafe for Handle<Marker> where
Marker: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more