Radish alpha
h
rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
Radicle Heartwood Protocol & Stack
Radicle
Git
radicle: Allow to clear issue descriptions
Merged Defelo opened 7 months ago
4 files changed +25 -14 5fea9ac0 0441b048
modified crates/radicle-cli/src/commands/issue.rs
@@ -908,7 +908,7 @@ where

    // Editing via the editor.
    let Some((title, description)) = term::issue::get_title_description(
-
        title.and(Title::new(issue.title()).ok()),
+
        title.or_else(|| Title::new(issue.title()).ok()),
        Some(description.unwrap_or(issue.description().to_owned())),
    )?
    else {
modified crates/radicle-cli/src/terminal/patch.rs
@@ -83,18 +83,19 @@ impl Message {
            placeholder.push_str(title.as_ref());
            placeholder.push('\n');
        }
-
        if let Some(description) = description {
+
        if let Some(description) = description
+
            .as_deref()
+
            .map(str::trim)
+
            .filter(|description| !description.is_empty())
+
        {
            placeholder.push('\n');
-
            placeholder.push_str(description.trim());
+
            placeholder.push_str(description);
            placeholder.push('\n');
        }
        placeholder.push_str(help);

        let output = Self::Edit.get(&placeholder)?;
-
        let (title, description) = match output.split_once("\n\n") {
-
            Some((x, y)) => (x, y),
-
            None => (output.as_str(), ""),
-
        };
+
        let (title, description) = output.split_once("\n\n").unwrap_or((output.as_str(), ""));

        let Ok(title) = Title::new(title) else {
            return Ok(None);
modified crates/radicle/src/cob/common.rs
@@ -43,7 +43,7 @@ impl Deref for Timestamp {
    }
}

-
#[derive(Error, Debug)]
+
#[derive(Error, Debug, PartialEq, Eq)]
pub enum TitleError {
    #[error("empty title")]
    EmptyTitle,
@@ -70,11 +70,14 @@ impl Title {
    /// characters
    pub fn new(title: &str) -> Result<Self, TitleError> {
        if title.contains('\n') || title.contains('\r') {
-
            Err(TitleError::InvalidTitle)
-
        } else if title.is_empty() {
+
            return Err(TitleError::InvalidTitle);
+
        }
+

+
        let title = title.trim();
+
        if title.is_empty() {
            Err(TitleError::EmptyTitle)
        } else {
-
            Ok(Self(title.trim().to_string()))
+
            Ok(Self(title.into()))
        }
    }
}
@@ -494,6 +497,16 @@ mod test {
    use super::*;

    #[test]
+
    fn test_title() {
+
        assert_eq!(Title::new(""), Err(TitleError::EmptyTitle));
+
        assert_eq!(Title::new(" "), Err(TitleError::EmptyTitle));
+
        assert_eq!(Title::new("\t"), Err(TitleError::EmptyTitle));
+
        assert_eq!(Title::new("foo\nbar"), Err(TitleError::InvalidTitle));
+
        assert_eq!(Title::new("foobar\n"), Err(TitleError::InvalidTitle));
+
        assert_eq!(Title::new(" valid title ").unwrap().0, "valid title");
+
    }
+

+
    #[test]
    fn test_color() {
        let c = Color::from_str("#ffccaa").unwrap();
        assert_eq!(c.to_string(), "#ffccaa".to_owned());
modified crates/radicle/src/cob/thread.rs
@@ -532,9 +532,6 @@ pub fn edit<L>(
    body: String,
    embeds: Vec<Embed<Uri>>,
) -> Result<(), Error> {
-
    if body.is_empty() {
-
        return Err(Error::Edit(id));
-
    }
    debug_assert!(!thread.timeline.contains(&id));
    thread.timeline.push(id);