///|
let ls_dir_option : @admiral.PositionDef[String] = @admiral.position_string(
"dir",
description="Base directory",
required=false,
)
///|
fn ls_command_def(
run : async (@admiral.Context) -> Unit,
) -> @admiral.CommandDef {
@admiral.CommandDef::CommandDef(
name="ls",
description="List git worktrees with PR status",
positionals=[ls_dir_option],
run=Some(run),
)
}
///|
struct LsOptions {
dir : String
}
///|
fn ls_options(context : @admiral.Context) -> LsOptions raise {
let dir = match context.get_string(ls_dir_option) {
Some(value) => value
None => "."
}
{ dir, }
}
///|
async fn run_ls(context : @admiral.Context) -> Unit {
let options = ls_options(context)
let dir = options.dir
let base = if dir == "." { @env.current_dir().unwrap_or(".") } else { dir }
match fetch_repo_worktrees(base) {
Some(result) => {
println("NAME\tBRANCH\tPR\tGIT\tPATH")
let status_array = collect_worktree_statuses(result.entries, entry => {
fetch_worktree_status(result.slug, entry)
})
for status in status_array {
println(
"\{basename(status.entry.path)}\t\{status.branch}\t\{format_pr(status.pr)}\t\{status.git}\t\{status.entry.path}",
)
}
}
None => println("No git repositories found.")
}
}