aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/repo/git/checkout.rs25
-rw-r--r--src/update/mod.rs7
2 files changed, 29 insertions, 3 deletions
diff --git a/src/repo/git/checkout.rs b/src/repo/git/checkout.rs
index d4a9ced..44879a6 100644
--- a/src/repo/git/checkout.rs
+++ b/src/repo/git/checkout.rs
@@ -1,6 +1,7 @@
use super::{Repo, RepoError};
use anyhow::Context;
+use gix::bstr::ByteSlice;
use gix::{
clone::checkout::main_worktree::ProgressId, interrupt::IS_INTERRUPTED, progress, remote, Id,
Progress,
@@ -32,6 +33,13 @@ impl Repo {
.context("index from tree")?;
let mut index = File::from_state(index, repo.index_path());
+ let status = repo
+ .status(gix::progress::Discard)
+ .unwrap()
+ .index(index.clone().into())
+ .into_iter([])
+ .unwrap();
+
let mut files =
progress.add_child_with_id("checkout".to_string(), ProgressId::CheckoutFiles.into());
let mut bytes =
@@ -65,6 +73,23 @@ impl Repo {
.write(Default::default())
.context("checkout: write index")?;
+ status
+ .filter_map(|item| item.ok())
+ .filter_map(|item| match item {
+ gix::status::Item::IndexWorktree(_) => None,
+ gix::status::Item::TreeIndex(i) => Some(i),
+ })
+ .for_each(|change| match change {
+ gix::diff::index::ChangeRef::Deletion { location, .. }
+ | gix::diff::index::ChangeRef::Rewrite { location, .. } => {
+ let mut path = std::path::PathBuf::from(workdir);
+ path.push(location.as_bstr().to_str().unwrap());
+ debug!("removing deleted or renamed file: {:?}", path);
+ std::fs::remove_file(path).unwrap()
+ }
+ _ => (),
+ });
+
Ok(())
}
}
diff --git a/src/update/mod.rs b/src/update/mod.rs
index e3cd36a..e5e9f4c 100644
--- a/src/update/mod.rs
+++ b/src/update/mod.rs
@@ -46,13 +46,14 @@ impl Repo {
let _fetched = self.fetch()?;
let (remote, head) = self.default_remote_head()?;
debug!("default remote and head: {:?} {:?}", remote, head);
- // TODO do not update if there are unpushed commits
- self.update_default_branch_ref(&remote, head)?;
- debug!("updated default branch reference");
// TODO check out only if the default branch is currently checked out
self.checkout(&remote, head, &mut progress)?;
debug!("finished checkout");
+ // TODO do not update if there are unpushed commits
+ self.update_default_branch_ref(&remote, head)?;
+ debug!("updated default branch reference");
+
// let merged = repo.branches(Some(BranchType::Local))?
// .filter_map(|x| x.ok())
// .try_fold(false, |mut merged, (mut branch, _)| {
td> 2025-11-15add git shell scriptsMax Audron-0/+45 2025-11-15add readmeMax Audron-1/+38 2025-11-14fixup vapor.systems cgitMax Audron-4/+6 2025-11-14move git hosting to plain git-shell and cgitMax Audron-34/+126 reject modernity, embrace linus 2025-10-26fix slskd stuffMax Audron-22/+67 2025-10-23uhMax Audron-9/+31 2025-10-22deploy soulseek and fix tlmp VPNMax Audron-47/+1744 2025-10-21add slskdMax Audron-1/+124 2025-10-10update nixpkgs-unstableMax Audron-3/+3 2025-10-10setup mailserverMax Audron-27/+213 2025-09-20replace dns bgp anouncementMax Audron-2/+2 2025-09-15update flaresolverrMax Audron-1/+1 2025-09-07add audron windows wg keyMax Audron-0/+8 2025-09-02switch out vultr dns ipv4 ipMax Audron-1/+5 2025-08-11disable homepage trackersMax Audron-3/+3 2025-08-11add mail serverMax Audron-1/+245 2025-08-05add prometheus alerting rulesMax Audron-38/+144 2025-08-01add homepage dashboardMax Audron-3/+284 2025-08-01disable not used gameserversMax Audron-1/+2 2025-08-01add minecraft prometheus exporterMax Audron-3/+67 2025-08-01more monitoring & scrape config shortcutsMax Audron-68/+63 2025-08-01update garage to 2.0Max Audron-6/+10 2025-07-31fix authentik-ldap port bindingsMax Audron-0/+5 2025-07-31update to nixos 25.05Max Audron-113/+65 2025-07-31add more monitoring exporters and scrapersMax Audron-17/+57 2025-07-30try to run authentik nativelyMax Audron-26/+303 2025-07-30more metricsMax Audron-1/+41 2025-07-30enable firewallsMax Audron-1/+39