/** * rpmostreed_repo_lookup_checksum: * @repo: Repo * @refspec: Repository branch * @checksum: Checksum to look for * @progress: (allow-none): Progress * @cancellable: Cancellable * @error: Error * * Tries to determine if the checksum given belongs on the remote and branch * given by @refspec. This may require pulling commit objects from a remote * repository. * * Returns: %TRUE on success, %FALSE on failure */ gboolean rpmostreed_repo_lookup_checksum (OstreeRepo *repo, const char *refspec, const char *checksum, OstreeAsyncProgress *progress, GCancellable *cancellable, GError **error) { ChecksumVisitorClosure closure = { checksum, FALSE }; g_return_val_if_fail (OSTREE_IS_REPO (repo), FALSE); g_return_val_if_fail (refspec != NULL, FALSE); g_return_val_if_fail (checksum != NULL, FALSE); if (!rpmostreed_repo_pull_ancestry (repo, refspec, checksum_visitor, &closure, progress, cancellable, error)) return FALSE; if (!closure.found) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, "Checksum %s not found in %s", checksum, refspec); return FALSE; } return TRUE; }
/** * rpmostreed_repo_lookup_version: * @repo: Repo * @refspec: Repository branch * @version: Version to look for * @progress: (allow-none): Progress * @cancellable: Cancellable * @out_checksum: (out) (allow-none): Commit checksum, or %NULL * @error: Error * * Tries to determine the commit checksum for @version on @refspec. * This may require pulling commit objects from a remote repository. * * Returns: %TRUE on success, %FALSE on failure */ gboolean rpmostreed_repo_lookup_version (OstreeRepo *repo, const char *refspec, const char *version, OstreeAsyncProgress *progress, GCancellable *cancellable, char **out_checksum, GError **error) { VersionVisitorClosure closure = { version, NULL }; gboolean ret = FALSE; g_return_val_if_fail (OSTREE_IS_REPO (repo), FALSE); g_return_val_if_fail (refspec != NULL, FALSE); g_return_val_if_fail (version != NULL, FALSE); if (!rpmostreed_repo_pull_ancestry (repo, refspec, version_visitor, &closure, progress, cancellable, error)) goto out; if (closure.checksum == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, "Version %s not found in %s", version, refspec); goto out; } if (out_checksum != NULL) *out_checksum = g_steal_pointer (&closure.checksum); g_free (closure.checksum); ret = TRUE; out: return ret; }