add dependency API / fix dependency representation / dependency

management via CLI
This commit is contained in:
sigil-03 2025-07-18 16:20:17 -06:00
parent 04b33eb70f
commit 8319a4f118
2 changed files with 109 additions and 10 deletions

View file

@ -99,6 +99,12 @@ enum Commands {
issue_id: String,
done_time: Option<String>,
},
/// get or add a dependency to the issue
Depend {
issue_id: String,
dependency_id: Option<String>,
},
}
fn handle_command(
@ -510,6 +516,43 @@ fn handle_command(
},
};
}
Commands::Depend {
issue_id,
dependency_id,
} => match dependency_id {
Some(dep_id) => {
let ent_db = entomologist::database::make_issues_database(
issues_database_source,
entomologist::database::IssuesDatabaseAccess::ReadWrite,
)?;
let mut issues = entomologist::issues::Issues::new_from_dir(&ent_db.dir)?;
if issues.issues.contains_key(dep_id) {
if let Some(issue) = issues.issues.get_mut(issue_id) {
issue.add_dependency(dep_id.clone())?;
} else {
Err(anyhow::anyhow!("issue {} not found", issue_id))?;
};
} else {
Err(anyhow::anyhow!("dependency {} not found", dep_id))?;
};
}
None => {
let ent_db = entomologist::database::read_issues_database(issues_database_source)?;
let Some(issue) = ent_db.issues.get(issue_id) else {
Err(anyhow::anyhow!("issue {} not found", issue_id))?
};
println!("DEPENDENCIES:");
if let Some(list) = &issue.dependencies {
for dependency in list {
println!("{}", dependency);
}
} else {
println!("NONE");
}
}
},
}
Ok(())
@ -531,7 +574,7 @@ fn main() -> anyhow::Result<()> {
(Some(_), Some(_)) => {
return Err(anyhow::anyhow!(
"don't specify both `--issues-dir` and `--issues-branch`"
))
));
}
};