core,util: Lower some DnfPackage* bits into utils

Ideally we'd be fixing upstream libdnf but that's a bit blocked
right now.  I need these at a higher level to implement
`rpm-ostree compose tree --ex-output-jigdo-set` which needs to
link/copy the input RPMs.

Closes: #1184
Approved by: jlebon
This commit is contained in:
Colin Walters 2017-12-21 06:01:12 +01:00 committed by Atomic Bot
parent 7ffb544e35
commit 032c1556f4
3 changed files with 37 additions and 23 deletions

View File

@ -1183,14 +1183,6 @@ rpmostree_get_cache_branch_pkg (DnfPackage *pkg)
dnf_package_get_arch (pkg)); dnf_package_get_arch (pkg));
} }
static gboolean
pkg_is_local (DnfPackage *pkg)
{
const char *reponame = dnf_package_get_reponame (pkg);
return (g_strcmp0 (reponame, HY_CMDLINE_REPO_NAME) == 0 ||
dnf_repo_is_local (dnf_package_get_repo (pkg)));
}
static gboolean static gboolean
commit_has_matching_sepolicy (GVariant *commit, commit_has_matching_sepolicy (GVariant *commit,
OstreeSePolicy *sepolicy, OstreeSePolicy *sepolicy,
@ -1255,7 +1247,7 @@ commit_has_matching_repodata_chksum_repr (GVariant *commit,
static gboolean static gboolean
pkg_is_cached (DnfPackage *pkg) pkg_is_cached (DnfPackage *pkg)
{ {
if (pkg_is_local (pkg)) if (rpmostree_pkg_is_local (pkg))
return TRUE; return TRUE;
/* Right now we're not re-checksumming cached RPMs, we /* Right now we're not re-checksumming cached RPMs, we
@ -2287,19 +2279,7 @@ rpmostree_context_consume_package (RpmOstreeContext *self,
if (!dnf_transaction_gpgcheck_package (dnf_context_get_transaction (self->dnfctx), pkg, error)) if (!dnf_transaction_gpgcheck_package (dnf_context_get_transaction (self->dnfctx), pkg, error))
return FALSE; return FALSE;
DnfRepo *pkg_repo = dnf_package_get_repo (pkg); g_autofree char *pkg_path = rpmostree_pkg_get_local_path (pkg);
g_autofree char *pkg_path = NULL;
const gboolean is_local = pkg_is_local (pkg);
if (is_local)
pkg_path = g_strdup (dnf_package_get_filename (pkg));
else
{
const char *pkg_location = dnf_package_get_location (pkg);
pkg_path =
g_build_filename (dnf_repo_get_location (pkg_repo),
"packages", glnx_basename (pkg_location), NULL);
}
glnx_autofd int fd = -1; glnx_autofd int fd = -1;
if (!glnx_openat_rdonly (AT_FDCWD, pkg_path, TRUE, &fd, error)) if (!glnx_openat_rdonly (AT_FDCWD, pkg_path, TRUE, &fd, error))
return FALSE; return FALSE;
@ -2309,7 +2289,7 @@ rpmostree_context_consume_package (RpmOstreeContext *self,
* should be able to redownload, and if the error was something like * should be able to redownload, and if the error was something like
* ENOSPC, deleting it was the right move I'd say. * ENOSPC, deleting it was the right move I'd say.
*/ */
if (!pkg_is_local (pkg)) if (!rpmostree_pkg_is_local (pkg))
{ {
if (!glnx_unlinkat (AT_FDCWD, pkg_path, 0, error)) if (!glnx_unlinkat (AT_FDCWD, pkg_path, 0, error))
return FALSE; return FALSE;

View File

@ -207,6 +207,33 @@ _rpmostree_util_get_commit_hashes (OstreeRepo *repo,
return ret; return ret;
} }
/* Returns TRUE if a package is originally on a locally-accessible filesystem */
gboolean
rpmostree_pkg_is_local (DnfPackage *pkg)
{
const char *reponame = dnf_package_get_reponame (pkg);
return (g_strcmp0 (reponame, HY_CMDLINE_REPO_NAME) == 0 ||
dnf_repo_is_local (dnf_package_get_repo (pkg)));
}
/* Returns the local filesystem path for a package; for non-local packages,
* it must have already been downloaded.
*/
char *
rpmostree_pkg_get_local_path (DnfPackage *pkg)
{
DnfRepo *pkg_repo = dnf_package_get_repo (pkg);
const gboolean is_local = rpmostree_pkg_is_local (pkg);
if (is_local)
return g_strdup (dnf_package_get_filename (pkg));
else
{
const char *pkg_location = dnf_package_get_location (pkg);
return g_build_filename (dnf_repo_get_location (pkg_repo),
"packages", glnx_basename (pkg_location), NULL);
}
}
char * char *
_rpmostree_util_next_version (const char *auto_version_prefix, _rpmostree_util_next_version (const char *auto_version_prefix,
const char *last_version) const char *last_version)

View File

@ -24,6 +24,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/wait.h> #include <sys/wait.h>
#include <ostree.h> #include <ostree.h>
#include <libdnf/libdnf.h>
#include "libglnx.h" #include "libglnx.h"
#define _N(single, plural, n) ( (n) == 1 ? (single) : (plural) ) #define _N(single, plural, n) ( (n) == 1 ? (single) : (plural) )
@ -57,6 +58,12 @@ _rpmostree_util_get_commit_hashes (OstreeRepo *repo,
GCancellable *cancellable, GCancellable *cancellable,
GError **error); GError **error);
gboolean
rpmostree_pkg_is_local (DnfPackage *pkg);
char *
rpmostree_pkg_get_local_path (DnfPackage *pkg);
char * char *
_rpmostree_util_next_version (const char *auto_version_prefix, _rpmostree_util_next_version (const char *auto_version_prefix,
const char *last_version); const char *last_version);