fix: override remote url if it changes on pull

This commit is contained in:
Gabriele Musco 2023-08-16 20:25:41 +00:00
commit 084c56ec2b
3 changed files with 86 additions and 2 deletions

68
Cargo.lock generated
View file

@ -139,6 +139,9 @@ name = "cc"
version = "1.0.79" version = "1.0.79"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
dependencies = [
"jobserver",
]
[[package]] [[package]]
name = "cfg-expr" name = "cfg-expr"
@ -497,6 +500,21 @@ dependencies = [
"winapi", "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]] [[package]]
name = "glib" name = "glib"
version = "0.17.10" version = "0.17.10"
@ -843,6 +861,15 @@ version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a" checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a"
[[package]]
name = "jobserver"
version = "0.1.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
dependencies = [
"libc",
]
[[package]] [[package]]
name = "js-sys" name = "js-sys"
version = "0.3.64" version = "0.3.64"
@ -897,6 +924,34 @@ version = "0.2.147"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" 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]] [[package]]
name = "libusb" name = "libusb"
version = "0.3.0" version = "0.3.0"
@ -918,6 +973,18 @@ dependencies = [
"pkg-config", "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]] [[package]]
name = "linux-raw-sys" name = "linux-raw-sys"
version = "0.3.8" version = "0.3.8"
@ -1471,6 +1538,7 @@ version = "0.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"gettext-rs", "gettext-rs",
"git2",
"gtk4", "gtk4",
"libusb", "libusb",
"nix", "nix",

View file

@ -10,6 +10,7 @@ anyhow = "1.0.71"
gettext-rs = { version = "0.7.0", features = [ gettext-rs = { version = "0.7.0", features = [
"gettext-system" "gettext-system"
] } ] }
git2 = "0.17.2"
gtk4 = { version = "0.6.6", features = [ gtk4 = { version = "0.6.6", features = [
"v4_10", "v4_10",
] } ] }

View file

@ -1,6 +1,6 @@
use std::path::Path;
use crate::{profile::Profile, runner::Runner}; use crate::{profile::Profile, runner::Runner};
use git2::Repository;
use std::path::Path;
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct Git { 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", &current_remote_url)?;
}
}
Ok(())
}
pub fn get_pull_runner(&self) -> Runner { 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( Runner::new(
None, None,
"git".into(), "git".into(),