From 30873c49692e42d80d680b5b358c51245df2bf29 Mon Sep 17 00:00:00 2001 From: Gabriele Musco Date: Mon, 16 Oct 2023 06:06:44 +0000 Subject: [PATCH] fix: refactored entire git strategy --- src/build_tools/git.rs | 56 +++++++++++++++-------------- src/builders/build_basalt.rs | 14 ++------ src/builders/build_libsurvive.rs | 14 ++------ src/builders/build_monado.rs | 13 ++----- src/builders/build_opencomposite.rs | 14 ++------ src/builders/build_openhmd.rs | 14 ++------ src/builders/build_wivrn.rs | 14 ++------ 7 files changed, 42 insertions(+), 97 deletions(-) diff --git a/src/build_tools/git.rs b/src/build_tools/git.rs index 4593e8e..0762245 100644 --- a/src/build_tools/git.rs +++ b/src/build_tools/git.rs @@ -1,7 +1,4 @@ -use crate::{ - profile::Profile, - ui::job_worker::job::{FuncWorkerOut, WorkerJob}, -}; +use crate::ui::job_worker::job::{FuncWorkerOut, WorkerJob}; use git2::Repository; use std::path::Path; @@ -9,6 +6,7 @@ use std::path::Path; pub struct Git { pub repo: String, pub dir: String, + pub default_branch: String, } impl Git { @@ -72,13 +70,8 @@ impl Git { })) } - pub fn get_pull_jobs(&self) -> Vec { - let mut res = vec![self.cmd(vec!["fetch".into()])]; - if let Some(checkout_j) = self.get_checkout_ref_job() { - res.push(checkout_j); - } - res.push(self.cmd(vec!["merge".into()])); - res + pub fn get_pull_job(&self) -> WorkerJob { + self.cmd(vec!["pull".into()]) } pub fn get_clone_job(&self) -> WorkerJob { @@ -94,26 +87,37 @@ impl Git { ) } - pub fn get_checkout_ref_job(&self) -> Option { - self.get_ref().map(|r| self.cmd(vec!["checkout".into(), r])) + pub fn get_checkout_ref_job(&self) -> WorkerJob { + let gref = self.get_ref().unwrap_or(self.default_branch.clone()); + self.cmd(vec!["checkout".into(), gref]) } - pub fn get_clone_or_not_job(&self) -> Option { + pub fn get_fetch_job(&self) -> WorkerJob { + self.cmd(vec!["fetch".into()]) + } + + pub fn get_merge_job(&self) -> WorkerJob { + self.cmd(vec!["merge".into(), "--ff-only".into()]) + } + + pub fn clone_exists(&self) -> bool { let path_s = format!("{}/.git", self.dir.clone()); - let path = Path::new(&path_s); - if path.is_dir() { - return None; - } - Some(self.get_clone_job()) + Path::new(&path_s).is_dir() } - pub fn get_clone_or_pull_jobs(&self, profile: &Profile) -> Option> { - match self.get_clone_or_not_job() { - Some(j) => Some(vec![j]), - None => match profile.pull_on_build { - true => Some(self.get_pull_jobs().into()), - false => None, - }, + pub fn get_pre_build_jobs(&self, pull_on_build: bool) -> Vec { + let mut jobs = Vec::::new(); + if self.clone_exists() { + jobs.push(self.get_override_remote_url_job()); + jobs.push(self.get_fetch_job()); + jobs.push(self.get_checkout_ref_job()); + if pull_on_build { + jobs.push(self.get_pull_job()); + } + } else { + jobs.push(self.get_clone_job()); + jobs.push(self.get_checkout_ref_job()); } + jobs } } diff --git a/src/builders/build_basalt.rs b/src/builders/build_basalt.rs index 93abb00..c71e814 100644 --- a/src/builders/build_basalt.rs +++ b/src/builders/build_basalt.rs @@ -18,20 +18,10 @@ pub fn get_build_basalt_jobs(profile: &Profile, clean_build: bool) -> VecDeque "https://gitlab.freedesktop.org/mateosss/basalt.git".into(), }, dir: profile.features.basalt.path.as_ref().unwrap().clone(), + default_branch: "main".into(), }; - jobs.push_back(git.get_override_remote_url_job()); - - git.get_clone_or_pull_jobs(profile).map(|j| { - jobs.extend(j); - }); - - git.get_checkout_ref_job().map(|j| { - jobs.push_back(j); - if profile.pull_on_build { - jobs.extend(git.get_pull_jobs()); - } - }); + jobs.extend(git.get_pre_build_jobs(profile.pull_on_build)); let build_dir = format!("{}/build", profile.features.basalt.path.as_ref().unwrap()); let mut cmake_vars: HashMap = HashMap::new(); diff --git a/src/builders/build_libsurvive.rs b/src/builders/build_libsurvive.rs index 2c24f18..4545c99 100644 --- a/src/builders/build_libsurvive.rs +++ b/src/builders/build_libsurvive.rs @@ -18,20 +18,10 @@ pub fn get_build_libsurvive_jobs(profile: &Profile, clean_build: bool) -> VecDeq None => "https://github.com/cntools/libsurvive".into(), }, dir: profile.features.libsurvive.path.as_ref().unwrap().clone(), + default_branch: "master".into(), }; - jobs.push_back(git.get_override_remote_url_job()); - - git.get_clone_or_pull_jobs(profile).map(|j| { - jobs.extend(j); - }); - - git.get_checkout_ref_job().map(|j| { - jobs.push_back(j); - if profile.pull_on_build { - jobs.extend(git.get_pull_jobs()); - } - }); + jobs.extend(git.get_pre_build_jobs(profile.pull_on_build)); let build_dir = format!( "{}/build", diff --git a/src/builders/build_monado.rs b/src/builders/build_monado.rs index 58e09f5..89cb9dd 100644 --- a/src/builders/build_monado.rs +++ b/src/builders/build_monado.rs @@ -22,19 +22,10 @@ pub fn get_build_monado_jobs( None => "https://gitlab.freedesktop.org/monado/monado".into(), }, dir: profile.xrservice_path.clone(), + default_branch: "main".into(), }; - jobs.push_back(git.get_override_remote_url_job()); - git.get_clone_or_pull_jobs(profile).map(|j| { - jobs.extend(j); - }); - - git.get_checkout_ref_job().map(|j| { - jobs.push_back(j); - if profile.pull_on_build { - jobs.extend(git.get_pull_jobs()); - } - }); + jobs.extend(git.get_pre_build_jobs(profile.pull_on_build)); let build_dir = format!("{}/build", profile.xrservice_path); let mut env: HashMap = HashMap::new(); diff --git a/src/builders/build_opencomposite.rs b/src/builders/build_opencomposite.rs index be000df..c75963f 100644 --- a/src/builders/build_opencomposite.rs +++ b/src/builders/build_opencomposite.rs @@ -18,20 +18,10 @@ pub fn get_build_opencomposite_jobs(profile: &Profile, clean_build: bool) -> Vec None => "https://gitlab.com/znixian/OpenOVR.git".into(), }, dir: profile.opencomposite_path.clone(), + default_branch: "openxr".into(), }; - jobs.push_back(git.get_override_remote_url_job()); - - git.get_clone_or_pull_jobs(profile).map(|j| { - jobs.extend(j); - }); - - git.get_checkout_ref_job().map(|j| { - jobs.push_back(j); - if profile.pull_on_build { - jobs.extend(git.get_pull_jobs()); - } - }); + jobs.extend(git.get_pre_build_jobs(profile.pull_on_build)); let build_dir = format!("{}/build", profile.opencomposite_path); let mut cmake_vars: HashMap = HashMap::new(); diff --git a/src/builders/build_openhmd.rs b/src/builders/build_openhmd.rs index e198aa2..10ee072 100644 --- a/src/builders/build_openhmd.rs +++ b/src/builders/build_openhmd.rs @@ -18,20 +18,10 @@ pub fn get_build_openhmd_jobs(profile: &Profile, clean_build: bool) -> VecDeque< None => "https://github.com/OpenHMD/OpenHMD".into(), }, dir: profile.features.openhmd.path.as_ref().unwrap().clone(), + default_branch: "master".into(), }; - jobs.push_back(git.get_override_remote_url_job()); - - git.get_clone_or_pull_jobs(profile).map(|j| { - jobs.extend(j); - }); - - git.get_checkout_ref_job().map(|j| { - jobs.push_back(j); - if profile.pull_on_build { - jobs.extend(git.get_pull_jobs()); - } - }); + jobs.extend(git.get_pre_build_jobs(profile.pull_on_build)); let build_dir = format!("{}/build", profile.features.openhmd.path.as_ref().unwrap()); let mut cmake_vars: HashMap = HashMap::new(); diff --git a/src/builders/build_wivrn.rs b/src/builders/build_wivrn.rs index f626646..abc55b1 100644 --- a/src/builders/build_wivrn.rs +++ b/src/builders/build_wivrn.rs @@ -22,20 +22,10 @@ pub fn get_build_wivrn_jobs( None => "https://github.com/Meumeu/WiVRn".into(), }, dir: profile.xrservice_path.clone(), + default_branch: "master".into(), }; - jobs.push_back(git.get_override_remote_url_job()); - - git.get_clone_or_pull_jobs(profile).map(|j| { - jobs.extend(j); - }); - - git.get_checkout_ref_job().map(|j| { - jobs.push_back(j); - if profile.pull_on_build { - jobs.extend(git.get_pull_jobs()); - } - }); + jobs.extend(git.get_pre_build_jobs(profile.pull_on_build)); let build_dir = format!("{}/build", profile.xrservice_path); let mut cmake_vars: HashMap = HashMap::new();