mirror of
https://git.alemi.dev/tci.git
synced 2024-11-23 08:34:51 +01:00
fix: post-update receives refs from argv
This commit is contained in:
parent
950c0aff74
commit
f93e4ec43c
2 changed files with 14 additions and 43 deletions
38
src/git.rs
38
src/git.rs
|
@ -3,14 +3,15 @@ pub struct TciRepo {
|
|||
pub name: String,
|
||||
pub path: std::path::PathBuf,
|
||||
pub cfg: git2::Config,
|
||||
pub updates: Vec<RefUpdate>,
|
||||
pub refs: Vec<String>,
|
||||
}
|
||||
|
||||
impl TciRepo {
|
||||
pub fn new(updates_raw: &str) -> crate::error::TciResult<Self> {
|
||||
pub fn new() -> crate::error::TciResult<Self> {
|
||||
let home = std::env::var("HOME")
|
||||
.unwrap_or_default();
|
||||
|
||||
|
||||
let path = match std::env::var("GIT_DIR") {
|
||||
Ok(p) => std::path::PathBuf::from(&p),
|
||||
Err(_) => std::env::current_dir()?,
|
||||
|
@ -26,35 +27,14 @@ impl TciRepo {
|
|||
name.remove(name.chars().count());
|
||||
}
|
||||
|
||||
let refs = std::env::args().skip(1).collect();
|
||||
|
||||
let cfg = git2::Config::open(&path.join("config"))?;
|
||||
|
||||
let updates : Vec<RefUpdate> = updates_raw.split('\n')
|
||||
.filter_map(|l| {
|
||||
let split : Vec<&str> = l.split(' ').collect();
|
||||
Some(RefUpdate {
|
||||
from: (*split.get(0)?).to_string(),
|
||||
to: (*split.get(1)?).to_string(),
|
||||
branch: (*split.get(2)?).to_string(),
|
||||
})
|
||||
})
|
||||
.collect();
|
||||
Ok(TciRepo { name, path, cfg, refs })
|
||||
}
|
||||
|
||||
Ok(TciRepo { name, path, cfg, updates })
|
||||
}
|
||||
}
|
||||
|
||||
pub struct RefUpdate {
|
||||
pub from: String,
|
||||
pub to: String,
|
||||
pub branch: String,
|
||||
}
|
||||
|
||||
pub trait RefUpdateVecHelper {
|
||||
fn contains_branch(&self, branch: &str) -> bool;
|
||||
}
|
||||
|
||||
impl RefUpdateVecHelper for Vec<RefUpdate> {
|
||||
fn contains_branch(&self, branch: &str) -> bool {
|
||||
self.iter().any(|rf| rf.branch == branch)
|
||||
pub fn updated(&self, search: &str) -> bool {
|
||||
self.refs.iter().any(|r| r.ends_with(search))
|
||||
}
|
||||
}
|
||||
|
|
19
src/tci.rs
19
src/tci.rs
|
@ -1,6 +1,4 @@
|
|||
use std::io::Read;
|
||||
|
||||
use crate::{cfg::TciConfig, error::{TciErr, TciResult}, git::{RefUpdateVecHelper, TciRepo}};
|
||||
use crate::{cfg::TciConfig, error::{TciErr, TciResult}, git::TciRepo};
|
||||
|
||||
pub struct Tci {
|
||||
cfg: TciConfig,
|
||||
|
@ -16,15 +14,7 @@ impl Tci {
|
|||
TciConfig::default()
|
||||
});
|
||||
|
||||
// check which branches are being updated
|
||||
let mut stdin = String::new();
|
||||
std::io::stdin().read_to_string(&mut stdin)
|
||||
.unwrap_or_else(|e| {
|
||||
eprintln!("[!] could not read refs from stdin: {e}");
|
||||
0
|
||||
});
|
||||
|
||||
let repo = TciRepo::new(&stdin)?;
|
||||
let repo = TciRepo::new()?;
|
||||
|
||||
Ok(Tci{cfg, repo})
|
||||
}
|
||||
|
@ -35,10 +25,11 @@ impl Tci {
|
|||
return false; // we are in whitelist mode and this repo is not whitelisted
|
||||
}
|
||||
|
||||
|
||||
match self.cfg.branch.as_deref() {
|
||||
None => self.repo.updates.contains_branch("tci"),
|
||||
None => self.repo.updated("tci"),
|
||||
Some("") => true,
|
||||
Some(b) => self.repo.updates.contains_branch(b),
|
||||
Some(b) => self.repo.updated(b),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue