summaryrefslogtreecommitdiffstats
path: root/src/commands/db.rs
diff options
context:
space:
mode:
authorMatthias Beyer <matthias.beyer@atos.net>2021-01-11 10:56:38 +0100
committerMatthias Beyer <matthias.beyer@atos.net>2021-01-14 13:29:42 +0100
commitf26bb9494f1fcc4bf307187c47e12c8eb0076f9f (patch)
tree69151d738ebc21810e021ac1e1ad310e2e52394d /src/commands/db.rs
parentf8c6c605f3b34a8aae87a3b6a4c3816f63125fb0 (diff)
Fix: with-pkg includes for-pkg
If a package is submitted, the --with-pkg filter should include it. So: budido build b butido build a where a depends on b. Then: butido db submits --for-pkg b # returns build for b butido db submits --for-pkg a # returns build for a butido db submits --with-pkg a # returns build for a butido db submits --with-pkg b # returns both builds This patch fixes the code to have that behaviour. It also refactors the command implementation to be less noisy. Signed-off-by: Matthias Beyer <matthias.beyer@atos.net>
Diffstat (limited to 'src/commands/db.rs')
-rw-r--r--src/commands/db.rs50
1 files changed, 36 insertions, 14 deletions
diff --git a/src/commands/db.rs b/src/commands/db.rs
index 6a55860..15db23e 100644
--- a/src/commands/db.rs
+++ b/src/commands/db.rs
@@ -223,29 +223,51 @@ fn submits(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> {
let hdrs = mk_header(vec!["id", "time", "uuid"]);
let conn = crate::db::establish_connection(conn_cfg)?;
+ // Helper to map Submit -> Vec<String>
+ let submit_to_vec = |submit: models::Submit| {
+ vec![format!("{}", submit.id), submit.submit_time.to_string(), submit.uuid.to_string()]
+ };
+
+ // Helper to get all submits that were made _for_ a package
+ let submits_for = |pkgname: &str| {
+ schema::submits::table
+ .inner_join(schema::packages::table)
+ .filter(schema::packages::dsl::name.eq(&pkgname))
+ .select(schema::submits::all_columns)
+ .load::<models::Submit>(&conn)
+ };
+
let data = if let Some(pkgname) = matches.value_of("with_pkg").map(String::from) {
- schema::packages::table
- .filter(schema::packages::name.eq(pkgname))
+ // Get all submits which included the package, but were not made _for_ the package
+ let submits_with_pkg = schema::packages::table
+ .filter(schema::packages::name.eq(&pkgname))
.inner_join(schema::jobs::table.inner_join(schema::submits::table))
.select(schema::submits::all_columns)
- .load::<models::Submit>(&conn)?
+ .load::<models::Submit>(&conn)?;
+
+ let submits_for_pkg = submits_for(&pkgname)?;
+
+ submits_with_pkg
+ .into_iter()
+ .chain(submits_for_pkg.into_iter())
+ .map(submit_to_vec)
+ .collect::<Vec<_>>()
} else {
if let Some(pkgname) = matches.value_of("for_pkg") {
- schema::submits::table
- .inner_join(schema::packages::table)
- .filter(schema::packages::dsl::name.eq(pkgname))
- .select(schema::submits::all_columns)
- .load::<models::Submit>(&conn)?
+ // Get all submits _for_ the package
+ submits_for(pkgname)?
+ .into_iter()
+ .map(submit_to_vec)
+ .collect::<Vec<_>>()
} else {
+ // default: Get all submits
schema::submits::table
.load::<models::Submit>(&conn)?
+ .into_iter()
+ .map(submit_to_vec)
+ .collect::<Vec<_>>()
}
- }
- .into_iter()
- .map(|submit| {
- vec![format!("{}", submit.id), submit.submit_time.to_string(), submit.uuid.to_string()]
- })
- .collect::<Vec<_>>();
+ };
if data.is_empty() {
info!("No submits in database");