blob: ac2065a9b3b6f6a1e8471f213aa7d702aee1ee9e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
use crate::input;
use crate::backup::backup;
use crate::KhResult;
use crate::khline::KhLine;
use crate::utils::stdioutils;
use std::path::PathBuf;
use std::fs::remove_file;
pub fn do_delete() -> KhResult<()> {
info!("do_delete");
let cursor_khline = input::default_input_khline()?;
delete_file(cursor_khline)
}
fn delete_file(khline: KhLine) -> KhResult<()> {
if ask_really_delete(&khline.path) {
let backup_path = backup(&khline).unwrap();
info!("Backup written to {}", backup_path.display());
remove_file(khline.path.clone())?;
info!("deleted {:#?}", khline.get_normalized_path());
}
Ok(())
}
fn ask_really_delete(path: &PathBuf) -> bool {
if cfg!(test) { return true };
println!("Really delete {:#?}? y/n:", path);
match stdioutils::read_single_char_from_stdin().unwrap() {
'y' => true,
_ => false
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::testutils::*;
use assert_fs::prelude::*;
use predicates::prelude::*;
#[test]
fn test_do_delete_cursor() {
let testdir = prepare_testdir("testdir_with_cursor");
do_delete().unwrap();
let predicate = predicate::path::missing();
testdir.child(".khaleesi/cal/twodaysacrossbuckets").assert(predicate);
}
#[test]
#[should_panic]
fn test_do_delete_no_cursor() {
let _testdir = prepare_testdir("testdir");
do_delete().unwrap();
}
}
|