aboutsummaryrefslogtreecommitdiff
path: root/src/state.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/state.rs')
-rw-r--r--src/state.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/state.rs b/src/state.rs
new file mode 100644
index 0000000..1a88929
--- /dev/null
+++ b/src/state.rs
@@ -0,0 +1,24 @@
+use std::io;
+use std::path::Path;
+
+use async_std::prelude::*;
+use async_std::fs::read_dir;
+
+use git2::Repository;
+
+pub struct State {
+ pub data: Vec<Repository>,
+}
+
+impl State {
+ pub async fn discover(root: impl AsRef<Path>) -> io::Result<Self> {
+ let root = root.as_ref();
+ let dir = read_dir(root).await?;
+ let data = dir
+ .filter_map(|subdir| {
+ subdir.ok().and_then(|subdir| Repository::open_bare(&subdir.path()).ok())
+ })
+ .collect().await;
+ Ok(Self { data })
+ }
+}