Radish alpha
r
Radicle terminal user interface
Radicle
Git (anonymous pull)
Log in to clone via SSH
lib: Make signer context optional
Erik Kundt committed 2 years ago
commit c3f79bbf5508303eb0e101de472322ef695a54bf
parent c0ad27397c99cde96b97e63fb95a0b6a3fa68d85
4 files changed +13 -8
modified bin/commands/issue/suite.rs
@@ -285,7 +285,7 @@ impl App {
        assignees: String,
    ) -> Result<IssueId> {
        let repository = self.context.repository();
-
        let signer = self.context.signer();
+
        let signer = self.context.signer().as_ref().unwrap();

        let labels = cob::parse_labels(labels)?;
        let assignees = cob::parse_assignees(assignees)?;
modified bin/commands/patch.rs
@@ -73,11 +73,11 @@ pub fn run(options: Options, _ctx: impl terminal::Context) -> anyhow::Result<()>
    let (_, id) = radicle::rad::cwd()
        .map_err(|_| anyhow!("this command must be run in the context of a project"))?;

-
    let context = context::Context::new(id)?.with_patches();
-

    match options.op {
        Operation::List => {
-
            log::enable("patch", "list", context.profile())?;
+
            let context = context::Context::new(id)?.with_patches();
+

+
            log::enable(context.profile(), "patch", "list")?;

            let patch_id = Window::default()
                .run(&mut list::App::new(context), 1000 / FPS)?
modified src/context.rs
@@ -40,17 +40,17 @@ pub struct Context {
    repository: Repository,
    issues: Option<Vec<(IssueId, Issue)>>,
    patches: Option<Vec<(PatchId, Patch)>>,
-
    signer: Box<dyn Signer>,
+
    signer: Option<Box<dyn Signer>>,
}

impl Context {
    pub fn new(id: Id) -> Result<Self, anyhow::Error> {
        let profile = profile()?;
-
        let signer = signer(&profile)?;
        let repository = profile.storage.repository(id).unwrap();
        let project = repository.identity_doc()?.project()?;
        let issues = None;
        let patches = None;
+
        let signer = None;

        Ok(Self {
            id,
@@ -75,6 +75,11 @@ impl Context {
        self
    }

+
    pub fn with_signer(mut self) -> Self {
+
        self.signer = signer(&self.profile).ok();
+
        self
+
    }
+

    pub fn profile(&self) -> &Profile {
        &self.profile
    }
@@ -100,7 +105,7 @@ impl Context {
    }

    #[allow(clippy::borrowed_box)]
-
    pub fn signer(&self) -> &Box<dyn Signer> {
+
    pub fn signer(&self) -> &Option<Box<dyn Signer>> {
        &self.signer
    }

modified src/log.rs
@@ -2,7 +2,7 @@ use log::LevelFilter;

use radicle::profile::Profile;

-
pub fn enable(cmd: &str, op: &str, profile: &Profile) -> Result<(), anyhow::Error> {
+
pub fn enable(profile: &Profile, cmd: &str, op: &str) -> Result<(), anyhow::Error> {
    let logfile = format!(
        "{}/rad-tui-{}-{}.log",
        profile.home().path().to_string_lossy(),