static void update(HySack sack, HyPackage pkg) { HyGoal goal = hy_goal_create(sack); if (hy_goal_upgrade_to_flags(goal, pkg, HY_CHECK_INSTALLED)) { printf("no package of that name installed, trying install\n"); hy_goal_install(goal, pkg); } if (hy_goal_run(goal)) { dump_goal_errors(goal); // handle errors goto finish; } // handle upgrades HyPackageList plist = hy_goal_list_upgrades(goal); printf("upgrade count: %d\n", hy_packagelist_count(plist)); for (int i = 0; i < hy_packagelist_count(plist); ++i) { HyPackage pkg = hy_packagelist_get(plist, i); char *nvra = hy_package_get_nevra(pkg); char *location = hy_package_get_location(pkg); HyPackageList obsoleted = hy_goal_list_obsoleted_by_package(goal, pkg); HyPackage installed = hy_packagelist_get(obsoleted, 0); char *nvra_installed = hy_package_get_nevra(installed); printf("upgrading: %s using %s\n", nvra, location); printf("\tfrom: %s\n", nvra_installed); printf("\tsize: %lld kB\n", hy_package_get_size(pkg) / 1024); hy_free(nvra_installed); hy_packagelist_free(obsoleted); hy_free(location); hy_free(nvra); } hy_packagelist_free(plist); // handle installs plist = hy_goal_list_installs(goal); printf("install count: %d\n", hy_packagelist_count(plist)); for (int i = 0; i < hy_packagelist_count(plist); ++i) { HyPackage pkg = hy_packagelist_get(plist, i); char *nvra = hy_package_get_nevra(pkg); char *location = hy_package_get_location(pkg); printf("installing: %s using %s\n", nvra, location); printf("\tsize: %lld kB\n", hy_package_get_size(pkg) / 1024); hy_free(location); hy_free(nvra); } hy_packagelist_free(plist); finish: hy_goal_free(goal); }
static PyObject * package_str(_PackageObject *self) { char *cstr = hy_package_get_nevra(self->package); PyObject *ret = PyString_FromString(cstr); solv_free(cstr); return ret; }
static void execute_print(HySack sack, HyQuery q, int show_obsoletes) { HyPackageList plist; plist = hy_query_run(q); const int count = hy_packagelist_count(plist); for (int i = 0; i < count; ++i) { HyPackage pkg = hy_packagelist_get(plist, i); char *nvra = hy_package_get_nevra(pkg); const char *reponame = hy_package_get_reponame(pkg); printf("found package: %s [%s]\n", nvra, reponame); if (strcmp(reponame, HY_SYSTEM_REPO_NAME) == 0) { int type; const unsigned char * hdrid = hy_package_get_hdr_chksum(pkg, &type); char *str = hy_chksum_str(hdrid, type); printf("\tsha1 header id: %s\n", str); hy_free(str); } if (show_obsoletes) { HyReldepList obsoletes = hy_package_get_obsoletes(pkg); HyQuery qobs = hy_query_create(sack); hy_query_filter(qobs, HY_PKG_REPONAME, HY_NEQ, HY_SYSTEM_REPO_NAME); hy_query_filter_reldep_in(qobs, HY_PKG_PROVIDES, obsoletes); HyPackageList olist = hy_query_run(qobs); const int ocount = hy_packagelist_count(olist); for (int j = 0; j < ocount; ++j) { HyPackage opkg = hy_packagelist_get(olist, j); char *onvra = hy_package_get_nevra(opkg); printf("obsoleting: %s\n", onvra); hy_free(onvra); } hy_packagelist_free(olist); hy_query_free(qobs); hy_reldeplist_free(obsoletes); } hy_free(nvra); } hy_packagelist_free(plist); }
static PyObject * package_repr(_PackageObject *self) { HyPackage pkg = self->package; char *nevra = hy_package_get_nevra(pkg); PyObject *repr; repr = PyString_FromFormat("<hawkey.Package object id %ld, %s, %s>", package_hash(self), nevra, hy_package_get_reponame(pkg)); solv_free(nevra); return repr; }
END_TEST START_TEST(test_query_nevra_glob) { HySack sack = test_globals.sack; HyQuery q; HyPackageList plist; q = hy_query_create(sack); hy_query_filter(q, HY_PKG_NEVRA, HY_GLOB, "p*4-1*"); plist = hy_query_run(q); ck_assert_int_eq(hy_packagelist_count(plist), 2); HyPackage pkg1 = hy_packagelist_get(plist, 0); HyPackage pkg2 = hy_packagelist_get(plist, 1); char *nevra1 = hy_package_get_nevra(pkg1); char *nevra2 = hy_package_get_nevra(pkg2); ck_assert_str_eq(nevra1, "penny-4-1.noarch"); ck_assert_str_eq(nevra2, "penny-lib-4-1.x86_64"); solv_free(nevra1); solv_free(nevra2); hy_packagelist_free(plist); hy_query_free(q); }
static gboolean print_rpmdb_diff (GFile *oldroot, GFile *newroot, GCancellable *cancellable, GError **error) { gboolean ret = FALSE; _cleanup_hysack_ HySack old_sack = NULL; _cleanup_hypackagelist_ HyPackageList old_pkglist = NULL; _cleanup_hysack_ HySack new_sack = NULL; _cleanup_hypackagelist_ HyPackageList new_pkglist = NULL; guint i; HyPackage pkg; gboolean printed_header = FALSE; if (!rpmostree_get_pkglist_for_root (oldroot, &old_sack, &old_pkglist, cancellable, error)) goto out; if (!rpmostree_get_pkglist_for_root (newroot, &new_sack, &new_pkglist, cancellable, error)) goto out; printed_header = FALSE; FOR_PACKAGELIST(pkg, new_pkglist, i) { _cleanup_hyquery_ HyQuery query = NULL; _cleanup_hypackagelist_ HyPackageList pkglist = NULL; query = hy_query_create (old_sack); hy_query_filter (query, HY_PKG_NAME, HY_EQ, hy_package_get_name (pkg)); hy_query_filter (query, HY_PKG_EVR, HY_NEQ, hy_package_get_evr (pkg)); hy_query_filter (query, HY_PKG_REPONAME, HY_EQ, HY_SYSTEM_REPO_NAME); pkglist = hy_query_run (query); if (hy_packagelist_count (pkglist) > 0) { gs_free char *nevra = hy_package_get_nevra (pkg); if (!printed_header) { g_print ("Changed:\n"); printed_header = TRUE; } g_print (" %s\n", nevra); } }
static gboolean compute_checksum_from_treefile_and_goal (RpmOstreeTreeComposeContext *self, HyGoal goal, char **out_checksum, GError **error) { gboolean ret = FALSE; gs_free char *ret_checksum = NULL; GChecksum *checksum = g_checksum_new (G_CHECKSUM_SHA256); /* Hash in the raw treefile; this means reordering the input packages * or adding a comment will cause a recompose, but let's be conservative * here. */ { gsize len; const guint8* buf = g_bytes_get_data (self->serialized_treefile, &len); g_checksum_update (checksum, buf, len); } /* FIXME; we should also hash the post script */ /* Hash in each package */ { _cleanup_hypackagelist_ HyPackageList pkglist = NULL; HyPackage pkg; guint i; gs_unref_ptrarray GPtrArray *nevras = g_ptr_array_new_with_free_func (g_free); pkglist = hy_goal_list_installs (goal); FOR_PACKAGELIST(pkg, pkglist, i) { g_ptr_array_add (nevras, hy_package_get_nevra (pkg)); } g_ptr_array_sort (nevras, ptrarray_sort_compare_strings); for (i = 0; i < nevras->len; i++) { const char *nevra = nevras->pdata[i]; g_checksum_update (checksum, (guint8*)nevra, strlen (nevra)); } }
FOR_PACKAGELIST(pkg, new_pkglist, i) { _cleanup_hyquery_ HyQuery query = NULL; _cleanup_hypackagelist_ HyPackageList pkglist = NULL; query = hy_query_create (old_sack); hy_query_filter (query, HY_PKG_NAME, HY_EQ, hy_package_get_name (pkg)); hy_query_filter (query, HY_PKG_REPONAME, HY_EQ, HY_SYSTEM_REPO_NAME); pkglist = hy_query_run (query); if (hy_packagelist_count (pkglist) == 0) { gs_free char *nevra = hy_package_get_nevra (pkg); if (!printed_header) { g_print ("Added:\n"); printed_header = TRUE; } g_print (" %s\n", nevra); } }
END_TEST START_TEST(test_query_pkg) { HyPackageSet pset; HyQuery q, q2; // setup q = hy_query_create(test_globals.sack); hy_query_filter(q, HY_PKG_NAME, HY_EQ, "jay"); pset = hy_query_run_set(q); hy_query_free(q); fail_unless(hy_packageset_count(pset), 2); // use hy_query_filter_package_in(): q = hy_query_create(test_globals.sack); // check validation works: fail_unless(hy_query_filter_package_in(q, HY_PKG, HY_GT, pset)); // add the filter: fail_if(hy_query_filter_package_in(q, HY_PKG, HY_EQ, pset)); hy_packageset_free(pset); // cloning must work q2 = hy_query_clone(q); fail_unless(query_count_results(q) == 2); hy_query_free(q); // filter on hy_query_filter_latest_per_arch(q2, 1); pset = hy_query_run_set(q2); fail_unless(hy_packageset_count(pset) == 1); HyPackage pkg = hy_packageset_get_clone(pset, 0); char *nvra = hy_package_get_nevra(pkg); ck_assert_str_eq(nvra, "jay-6.0-0.x86_64"); solv_free(nvra); hy_package_free(pkg); hy_packageset_free(pset); hy_query_free(q2); }
static void erase(HySack sack, const char *name) { HyQuery q = hy_query_create(sack); hy_query_filter(q, HY_PKG_NAME, HY_EQ, name); hy_query_filter(q, HY_PKG_REPONAME, HY_EQ, HY_SYSTEM_REPO_NAME); HyPackageList plist = hy_query_run(q); if (hy_packagelist_count(plist) < 1) { printf("No installed package to erase found.\n"); goto finish; } if (hy_packagelist_count(plist) > 1) printf("(more than one updatables found, selecting the first one)\n"); HyGoal goal = hy_goal_create(sack); hy_goal_erase(goal, hy_packagelist_get(plist, 0)); if (hy_goal_run(goal)) { dump_goal_errors(goal); hy_goal_free(goal); goto finish; } hy_packagelist_free(plist); plist = hy_goal_list_erasures(goal); printf("erasure count: %d\n", hy_packagelist_count(plist)); for (int i = 0; i < hy_packagelist_count(plist); ++i) { HyPackage pkg = hy_packagelist_get(plist, i); char *nvra = hy_package_get_nevra(pkg); printf("erasing %s\n", nvra); hy_free(nvra); } hy_goal_free(goal); finish: hy_packagelist_free(plist); hy_query_free(q); }
END_TEST START_TEST(test_goal_install_selector) { HySelector sltr; HyGoal goal = hy_goal_create(test_globals.sack); // test arch forcing sltr = hy_selector_create(test_globals.sack); hy_selector_set(sltr, HY_PKG_NAME, HY_EQ, "semolina"); hy_selector_set(sltr, HY_PKG_ARCH, HY_EQ, "i686"); fail_if(hy_goal_install_selector(goal, sltr)); hy_selector_free(sltr); fail_if(hy_goal_run(goal)); assert_iueo(goal, 1, 0, 0, 0); HyPackageList plist = hy_goal_list_installs(goal); char *nvra = hy_package_get_nevra(hy_packagelist_get(plist, 0)); ck_assert_str_eq(nvra, "semolina-2-0.i686"); hy_free(nvra); hy_packagelist_free(plist); hy_goal_free(goal); }