diff --git a/ci-broker.md b/ci-broker.md index 0ceb7e33..fd797594 100644 --- a/ci-broker.md +++ b/ci-broker.md @@ -434,7 +434,7 @@ when I run cibtool --db ci-broker.db event list then stdout is empty when I run cibtool --db ci-broker.db run list -then stdout has 2 lines containing "xyzzy" +then stdout has 2 lines ~~~ diff --git a/ci-broker.yaml b/ci-broker.yaml index 40755884..055c32c1 100644 --- a/ci-broker.yaml +++ b/ci-broker.yaml @@ -25,6 +25,11 @@ rust: function: stdout_has_one_line +- then: "stdout has {n:uint} lines" + impl: + rust: + function: stdout_has_n_lines + - then: "stdout has {n:uint} lines containing \"{text:text}\"" impl: rust: diff --git a/src/bin/cibtoolcmd/run.rs b/src/bin/cibtoolcmd/run.rs index 39e114d5..a4aebd86 100644 --- a/src/bin/cibtoolcmd/run.rs +++ b/src/bin/cibtoolcmd/run.rs @@ -217,18 +217,14 @@ impl Leaf for ListRuns { fn run(&self, args: &Args) -> Result<(), CibToolError> { let db = args.open_db()?; - let runs = if let Some(wanted) = &self.adapter_run_id { - db.find_runs(wanted)? - } else { - db.get_all_runs()? - }; - if self.json { + let runs = db.get_all_runs()?; println!( "{}", serde_json::to_string_pretty(&runs).map_err(CibToolError::RunToJson)? ); - } else { + } else if let Some(wanted) = &self.adapter_run_id { + let runs = db.find_runs(wanted)?; for run in runs { println!( "{} {}", @@ -238,6 +234,11 @@ impl Leaf for ListRuns { .unwrap_or("unknown".into()) ); } + } else { + let run_ids = db.list_runs()?; + for run_id in run_ids { + println!("{}", run_id); + } } Ok(()) diff --git a/src/subplot.rs b/src/subplot.rs index b834700f..11a392ac 100644 --- a/src/subplot.rs +++ b/src/subplot.rs @@ -395,6 +395,16 @@ fn stdout_has_one_line(runcmd: &Runcmd) { } } +#[step] +#[context(SubplotContext)] +#[context(Runcmd)] +fn stdout_has_n_lines(runcmd: &Runcmd, n: usize) { + let linecount = runcmd.stdout_as_string().lines().count(); + if linecount != n { + throw!(format!("stdout had {linecount} lines, expected {n}")); + } +} + #[step] #[context(SubplotContext)] #[context(Runcmd)]