Radish alpha
r
Radicle CI broker
Radicle
Git (anonymous pull)
Log in to clone via SSH
refactor(src/bin/cibtoolcmd/trigger.rs): use new util module
Lars Wirzenius committed 1 year ago
commit 05ab47af7416aefa2213efa66741054fc16cc636
parent 0c6656f701afbfa92d4db35743d1788275601bdd
1 file changed +6 -69
modified src/bin/cibtoolcmd/trigger.rs
@@ -24,80 +24,17 @@ pub struct TriggerCmd {
    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()?;