tail: fix notify usage for new version

This commit is contained in:
Niyaz Nigmatullin 2022-08-15 18:11:46 +03:00
parent ade3b7540c
commit 0e96cfa14b

View file

@ -853,21 +853,20 @@ fn start_watcher_thread(settings: &mut Settings) -> Result<WatcherRx, Box<(dyn U
*/ */
let watcher: Box<dyn Watcher>; let watcher: Box<dyn Watcher>;
let watcher_config = notify::poll::PollWatcherConfig { let watcher_config = notify::Config::default()
poll_interval: settings.sleep_sec, .with_poll_interval(settings.sleep_sec)
/* /*
NOTE: By enabling compare_contents, performance will be significantly impacted NOTE: By enabling compare_contents, performance will be significantly impacted
as all files will need to be read and hashed at each `poll_interval`. as all files will need to be read and hashed at each `poll_interval`.
However, this is necessary to pass: "gnu/tests/tail-2/F-vs-rename.sh" However, this is necessary to pass: "gnu/tests/tail-2/F-vs-rename.sh"
*/ */
compare_contents: true, .with_compare_contents(true);
};
if settings.use_polling || RecommendedWatcher::kind() == WatcherKind::PollWatcher { if settings.use_polling || RecommendedWatcher::kind() == WatcherKind::PollWatcher {
settings.use_polling = true; // We have to use polling because there's no supported backend settings.use_polling = true; // We have to use polling because there's no supported backend
watcher = Box::new(notify::PollWatcher::with_config(tx, watcher_config).unwrap()); watcher = Box::new(notify::PollWatcher::new(tx, watcher_config).unwrap());
} else { } else {
let tx_clone = tx.clone(); let tx_clone = tx.clone();
match notify::RecommendedWatcher::new(tx) { match notify::RecommendedWatcher::new(tx, notify::Config::default()) {
Ok(w) => watcher = Box::new(w), Ok(w) => watcher = Box::new(w),
Err(e) if e.to_string().starts_with("Too many open files") => { Err(e) if e.to_string().starts_with("Too many open files") => {
/* /*
@ -882,8 +881,7 @@ fn start_watcher_thread(settings: &mut Settings) -> Result<WatcherRx, Box<(dyn U
); );
set_exit_code(1); set_exit_code(1);
settings.use_polling = true; settings.use_polling = true;
watcher = watcher = Box::new(notify::PollWatcher::new(tx_clone, watcher_config).unwrap());
Box::new(notify::PollWatcher::with_config(tx_clone, watcher_config).unwrap());
} }
Err(e) => return Err(USimpleError::new(1, e.to_string())), Err(e) => return Err(USimpleError::new(1, e.to_string())),
}; };