| |
id_file: Option<PathBuf>,
|
| |
}
|
| |
|
| - |
impl TriggerCmd {
|
| - |
fn lookup_nid(&self) -> Result<NodeId, CibToolError> {
|
| - |
let profile = Profile::load().map_err(CibToolError::Profile)?;
|
| - |
Ok(*profile.id())
|
| - |
}
|
| - |
|
| - |
fn lookup_rid(&self, wanted: &str) -> Result<RepoId, CibToolError> {
|
| - |
let profile = Profile::load().map_err(CibToolError::Profile)?;
|
| - |
let storage =
|
| - |
Storage::open(profile.storage(), profile.info()).map_err(CibToolError::Storage)?;
|
| - |
|
| - |
let mut rid = None;
|
| - |
let repo_infos = storage.repositories().map_err(CibToolError::Repositories)?;
|
| - |
for ri in repo_infos {
|
| - |
let project = ri
|
| - |
.doc
|
| - |
.project()
|
| - |
.map_err(|e| CibToolError::Project(ri.rid, e))?;
|
| - |
|
| - |
if project.name() == wanted {
|
| - |
if rid.is_some() {
|
| - |
return Err(CibToolError::DuplicateRepositories(wanted.into()));
|
| - |
}
|
| - |
rid = Some(ri.rid);
|
| - |
}
|
| - |
}
|
| - |
|
| - |
if let Some(rid) = rid {
|
| - |
Ok(rid)
|
| - |
} else {
|
| - |
Err(CibToolError::NotFound(wanted.into()))
|
| - |
}
|
| - |
}
|
| - |
|
| - |
fn lookup_commit(&self, rid: RepoId, gitref: &str) -> Result<Oid, CibToolError> {
|
| - |
let profile = Profile::load().map_err(CibToolError::Profile)?;
|
| - |
let storage =
|
| - |
Storage::open(profile.storage(), profile.info()).map_err(CibToolError::Storage)?;
|
| - |
let repo = storage
|
| - |
.repository(rid)
|
| - |
.map_err(|e| CibToolError::RepoOpen(rid, e))?;
|
| - |
let object = repo
|
| - |
.backend
|
| - |
.revparse_single(gitref)
|
| - |
.map_err(|e| CibToolError::RevParse(gitref.into(), e))?;
|
| - |
|
| - |
Ok(object.id().into())
|
| - |
}
|
| - |
}
|
| - |
|
| |
impl Leaf for TriggerCmd {
|
| |
fn run(&self, args: &Args) -> Result<(), CibToolError> {
|
| - |
let rid = if let Ok(rid) = RepoId::from_urn(&self.repo) {
|
| - |
rid
|
| - |
} else {
|
| - |
self.lookup_rid(&self.repo)?
|
| - |
};
|
| - |
|
| - |
let oid = if let Ok(rid) = Oid::from_str(&self.commit) {
|
| - |
rid
|
| - |
} else {
|
| - |
self.lookup_commit(rid, &self.commit)?
|
| - |
};
|
| + |
let profile = util::load_profile()?;
|
| + |
let nid = util::lookup_nid(&profile)?;
|
| + |
let rid = util::rid_from_cli_arg(&profile, &self.repo)?;
|
| + |
let oid = util::oid_from_cli_arg(&profile, rid, &self.commit)?;
|
| |
|
| - |
let name = format!(
|
| - |
"refs/namespaces/{}/refs/heads/{}",
|
| - |
self.lookup_nid()?,
|
| - |
self.name.as_str()
|
| - |
);
|
| + |
let base = util::lookup_commit(&profile, rid, &format!("{oid}^")).unwrap_or(oid);
|
| + |
let name = format!("refs/namespaces/{nid}/refs/heads/{}", self.name.as_str());
|
| |
let name =
|
| |
RefString::try_from(name.clone()).map_err(|e| CibToolError::RefString(name, e))?;
|
| - |
|
| - |
let base = self.lookup_commit(rid, &format!("{oid}^")).unwrap_or(oid);
|
| - |
|
| |
let event = BrokerEvent::new(&rid, &name, &oid, Some(base));
|
| |
|
| |
let db = args.open_db()?;
|