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
69
70
71
72
73
74
75
76
77
78
79
|
use std::{
env,
fs::{self, read_to_string, OpenOptions},
io::Write,
process::Command,
};
use anyhow::{bail, Result};
use crate::cli::NeorgCommand;
pub fn handle(command: NeorgCommand) -> Result<()> {
match command {
NeorgCommand::Task { id } => {
let project = id.project()?;
let path = dirs::data_local_dir()
.expect("This should exists")
.join("notes")
.join(project.get_neorg_path()?);
fs::create_dir_all(path.parent().expect("This should exist"))?;
{
let contents = read_to_string(&path)?;
if contents.contains(format!("% {}", id.to_uuid()?).as_str()) {
let mut options = OpenOptions::new();
options.append(true).create(true);
let mut file = options.open(&path)?;
file.write_all(format!("* TITLE (% {})", id.to_uuid()?).as_bytes())?;
}
}
let editor = env::var("EDITOR").unwrap_or("nvim".to_owned());
let status = Command::new(editor)
.args([
path.to_str().expect("Should be a utf-8 str"),
"-c",
format!("/% {}", id.to_uuid()?).as_str(),
])
.status()?;
if !status.success() {
bail!("$EDITOR fail with error code: {status}");
}
{
let status = Command::new("git")
.args(["add", "."])
.current_dir(&path)
.status()?;
if !status.success() {
bail!("Git add . failed!");
}
let status = Command::new("git")
.args([
"commit",
"--message",
format!(
"chore({}): Update",
path.parent().expect("Should have a parent").display()
)
.as_str(),
"--no-gpg-sign",
])
.current_dir(&path)
.status()?;
if !status.success() {
bail!("Git commit failed!");
}
}
{
id.annotate("[neorg data]")?;
}
}
}
Ok(())
}
|