mirror of
https://github.com/gitbutlerapp/gitbutler.git
synced 2025-01-03 06:52:08 +03:00
move debouncer code into its own crate
That way the public API that isn't used doesn't have to be `dead_code`. Also adjust CI to run the tests we have in the debouncer crate. Previously, it might not have run them though.
This commit is contained in:
parent
3723cd279c
commit
184f557897
4
.github/workflows/push.yaml
vendored
4
.github/workflows/push.yaml
vendored
@ -54,7 +54,7 @@ jobs:
|
|||||||
- 'crates/gitbutler-cli/**'
|
- 'crates/gitbutler-cli/**'
|
||||||
gitbutler-watcher:
|
gitbutler-watcher:
|
||||||
- *rust
|
- *rust
|
||||||
- 'crates/gitbutler-cli/**'
|
- 'crates/gitbutler-watcher/**'
|
||||||
|
|
||||||
lint-node:
|
lint-node:
|
||||||
needs: changes
|
needs: changes
|
||||||
@ -228,7 +228,7 @@ jobs:
|
|||||||
- uses: ./.github/actions/init-env-rust
|
- uses: ./.github/actions/init-env-rust
|
||||||
- uses: ./.github/actions/check-crate
|
- uses: ./.github/actions/check-crate
|
||||||
with:
|
with:
|
||||||
crate: gitbutler-watcher
|
crate: gitbutler-notify-debouncer
|
||||||
features: ${{ toJson(matrix.features) }}
|
features: ${{ toJson(matrix.features) }}
|
||||||
action: ${{ matrix.action }}
|
action: ${{ matrix.action }}
|
||||||
|
|
||||||
|
31
Cargo.lock
generated
31
Cargo.lock
generated
@ -2177,6 +2177,24 @@ dependencies = [
|
|||||||
"windows-named-pipe",
|
"windows-named-pipe",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "gitbutler-notify-debouncer"
|
||||||
|
version = "0.0.0"
|
||||||
|
dependencies = [
|
||||||
|
"crossbeam-channel",
|
||||||
|
"deser-hjson",
|
||||||
|
"file-id",
|
||||||
|
"gitbutler-notify-debouncer",
|
||||||
|
"mock_instant",
|
||||||
|
"notify",
|
||||||
|
"parking_lot 0.12.3",
|
||||||
|
"pretty_assertions",
|
||||||
|
"rstest",
|
||||||
|
"serde",
|
||||||
|
"tracing",
|
||||||
|
"walkdir",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gitbutler-tauri"
|
name = "gitbutler-tauri"
|
||||||
version = "0.0.0"
|
version = "0.0.0"
|
||||||
@ -2232,26 +2250,15 @@ version = "0.0.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"backoff",
|
"backoff",
|
||||||
"crossbeam-channel",
|
|
||||||
"deser-hjson",
|
|
||||||
"file-id",
|
|
||||||
"futures",
|
"futures",
|
||||||
"gitbutler-core",
|
"gitbutler-core",
|
||||||
"gitbutler-watcher",
|
"gitbutler-notify-debouncer",
|
||||||
"gix",
|
"gix",
|
||||||
"itertools 0.13.0",
|
|
||||||
"mock_instant",
|
|
||||||
"notify",
|
"notify",
|
||||||
"parking_lot 0.12.3",
|
|
||||||
"pretty_assertions",
|
|
||||||
"rand 0.8.5",
|
|
||||||
"rstest",
|
|
||||||
"serde",
|
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-util",
|
"tokio-util",
|
||||||
"tracing",
|
"tracing",
|
||||||
"walkdir",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -4,6 +4,7 @@ members = [
|
|||||||
"crates/gitbutler-tauri",
|
"crates/gitbutler-tauri",
|
||||||
"crates/gitbutler-git",
|
"crates/gitbutler-git",
|
||||||
"crates/gitbutler-watcher",
|
"crates/gitbutler-watcher",
|
||||||
|
"crates/gitbutler-watcher/vendor/debouncer",
|
||||||
"crates/gitbutler-testsupport",
|
"crates/gitbutler-testsupport",
|
||||||
"crates/gitbutler-cli",
|
"crates/gitbutler-cli",
|
||||||
]
|
]
|
||||||
|
@ -5,11 +5,9 @@ edition = "2021"
|
|||||||
publish = false
|
publish = false
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
|
test = false
|
||||||
doctest = false
|
doctest = false
|
||||||
|
|
||||||
[features]
|
|
||||||
mock_instant = ["dep:mock_instant"]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
gitbutler-core.workspace = true
|
gitbutler-core.workspace = true
|
||||||
thiserror.workspace = true
|
thiserror.workspace = true
|
||||||
@ -22,21 +20,7 @@ gix = { workspace = true, features = ["excludes"] }
|
|||||||
|
|
||||||
backoff = "0.4.0"
|
backoff = "0.4.0"
|
||||||
notify = { version = "6.0.1" }
|
notify = { version = "6.0.1" }
|
||||||
parking_lot = "0.12.3"
|
gitbutler-notify-debouncer.path = "vendor/debouncer"
|
||||||
file-id = "0.2.1"
|
|
||||||
walkdir = "2.2.2"
|
|
||||||
crossbeam-channel = "0.5.13"
|
|
||||||
itertools = "0.13"
|
|
||||||
|
|
||||||
mock_instant = { version = "0.3.2", optional = true }
|
|
||||||
|
|
||||||
[dev-dependencies]
|
|
||||||
gitbutler-watcher = { path = ".", features = ["mock_instant"] }
|
|
||||||
pretty_assertions = "1.3.0"
|
|
||||||
rstest = "0.20"
|
|
||||||
serde = { version = "1.0.203", features = ["derive"] }
|
|
||||||
deser-hjson = "1.1.1"
|
|
||||||
rand = "0.8.5"
|
|
||||||
|
|
||||||
[lints.clippy]
|
[lints.clippy]
|
||||||
all = "deny"
|
all = "deny"
|
||||||
|
@ -2,12 +2,11 @@ use std::collections::HashSet;
|
|||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
use crate::debouncer::Debouncer;
|
use crate::events::InternalEvent;
|
||||||
use crate::debouncer::FileIdMap;
|
|
||||||
use crate::{debouncer::new_debouncer, events::InternalEvent};
|
|
||||||
use anyhow::{anyhow, Context, Result};
|
use anyhow::{anyhow, Context, Result};
|
||||||
use gitbutler_core::ops::OPLOG_FILE_NAME;
|
use gitbutler_core::ops::OPLOG_FILE_NAME;
|
||||||
use gitbutler_core::projects::ProjectId;
|
use gitbutler_core::projects::ProjectId;
|
||||||
|
use gitbutler_notify_debouncer::{new_debouncer, Debouncer, FileIdMap};
|
||||||
use notify::RecommendedWatcher;
|
use notify::RecommendedWatcher;
|
||||||
use notify::Watcher;
|
use notify::Watcher;
|
||||||
use tokio::task;
|
use tokio::task;
|
||||||
|
@ -18,7 +18,6 @@ use tokio::{
|
|||||||
};
|
};
|
||||||
use tokio_util::sync::CancellationToken;
|
use tokio_util::sync::CancellationToken;
|
||||||
|
|
||||||
mod debouncer;
|
|
||||||
mod file_monitor;
|
mod file_monitor;
|
||||||
mod handler;
|
mod handler;
|
||||||
|
|
||||||
|
34
crates/gitbutler-watcher/vendor/debouncer/Cargo.toml
vendored
Normal file
34
crates/gitbutler-watcher/vendor/debouncer/Cargo.toml
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[package]
|
||||||
|
name = "gitbutler-notify-debouncer"
|
||||||
|
version = "0.0.0"
|
||||||
|
edition = "2021"
|
||||||
|
publish = false
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
doctest = false
|
||||||
|
|
||||||
|
[features]
|
||||||
|
mock_instant = ["dep:mock_instant"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
tracing = "0.1.40"
|
||||||
|
|
||||||
|
notify = { version = "6.0.1" }
|
||||||
|
parking_lot = "0.12.3"
|
||||||
|
file-id = "0.2.1"
|
||||||
|
walkdir = "2.2.2"
|
||||||
|
crossbeam-channel = "0.5.13"
|
||||||
|
|
||||||
|
mock_instant = { version = "0.3.2", optional = true }
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
gitbutler-notify-debouncer = { path = ".", features = ["mock_instant"] }
|
||||||
|
pretty_assertions = "1.4.0"
|
||||||
|
rstest = "0.20"
|
||||||
|
serde = { version = "1.0.203", features = ["derive"] }
|
||||||
|
deser-hjson = "1.1.1"
|
||||||
|
|
||||||
|
[lints.clippy]
|
||||||
|
all = "deny"
|
||||||
|
perf = "deny"
|
||||||
|
correctness = "deny"
|
@ -94,7 +94,6 @@ impl FileIdMap {
|
|||||||
/// Remove a path form the cache.
|
/// Remove a path form the cache.
|
||||||
///
|
///
|
||||||
/// If the path was added with `Recursive` mode, all children will also be removed from the cache.
|
/// If the path was added with `Recursive` mode, all children will also be removed from the cache.
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn remove_root(&mut self, path: impl AsRef<Path>) {
|
pub fn remove_root(&mut self, path: impl AsRef<Path>) {
|
||||||
self.roots.retain(|(root, _)| !root.starts_with(&path));
|
self.roots.retain(|(root, _)| !root.starts_with(&path));
|
||||||
|
|
@ -495,7 +495,6 @@ pub struct Debouncer<T: Watcher, C: FileIdCache> {
|
|||||||
impl<T: Watcher, C: FileIdCache> Debouncer<T, C> {
|
impl<T: Watcher, C: FileIdCache> Debouncer<T, C> {
|
||||||
/// Stop the debouncer, waits for the event thread to finish.
|
/// Stop the debouncer, waits for the event thread to finish.
|
||||||
/// May block for the duration of one tick_rate.
|
/// May block for the duration of one tick_rate.
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn stop(mut self) {
|
pub fn stop(mut self) {
|
||||||
self.set_stop();
|
self.set_stop();
|
||||||
if let Some(t) = self.debouncer_thread.take() {
|
if let Some(t) = self.debouncer_thread.take() {
|
||||||
@ -504,7 +503,6 @@ impl<T: Watcher, C: FileIdCache> Debouncer<T, C> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Stop the debouncer, does not wait for the event thread to finish.
|
/// Stop the debouncer, does not wait for the event thread to finish.
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn stop_nonblocking(self) {
|
pub fn stop_nonblocking(self) {
|
||||||
self.set_stop();
|
self.set_stop();
|
||||||
}
|
}
|
@ -166,7 +166,7 @@ fn state(
|
|||||||
|
|
||||||
mod schema;
|
mod schema;
|
||||||
mod utils {
|
mod utils {
|
||||||
use crate::debouncer::FileIdCache;
|
use crate::FileIdCache;
|
||||||
|
|
||||||
use file_id::FileId;
|
use file_id::FileId;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
@ -27,7 +27,7 @@
|
|||||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
||||||
// IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
// IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
// DEALINGS IN THE SOFTWARE.
|
// DEALINGS IN THE SOFTWARE.
|
||||||
use crate::debouncer::{DebounceDataInner, DebouncedEvent};
|
use crate::{DebounceDataInner, DebouncedEvent};
|
||||||
use file_id::FileId;
|
use file_id::FileId;
|
||||||
use mock_instant::Instant;
|
use mock_instant::Instant;
|
||||||
use notify::event::{
|
use notify::event::{
|
||||||
@ -241,7 +241,7 @@ impl State {
|
|||||||
.queues
|
.queues
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|(path, queue)| {
|
.map(|(path, queue)| {
|
||||||
let queue = crate::debouncer::Queue {
|
let queue = crate::Queue {
|
||||||
events: queue
|
events: queue
|
||||||
.events
|
.events
|
||||||
.into_iter()
|
.into_iter()
|
Loading…
Reference in New Issue
Block a user