Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
Introduce `RepositoryInfo` type
cloudhead committed 2 years ago
commit 9cf20ddef918ee945e978f5311a9a69e94a7fceb
parent 09a284f09cdf2700d6817b8cebc7e11187d2018b
2 files changed +22 -8
modified radicle-cli/src/commands/ls.rs
@@ -1,5 +1,7 @@
use std::ffi::OsString;

+
use radicle::storage::git::RepositoryInfo;
+

use crate::terminal as term;
use crate::terminal::args::{Args, Error, Help};

@@ -70,7 +72,7 @@ pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> {
    let storage = &profile.storage;
    let mut table = term::Table::default();

-
    for (id, head, doc) in storage.repositories()? {
+
    for RepositoryInfo { rid, head, doc } in storage.repositories()? {
        if doc.visibility.is_public() && options.private && !options.public {
            continue;
        }
@@ -82,7 +84,7 @@ pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> {
            Ok(proj) => proj,
            Err(err) => {
                if options.verbose {
-
                    term::warning(&format!("failed to get local project '{id}': {err}"));
+
                    term::warning(&format!("failed to get local project '{rid}': {err}"));
                }
                continue;
            }
@@ -90,7 +92,7 @@ pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> {
        let head = term::format::oid(head).into();
        table.push([
            term::format::bold(proj.name().to_owned()),
-
            term::format::tertiary(id.urn()),
+
            term::format::tertiary(rid.urn()),
            term::format::secondary(head),
            term::format::italic(proj.description().to_owned()),
        ]);
modified radicle/src/storage/git.rs
@@ -37,6 +37,17 @@ pub static CANONICAL_IDENTITY: Lazy<git::Qualified> = Lazy::new(|| {
    )
});

+
/// Basic repository information.
+
#[derive(Debug, Clone, PartialEq, Eq)]
+
pub struct RepositoryInfo<V> {
+
    /// Repository identifier.
+
    pub rid: Id,
+
    /// Head of default branch.
+
    pub head: Oid,
+
    /// Identity document.
+
    pub doc: Doc<V>,
+
}
+

/// A parsed Git reference.
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Ref {
@@ -109,8 +120,8 @@ impl ReadStorage for Storage {

        Ok(repos
            .into_iter()
-
            .filter(|(_, _, doc)| doc.visibility.is_public())
-
            .map(|(rid, _, _)| rid)
+
            .filter(|r| r.doc.visibility.is_public())
+
            .map(|r| r.rid)
            .collect())
    }

@@ -149,7 +160,7 @@ impl Storage {
        self.path.as_path()
    }

-
    pub fn repositories(&self) -> Result<Vec<(Id, Oid, Doc<Unverified>)>, Error> {
+
    pub fn repositories(&self) -> Result<Vec<RepositoryInfo<Unverified>>, Error> {
        let mut repos = Vec::new();

        for result in fs::read_dir(&self.path)? {
@@ -189,13 +200,14 @@ impl Storage {
                    continue;
                }
            };
-
            repos.push((rid, head, doc));
+
            repos.push(RepositoryInfo { rid, head, doc });
        }
        Ok(repos)
    }

    pub fn inspect(&self) -> Result<(), Error> {
-
        for (rid, _, _) in self.repositories()? {
+
        for r in self.repositories()? {
+
            let rid = r.rid;
            let repo = self.repository(rid)?;

            for r in repo.raw().references()? {