Fix #68: Do not write empty content to file (#71)

This commit is contained in:
Danny Mösch 2020-04-10 23:39:02 +02:00 committed by GitHub
parent fd55fa0982
commit c8022e292f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 5 deletions

View file

@ -113,9 +113,11 @@ impl Replacer {
file.set_len(replaced.len() as u64)?;
file.set_permissions(meta.permissions())?;
let mut mmap_target = unsafe { MmapMut::map_mut(&file)? };
mmap_target.deref_mut().write_all(&replaced)?;
mmap_target.flush_async()?;
if !replaced.is_empty() {
let mut mmap_target = unsafe { MmapMut::map_mut(&file)? };
mmap_target.deref_mut().write_all(&replaced)?;
mmap_target.flush_async()?;
}
drop(mmap_source);
drop(source);

View file

@ -24,14 +24,27 @@ fn in_place() -> Result<()> {
Ok(())
}
#[test]
fn in_place_with_empty_result_file() -> Result<()> {
let mut file = tempfile::NamedTempFile::new()?;
file.write(b"a7c")?;
let path = file.into_temp_path();
sd().args(&["a\\dc", "", path.to_str().unwrap()])
.assert()
.success();
assert_file(&path.to_path_buf(), "");
Ok(())
}
#[test]
fn replace_into_stdout() -> Result<()> {
let mut file = tempfile::NamedTempFile::new()?;
file.write(b"abc123def")?;
#[rustfmt::skip]
sd()
.args(&["-p", "abc\\d+", "", file.path().to_str().unwrap()])
sd().args(&["-p", "abc\\d+", "", file.path().to_str().unwrap()])
.assert()
.success()
.stdout("def");