From 1180f0b3c3157b6fd8eb7bf08a255a114e961e5f Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Wed, 31 Jul 2024 17:14:25 +0100 Subject: fix(remote): updating `push` state event ensure refs are included in state event use `HashMap` to improve `RepoState` struct --- src/repo_state.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src/repo_state.rs') diff --git a/src/repo_state.rs b/src/repo_state.rs index 0c1aa30..a5cebab 100644 --- a/src/repo_state.rs +++ b/src/repo_state.rs @@ -1,9 +1,11 @@ +use std::collections::HashMap; + use anyhow::{Context, Result}; use git2::Oid; pub struct RepoState { pub identifier: String, - pub state: Vec<(String, String)>, + pub state: HashMap, pub event: nostr::Event, } @@ -11,7 +13,7 @@ impl RepoState { pub fn try_from(mut state_events: Vec) -> Result { state_events.sort_by_key(|e| e.created_at); let event = state_events.first().context("no state events")?; - let mut state = vec![]; + let mut state = HashMap::new(); for tag in &event.tags { if let Some(name) = tag.as_vec().first() { if ["refs/heads/", "refs/tags", "HEAD"] @@ -19,8 +21,8 @@ impl RepoState { .any(|s| name.starts_with(*s)) { if let Some(value) = tag.as_vec().get(1) { - if Oid::from_str(value).is_ok() { - state.push((name.to_owned(), value.to_owned())); + if Oid::from_str(value).is_ok() || value.contains("ref: refs/") { + state.insert(name.to_owned(), value.to_owned()); } } } -- cgit v1.2.3