aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorMax Audron <audron@cocaine.farm>2022-06-07 12:28:18 +0200
committerMaximilian Manz <maximilian.manz@de.clara.net>2022-06-20 11:33:04 +0200
commit7e73ebcad03a5477367763d4a5e9c22f9e9967ca (patch)
tree39e543ec482be2e95c512b45f6dbdbe816dc0992 /src/main.rs
parentfix clippy lints (diff)
process sync and update in parallel
Split the repos up in x batches where x is either decided on based on number of cpu cores available or given by the --jobs argument
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/main.rs b/src/main.rs
index e37427c..8b72a34 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -18,17 +18,23 @@ mod list;
mod sync;
mod update;
+mod batch;
+
#[cfg(test)]
mod tests;
-#[derive(Debug)]
+use once_cell::sync::OnceCell;
+
+static GTREE: OnceCell<GTree> = OnceCell::new();
+static RUNTIME: OnceCell<Runtime> = OnceCell::new();
+
+#[derive(Debug, Clone)]
#[allow(dead_code)]
struct GTree {
figment: figment::Figment,
config: config::Config,
args: config::args::Args,
forge: forge::Forge,
- rt: Runtime,
}
impl GTree {
@@ -44,16 +50,15 @@ impl GTree {
.next()
.context("No Forge configured, please setup a forge")?;
- let rt = Runtime::new()?;
+ RUNTIME.set(Runtime::new()?).unwrap();
- let forge = rt.block_on(forge::Forge::new(forge_config))?;
+ let forge = RUNTIME.get().unwrap().block_on(forge::Forge::new(forge_config))?;
Ok(GTree {
figment,
config,
args,
forge,
- rt
})
}
@@ -74,7 +79,7 @@ impl GTree {
Repos::from_local(forge_t.root(), &scope_t)
});
- let projects = self.rt.block_on(self.forge.projects(&scope))?;
+ let projects = RUNTIME.get().unwrap().block_on(self.forge.projects(&scope))?;
let remote = Repos::from_forge(forge.root(), projects);
let local = handle.join().unwrap();
@@ -108,6 +113,7 @@ fn main() -> Result<()> {
debug!("starting");
let gtree = GTree::new()?;
+ GTREE.set(gtree.clone()).unwrap();
gtree.run()?;