diff --git a/Cargo.lock b/Cargo.lock index 7a0dc62..1fcddde 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -139,6 +139,9 @@ name = "cc" version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +dependencies = [ + "jobserver", +] [[package]] name = "cfg-expr" @@ -497,6 +500,21 @@ dependencies = [ "winapi", ] +[[package]] +name = "git2" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b989d6a7ca95a362cf2cfc5ad688b3a467be1f87e480b8dad07fee8c79b0044" +dependencies = [ + "bitflags", + "libc", + "libgit2-sys", + "log", + "openssl-probe", + "openssl-sys", + "url", +] + [[package]] name = "glib" version = "0.17.10" @@ -843,6 +861,15 @@ version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a" +[[package]] +name = "jobserver" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +dependencies = [ + "libc", +] + [[package]] name = "js-sys" version = "0.3.64" @@ -897,6 +924,34 @@ version = "0.2.147" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +[[package]] +name = "libgit2-sys" +version = "0.15.2+1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a80df2e11fb4a61f4ba2ab42dbe7f74468da143f1a75c74e11dee7c813f694fa" +dependencies = [ + "cc", + "libc", + "libssh2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", +] + +[[package]] +name = "libssh2-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", +] + [[package]] name = "libusb" version = "0.3.0" @@ -918,6 +973,18 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "libz-sys" +version = "1.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "linux-raw-sys" version = "0.3.8" @@ -1471,6 +1538,7 @@ version = "0.1.0" dependencies = [ "anyhow", "gettext-rs", + "git2", "gtk4", "libusb", "nix", diff --git a/Cargo.toml b/Cargo.toml index 910200d..ad18ef1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ anyhow = "1.0.71" gettext-rs = { version = "0.7.0", features = [ "gettext-system" ] } +git2 = "0.17.2" gtk4 = { version = "0.6.6", features = [ "v4_10", ] } diff --git a/src/build_tools/git.rs b/src/build_tools/git.rs index cbc0844..75624f0 100644 --- a/src/build_tools/git.rs +++ b/src/build_tools/git.rs @@ -1,6 +1,6 @@ -use std::path::Path; - use crate::{profile::Profile, runner::Runner}; +use git2::Repository; +use std::path::Path; #[derive(Debug, Clone)] pub struct Git { @@ -36,7 +36,22 @@ impl Git { ) } + fn override_remote_url(&self) -> Result<(), git2::Error> { + if let Ok(repo) = Repository::open(&self.dir) { + let current_remote_url = self.get_repo(); + let remote = repo + .find_remote("origin")?; + if remote.url().unwrap_or("") != current_remote_url { + repo.remote_set_url("origin", ¤t_remote_url)?; + } + } + Ok(()) + } + pub fn get_pull_runner(&self) -> Runner { + if self.override_remote_url().is_err() { + println!("Warning: failed to override git repo remote URL!") + } Runner::new( None, "git".into(),