SEJXDXPWV6XND6XIH5XZ3IK4CZDF3EJKLEXNIKOMPNHO5UKUVY3AC 6YZAVBWU6E5FYOI5JGEIPXGZLIKAW6LS2AOFIQWEE5DMOPPCD5PQC WT3GA27PQ2AOAIGK65O3Q4DMX4AZDVNULBLRL6GF4QW6QCASUEAAC UB2ITZJSDADVINSQEZ3HA6PVGA7OA6JYFG5GMSO7Y7LOXJC4FI7AC A5YBC77VWH2LXCZJOPZORQJI5ZYABSCHJWVX5HVNWPM5RABXESLQC AXSXZQDGLPSLBYY3WEI5CCJFWFY33HPRVW6QQFL46OKWZH4G4YSAC ZVI4AWERNOTDJ3765HJXRBZT57XPNKVONQ6TGOGNPOL2VN42KMJQC 23SFYK4Q5NKBPJG53PQNPWQH6UOUU2YKJEL7RLXYBRLJOJYV7AWQC WGID4LS4EISIOXB5Y5SOFGEF5PLBJSCPFCETH2CGRTFN3NC4WGJQC ACDXXAX26ZJJFKJDGRC2GOSJY5JHQWCSTP55SYI6D6LH5UIRYUBAC I56UGW7UUKLSR4753EYRGNROZB5PD522REEOGHVAQOZZTSVRUEEQC X6AK4QPXKTGTWIMJ5CIR46CVIXVUXV5WKTP73CNQOIRANQN4MD5QC YYKXNBFL44LLOBABLXBKOF7IFUIGIEL2SYIPLGDH6UOEY5EZZZSQC WAOGSCOJ5A372BZKHEYD2BCDBCENNVLFYW3INKUOOAZMDADDIFIQC EJPSD5XO43DWUBBZGNQMY4TMCAXL5EWCGX3OEHUERQ5GRASGWQLQC AZ5D2LQUSYVWVEP7ISFDSZTMZ65UEHZATILMDQ4TYLCKJH4Q3TIAC PKLUHYE4BGIMJKU6VKGBGSHEB2ZT53OYMTFBYCZYCO4J3RVTRXSAC IN2JREDBRA56UC3H2PGS2DSLCAHGIHLE47JZF33AEID4EIZICDSAC YGZ3VCW4OAJYPI2CYK3MTABNFY7Y2ENSSTFE5ZZ4K6HK57FCU3XQC XQTT6NDF6KRXHUABU45HB2TDSQQXYUF7S66PGMM7TVKE3OFBTVAQC YRGDFHABL6BRX55ZWIBGXX3ZX2R4WUV4BELP7JMW5AZX54P5BBIQC LPSUBGUBMG2QHJJSAWQ35SZIMUR62R6ODPWBS7TSNNXJ5UJCNABQC TMDH7GPVR3J7OEIELEE7RM7KXBA5IMFBCCVJTEGGMLYJZZCOLJ6QC T4UECD3SERZLQMSESSATEHQEPFDIZGMMWY35EPV6JV2WOYMR7JRQC VCNKFNUF7OWVSWC6I5D25KUZ3XZZICZ3LHWVPF2N5ZSP7LQ2JOUQC ManagingRepoMsg::WatchedFileChange(path) => {let is_dir = path.metadata().map(|md| md.is_dir()).unwrap_or(false);if !state.ignore.matched_path_or_any_parents(&path, is_dir).is_ignore()&& let Some(fs_watch) = state.repo_fs_watch.as_mut(){// Refresh repostate.repo_tx_in.send(repo::MsgIn::RefreshChangedAndUntrackedFiles).unwrap();// Start watching it in case it's a new fileif let Err(err) =fs_watch.watch(&path, RecursiveMode::NonRecursive){match &err.kind {// Ignore path not found as this might be triggered on a// watched file that's been removednotify::ErrorKind::PathNotFound => {}notify::ErrorKind::Generic(_)| notify::ErrorKind::Io(_)| notify::ErrorKind::WatchNotFound| notify::ErrorKind::InvalidConfig(_)| notify::ErrorKind::MaxFilesWatch => {let msg = format!("Error setting up file watch for path {}: {err:?}",path.to_string_lossy());error!("{msg}");report::show_err(report, msg)}}}}Task::none()}
// Load `.ignore` filelet (ignore, ignore_err) = Gitignore::new(model.repo_path.join(".ignore"));if let Some(err) = ignore_err {let msg = format!("Error loading .ignore file {err:?}");error!("{msg}");report::show_err(report, msg);}
let is_dir = matches!(event.kind,notify::EventKind::Create(notify::event::CreateKind::Folder,) | notify::EventKind::Remove(notify::event::RemoveKind::Folder,));if event.paths.iter().any(|path| {!ignore.matched_path_or_any_parents(path, is_dir).is_ignore()}) {let _ = fs_watch_tx.send(());}
event.paths.iter().for_each(|path| {let _ = fs_watch_tx.send(path.clone());})
fs_watch.watch(&model.repo_path, RecursiveMode::Recursive).unwrap();
for entry in ignore::WalkBuilder::new(&model.repo_path).standard_filters(false) // disable git related stuff.ignore(true) // use ".ignore" file.build()// ignore errors.flatten(){if let Err(err) =fs_watch.watch(entry.path(), RecursiveMode::NonRecursive){let msg = format!("Error setting up file watch for path {}: {err:?}",entry.path().to_string_lossy());error!("{msg}");report::show_err(report, msg)}}
let watch_task = Task::run(fs_watch_rx, |()| {ManagingRepoMsg::ToRepo(repo::MsgIn::RefreshChangedAndUntrackedFiles)});
let watch_task = Task::run(fs_watch_rx, ManagingRepoMsg::WatchedFileChange);