diff options
Diffstat (limited to 'src/commands')
-rw-r--r-- | src/commands/db.rs | 24 | ||||
-rw-r--r-- | src/commands/source.rs | 38 |
2 files changed, 45 insertions, 17 deletions
diff --git a/src/commands/db.rs b/src/commands/db.rs index e984848..f3a6721 100644 --- a/src/commands/db.rs +++ b/src/commands/db.rs @@ -336,17 +336,25 @@ fn submits(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<()> let limit = matches.value_of("limit").map(i64::from_str).transpose()?; let hdrs = crate::commands::util::mk_header(vec!["Time", "UUID"]); let conn = conn_cfg.establish_connection()?; + let commit = matches.value_of("for-commit"); let query = schema::submits::table - .order_by(schema::submits::id.desc()); // required for the --limit implementation + .order_by(schema::submits::id.desc()) // required for the --limit implementation + .inner_join(schema::githashes::table.on(schema::submits::repo_hash_id.eq(schema::githashes::id))) + .into_boxed(); + + let query = if let Some(commithash) = commit.as_ref() { + query.filter(schema::githashes::hash.eq(commithash)) + } else { + query + }; 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 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)) - .into_boxed(); + .filter(schema::packages::name.eq(&pkgname)); if let Some(limit) = limit { query.limit(limit) @@ -361,8 +369,7 @@ fn submits(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<()> .inner_join({ schema::packages::table.on(schema::submits::requested_package_id.eq(schema::packages::id)) }) - .filter(schema::packages::dsl::name.eq(&pkgname)) - .into_boxed(); + .filter(schema::packages::dsl::name.eq(&pkgname)); if let Some(limit) = limit { query.limit(limit) @@ -372,9 +379,12 @@ fn submits(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<()> .select(schema::submits::all_columns) .load::<models::Submit>(&conn)? } else if let Some(limit) = limit { - query.limit(limit).load::<models::Submit>(&conn)? + query.select(schema::submits::all_columns) + .limit(limit) + .load::<models::Submit>(&conn)? } else { - query.load::<models::Submit>(&conn)? + query.select(schema::submits::all_columns) + .load::<models::Submit>(&conn)? }; // Helper to map Submit -> Vec<String> diff --git a/src/commands/source.rs b/src/commands/source.rs index 52a0534..473169a 100644 --- a/src/commands/source.rs +++ b/src/commands/source.rs @@ -66,14 +66,23 @@ pub async fn verify( .map(PackageVersionConstraint::try_from) .transpose()?; + let matching_regexp = matches.value_of("matching") + .map(crate::commands::util::mk_package_name_regex) + .transpose()?; + let packages = repo .packages() - .filter(|p| pname.as_ref().map(|n| p.name() == n).unwrap_or(true)) .filter(|p| { - pvers - .as_ref() - .map(|v| v.matches(p.version())) - .unwrap_or(true) + match (pname.as_ref(), pvers.as_ref(), matching_regexp.as_ref()) { + (None, None, None) => true, + (Some(pname), None, None) => p.name() == pname, + (Some(pname), Some(vers), None) => p.name() == pname && vers.matches(p.version()), + (None, None, Some(regex)) => regex.is_match(p.name()), + + (_, _, _) => { + panic!("This should not be possible, either we select packages by name and (optionally) version, or by regex.") + }, + } }) .inspect(|p| trace!("Found for verification: {} {}", p.name(), p.version())); @@ -285,14 +294,23 @@ pub async fn download( mp }; + let matching_regexp = matches.value_of("matching") + .map(crate::commands::util::mk_package_name_regex) + .transpose()?; + let r = repo .packages() - .filter(|p| pname.as_ref().map(|n| p.name() == n).unwrap_or(true)) .filter(|p| { - pvers - .as_ref() - .map(|v| v.matches(p.version())) - .unwrap_or(true) + match (pname.as_ref(), pvers.as_ref(), matching_regexp.as_ref()) { + (None, None, None) => true, + (Some(pname), None, None) => p.name() == pname, + (Some(pname), Some(vers), None) => p.name() == pname && vers.matches(p.version()), + (None, None, Some(regex)) => regex.is_match(p.name()), + + (_, _, _) => { + panic!("This should not be possible, either we select packages by name and (optionally) version, or by regex.") + }, + } }) .map(|p| { sc.sources_for(p).into_iter().map(|source| { |