Add fs event metadata to event

This commit is contained in:
Félix Saparelli 2021-09-03 08:14:04 +12:00
parent 07f5e445f6
commit 9c8d4c1a1b
No known key found for this signature in database
GPG Key ID: B948C4BAE44FC474
2 changed files with 16 additions and 1 deletions

View File

@ -13,6 +13,8 @@ use std::{
process::ExitStatus,
};
use notify::EventKind;
use crate::signal::Signal;
/// An event, as far as watchexec cares about.
@ -28,6 +30,7 @@ pub struct Event {
#[non_exhaustive]
pub enum Particle {
Path(PathBuf),
FileEventKind(EventKind),
Source(Source),
Process(u32),
Signal(Signal),
@ -69,6 +72,7 @@ impl fmt::Display for Event {
for p in &self.particulars {
match p {
Particle::Path(p) => write!(f, " path={}", p.display())?,
Particle::FileEventKind(kind) => write!(f, " kind={:?}", kind)?,
Particle::Source(s) => write!(f, " source={:?}", s)?,
Particle::Process(p) => write!(f, " process={}", p)?,
Particle::Signal(s) => write!(f, " signal={:?}", s)?,

View File

@ -229,6 +229,7 @@ fn process_event(
let mut particulars = Vec::with_capacity(4);
particulars.push(Particle::Source(Source::Filesystem));
particulars.push(Particle::FileEventKind(nev.kind));
for path in nev.paths {
particulars.push(Particle::Path(dunce::canonicalize(path)?));
@ -238,9 +239,19 @@ fn process_event(
particulars.push(Particle::Process(pid));
}
let mut metadata = HashMap::new();
if let Some(uid) = nev.attrs.info() {
metadata.insert("file-event-info".to_string(), vec![uid.to_string()]);
}
if let Some(src) = nev.attrs.source() {
metadata.insert("notify-backend".to_string(), vec![src.to_string()]);
}
let ev = Event {
particulars,
metadata: HashMap::new(), // TODO
metadata,
};
trace!(event = ?ev, "processed notify event into watchexec event");