summaryrefslogtreecommitdiffstats
path: root/src/commands
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands')
-rw-r--r--src/commands/db.rs24
-rw-r--r--src/commands/source.rs38
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| {