summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <matthias.beyer@atos.net>2021-04-22 09:33:09 +0200
committerMatthias Beyer <matthias.beyer@atos.net>2021-04-22 10:16:30 +0200
commit0f231979ce6d35e3e9ec4773904cf763a1d9aac4 (patch)
treed9ce8528feab69cc0388c7fffea5097dac45c838
parente342a2b39edeca20519a1d28dbba394ad5da6a10 (diff)
Add --limit arg
Signed-off-by: Matthias Beyer <matthias.beyer@atos.net> Tested-by: Matthias Beyer <matthias.beyer@atos.net>
-rw-r--r--src/cli.rs8
-rw-r--r--src/commands/db.rs35
2 files changed, 34 insertions, 9 deletions
diff --git a/src/cli.rs b/src/cli.rs
index 0c0e78d..6e347ff 100644
--- a/src/cli.rs
+++ b/src/cli.rs
@@ -180,6 +180,14 @@ pub fn cli<'a>() -> App<'a> {
.about("Only list submits that had the root package PKG")
.conflicts_with("with_pkg")
)
+ .arg(Arg::new("limit")
+ .required(false)
+ .multiple(false)
+ .long("limit")
+ .takes_value(true)
+ .value_name("LIMIT")
+ .about("Only list LIMIT submits")
+ )
)
.subcommand(App::new("jobs")
diff --git a/src/commands/db.rs b/src/commands/db.rs
index 312f268..45c9e2d 100644
--- a/src/commands/db.rs
+++ b/src/commands/db.rs
@@ -231,30 +231,47 @@ fn images(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> {
fn submits(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> {
let csv = matches.is_present("csv");
+ let limit = matches.value_of("limit").map(i64::from_str).transpose()?;
let hdrs = crate::commands::util::mk_header(vec!["id", "time", "uuid"]);
let conn = crate::db::establish_connection(conn_cfg)?;
- let query = schema::submits::table.into_boxed();
+ let query = schema::submits::table
+ .order_by(schema::submits::id.desc()); // required for the --limit implementation
let submits = if let Some(pkgname) = matches.value_of("with_pkg").map(String::from) {
// Get all submits which included the package, but were not necessarily made _for_ the package
- query
+ let query = query
.inner_join(schema::jobs::table)
.inner_join(schema::packages::table.on(schema::jobs::package_id.eq(schema::packages::id)))
.filter(schema::packages::name.eq(&pkgname))
- .select(schema::submits::all_columns)
- .load::<models::Submit>(&conn)?
+ .into_boxed();
+
+ if let Some(limit) = limit {
+ query.limit(limit)
+ } else {
+ query
+ }
+ .select(schema::submits::all_columns)
+ .load::<models::Submit>(&conn)?
} else if let Some(pkgname) = matches.value_of("for_pkg") {
// Get all submits _for_ the package
- query
+ let query = query
.inner_join({
schema::packages::table.on(schema::submits::requested_package_id.eq(schema::packages::id))
})
.filter(schema::packages::dsl::name.eq(&pkgname))
- .select(schema::submits::all_columns)
- .load::<models::Submit>(&conn)?
+ .into_boxed();
+
+ if let Some(limit) = limit {
+ query.limit(limit)
+ } else {
+ query
+ }
+ .select(schema::submits::all_columns)
+ .load::<models::Submit>(&conn)?
+ } else if let Some(limit) = limit {
+ query.limit(limit).load::<models::Submit>(&conn)?
} else {
- // default: Get all submits
query.load::<models::Submit>(&conn)?
};
@@ -267,7 +284,7 @@ fn submits(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> {
]
};
- let data = submits.into_iter().map(submit_to_vec).collect::<Vec<_>>();
+ let data = submits.into_iter().rev().map(submit_to_vec).collect::<Vec<_>>();
if data.is_empty() {
info!("No submits in database");