END_TEST START_TEST(test_goal_distupgrade_all_keep_arch) { HyGoal goal = hy_goal_create(test_globals.sack); fail_if(hy_goal_distupgrade_all(goal)); fail_if(hy_goal_run(goal)); assert_iueo(goal, 0, 5, 0, 1); GPtrArray *plist = hy_goal_list_upgrades(goal, NULL); // gun pkg is not upgraded to latest version of different arch assert_nevra_eq(g_ptr_array_index(plist, 0), "dog-1-2.x86_64"); assert_nevra_eq(g_ptr_array_index(plist, 1), "pilchard-1.2.4-1.i686"); assert_nevra_eq(g_ptr_array_index(plist, 2), "pilchard-1.2.4-1.x86_64"); assert_nevra_eq(g_ptr_array_index(plist, 3), "flying-3.1-0.x86_64"); assert_nevra_eq(g_ptr_array_index(plist, 4), "fool-1-5.noarch"); g_ptr_array_unref(plist); plist = hy_goal_list_obsoleted(goal, NULL); fail_unless(plist->len == 1); assert_nevra_eq(g_ptr_array_index(plist, 0), "penny-4-1.noarch"); g_ptr_array_unref(plist); plist = hy_goal_list_downgrades(goal, NULL); fail_unless(plist->len == 1); assert_nevra_eq(g_ptr_array_index(plist, 0), "baby-6:4.9-3.x86_64"); g_ptr_array_unref(plist); hy_goal_free(goal); }
END_TEST START_TEST(test_goal_distupgrade_all_keep_arch) { HyGoal goal = hy_goal_create(test_globals.sack); fail_if(hy_goal_distupgrade_all(goal)); fail_if(hy_goal_run(goal)); assert_iueo(goal, 0, 5, 0, 1); HyPackageList plist = hy_goal_list_upgrades(goal); // gun pkg is not upgraded to latest version of different arch assert_nevra_eq(hy_packagelist_get(plist, 0), "dog-1-2.x86_64"); assert_nevra_eq(hy_packagelist_get(plist, 1), "pilchard-1.2.4-1.i686"); assert_nevra_eq(hy_packagelist_get(plist, 2), "pilchard-1.2.4-1.x86_64"); assert_nevra_eq(hy_packagelist_get(plist, 3), "flying-3.1-0.x86_64"); assert_nevra_eq(hy_packagelist_get(plist, 4), "fool-1-5.noarch"); hy_packagelist_free(plist); plist = hy_goal_list_obsoleted(goal); fail_unless(hy_packagelist_count(plist) == 1); assert_nevra_eq(hy_packagelist_get(plist, 0), "penny-4-1.noarch"); hy_packagelist_free(plist); plist = hy_goal_list_downgrades(goal); fail_unless(hy_packagelist_count(plist) == 1); assert_nevra_eq(hy_packagelist_get(plist, 0), "baby-6:4.9-3.x86_64"); hy_packagelist_free(plist); hy_goal_free(goal); }
END_TEST START_TEST(test_goal_downgrade) { DnfSack *sack = test_globals.sack; DnfPackage *to_be_pkg = get_available_pkg(sack, "baby"); HyGoal goal = hy_goal_create(sack); hy_goal_downgrade_to(goal, to_be_pkg); fail_if(hy_goal_run(goal)); assert_iueo(goal, 0, 0, 0, 0); GPtrArray *plist = hy_goal_list_downgrades(goal, NULL); fail_unless(plist->len == 1); DnfPackage *pkg = g_ptr_array_index(plist, 0); ck_assert_str_eq(dnf_package_get_evr(pkg), "6:4.9-3"); GPtrArray *obsoleted = hy_goal_list_obsoleted_by_package(goal, pkg); fail_unless(obsoleted->len == 1); DnfPackage *old_pkg = g_ptr_array_index(obsoleted, 0); ck_assert_str_eq(dnf_package_get_evr(old_pkg), "6:5.0-11"); g_ptr_array_unref(obsoleted); g_ptr_array_unref(plist); hy_goal_free(goal); g_object_unref(to_be_pkg); }
END_TEST START_TEST(test_goal_downgrade) { HySack sack = test_globals.sack; HyPackage to_be_pkg = get_available_pkg(sack, "baby"); HyGoal goal = hy_goal_create(sack); hy_goal_downgrade_to(goal, to_be_pkg); fail_if(hy_goal_run(goal)); assert_iueo(goal, 0, 0, 0, 0); HyPackageList plist = hy_goal_list_downgrades(goal); fail_unless(hy_packagelist_count(plist) == 1); HyPackage pkg = hy_packagelist_get(plist, 0); ck_assert_str_eq(hy_package_get_evr(pkg), "6:4.9-3"); HyPackageList obsoleted = hy_goal_list_obsoleted_by_package(goal, pkg); fail_unless(hy_packagelist_count(obsoleted) == 1); HyPackage old_pkg = hy_packagelist_get(obsoleted, 0); ck_assert_str_eq(hy_package_get_evr(old_pkg), "6:5.0-11"); hy_packagelist_free(obsoleted); hy_packagelist_free(plist); hy_goal_free(goal); hy_package_free(to_be_pkg); }
END_TEST START_TEST(test_goal_distupgrade_selector_nothing) { HyGoal goal = hy_goal_create(test_globals.sack); HySelector sltr = hy_selector_create(test_globals.sack); hy_selector_set(sltr, HY_PKG_NAME, HY_EQ, "P-lib"); fail_if(hy_goal_distupgrade_selector(goal, sltr)); fail_if(hy_goal_run(goal)); assert_iueo(goal, 0, 0, 0, 0); GPtrArray *plist = hy_goal_list_downgrades(goal, NULL); fail_unless(plist->len == 0); g_ptr_array_unref(plist); hy_goal_free(goal); hy_selector_free(sltr); }
END_TEST START_TEST(test_goal_distupgrade_selector_nothing) { HyGoal goal = hy_goal_create(test_globals.sack); HySelector sltr = hy_selector_create(test_globals.sack); hy_selector_set(sltr, HY_PKG_NAME, HY_EQ, "P-lib"); fail_if(hy_goal_distupgrade_selector(goal, sltr)); fail_if(hy_goal_run(goal)); assert_iueo(goal, 0, 0, 0, 0); HyPackageList plist = hy_goal_list_downgrades(goal); fail_unless(hy_packagelist_count(plist) == 0); hy_packagelist_free(plist); hy_goal_free(goal); hy_selector_free(sltr); }
END_TEST START_TEST(test_goal_distupgrade_all) { HyGoal goal = hy_goal_create(test_globals.sack); fail_if(hy_goal_distupgrade_all(goal)); fail_if(hy_goal_run(goal)); assert_iueo(goal, 0, 1, 0, 0); GPtrArray *plist = hy_goal_list_upgrades(goal, NULL); assert_nevra_eq(g_ptr_array_index(plist, 0), "flying-3-0.noarch"); g_ptr_array_unref(plist); plist = hy_goal_list_downgrades(goal, NULL); fail_unless(plist->len == 1); assert_nevra_eq(g_ptr_array_index(plist, 0), "baby-6:4.9-3.x86_64"); g_ptr_array_unref(plist); hy_goal_free(goal); }
END_TEST START_TEST(test_goal_distupgrade_selector_downgrade) { HyGoal goal = hy_goal_create(test_globals.sack); HySelector sltr = hy_selector_create(test_globals.sack); hy_selector_set(sltr, HY_PKG_NAME, HY_EQ, "baby"); fail_if(hy_goal_distupgrade_selector(goal, sltr)); fail_if(hy_goal_run(goal)); assert_iueo(goal, 0, 0, 0, 0); GPtrArray *plist = hy_goal_list_downgrades(goal, NULL); fail_unless(plist->len == 1); assert_nevra_eq(g_ptr_array_index(plist, 0), "baby-6:4.9-3.x86_64"); g_ptr_array_unref(plist); hy_goal_free(goal); hy_selector_free(sltr); }
END_TEST START_TEST(test_goal_distupgrade_selector_downgrade) { HyGoal goal = hy_goal_create(test_globals.sack); HySelector sltr = hy_selector_create(test_globals.sack); hy_selector_set(sltr, HY_PKG_NAME, HY_EQ, "baby"); fail_if(hy_goal_distupgrade_selector(goal, sltr)); fail_if(hy_goal_run(goal)); assert_iueo(goal, 0, 0, 0, 0); HyPackageList plist = hy_goal_list_downgrades(goal); fail_unless(hy_packagelist_count(plist) == 1); assert_nevra_eq(hy_packagelist_get(plist, 0), "baby-6:4.9-3.x86_64"); hy_packagelist_free(plist); hy_goal_free(goal); hy_selector_free(sltr); }
END_TEST START_TEST(test_goal_distupgrade_all) { HyGoal goal = hy_goal_create(test_globals.sack); fail_if(hy_goal_distupgrade_all(goal)); fail_if(hy_goal_run(goal)); assert_iueo(goal, 0, 1, 0, 0); HyPackageList plist = hy_goal_list_upgrades(goal); assert_nevra_eq(hy_packagelist_get(plist, 0), "flying-3-0.noarch"); hy_packagelist_free(plist); plist = hy_goal_list_downgrades(goal); fail_unless(hy_packagelist_count(plist) == 1); assert_nevra_eq(hy_packagelist_get(plist, 0), "baby-6:4.9-3.x86_64"); hy_packagelist_free(plist); hy_goal_free(goal); }
END_TEST START_TEST(test_goal_distupgrade_all_excludes) { HyQuery q = hy_query_create_flags(test_globals.sack, HY_IGNORE_EXCLUDES); hy_query_filter_provides(q, HY_GT|HY_EQ, "flying", "0"); DnfPackageSet *pset = hy_query_run_set(q); dnf_sack_add_excludes(test_globals.sack, pset); g_object_unref(pset); hy_query_free(q); HyGoal goal = hy_goal_create(test_globals.sack); fail_if(hy_goal_distupgrade_all(goal)); fail_if(hy_goal_run(goal)); assert_iueo(goal, 0, 0, 0, 0); GPtrArray *plist = hy_goal_list_downgrades(goal, NULL); fail_unless(plist->len == 1); assert_nevra_eq(g_ptr_array_index(plist, 0), "baby-6:4.9-3.x86_64"); g_ptr_array_unref(plist); hy_goal_free(goal); }
END_TEST START_TEST(test_goal_distupgrade_all_excludes) { HyQuery q = hy_query_create_flags(test_globals.sack, HY_IGNORE_EXCLUDES); hy_query_filter_provides(q, HY_GT|HY_EQ, "flying", "0"); HyPackageSet pset = hy_query_run_set(q); hy_sack_add_excludes(test_globals.sack, pset); hy_packageset_free(pset); hy_query_free(q); HyGoal goal = hy_goal_create(test_globals.sack); fail_if(hy_goal_distupgrade_all(goal)); fail_if(hy_goal_run(goal)); assert_iueo(goal, 0, 0, 0, 0); HyPackageList plist = hy_goal_list_downgrades(goal); fail_unless(hy_packagelist_count(plist) == 1); assert_nevra_eq(hy_packagelist_get(plist, 0), "baby-6:4.9-3.x86_64"); hy_packagelist_free(plist); hy_goal_free(goal); }
uint32_t TDNFGoal( PTDNF pTdnf, HyPackageList hPkgList, HySelector hSelector, TDNF_ALTERTYPE nResolveFor, PTDNF_SOLVED_PKG_INFO pInfo ) { uint32_t dwError = 0; HyGoal hGoal = NULL; HyPackage hPkg = NULL; PTDNF_PKG_INFO pPkgsToInstall = NULL; PTDNF_PKG_INFO pPkgsToUpgrade = NULL; PTDNF_PKG_INFO pPkgsToDowngrade = NULL; PTDNF_PKG_INFO pPkgsToRemove = NULL; PTDNF_PKG_INFO pPkgsUnNeeded = NULL; PTDNF_PKG_INFO pPkgsToReinstall = NULL; int nFlags = 0; int nRequirePkgList = (nResolveFor != ALTER_UPGRADEALL && nResolveFor != ALTER_DISTRO_SYNC); if(!pTdnf || !pInfo ) { dwError = ERROR_TDNF_INVALID_PARAMETER; BAIL_ON_TDNF_ERROR(dwError); } if(nResolveFor == ALTER_UPGRADE && !hSelector) { dwError = ERROR_TDNF_INVALID_PARAMETER; BAIL_ON_TDNF_ERROR(dwError); } if(nRequirePkgList) { if(!hPkgList) { dwError = ERROR_TDNF_INVALID_PARAMETER; BAIL_ON_TDNF_ERROR(dwError); } hPkg = hy_packagelist_get(hPkgList, 0); if(!hPkg) { dwError = ERROR_TDNF_PACKAGELIST_EMPTY; BAIL_ON_TDNF_ERROR(dwError); } } hGoal = hy_goal_create(pTdnf->hSack); if(!hGoal) { dwError = ERROR_TDNF_GOAL_CREATE; BAIL_ON_TDNF_ERROR(dwError); } switch(nResolveFor) { case ALTER_DOWNGRADE: dwError = hy_goal_downgrade_to(hGoal, hPkg); BAIL_ON_TDNF_HAWKEY_ERROR(dwError); break; case ALTER_ERASE: dwError = hy_goal_erase(hGoal, hPkg); BAIL_ON_TDNF_HAWKEY_ERROR(dwError); break; case ALTER_REINSTALL: dwError = hy_goal_install(hGoal, hPkg); BAIL_ON_TDNF_HAWKEY_ERROR(dwError); break; case ALTER_INSTALL: dwError = TDNFPackageGetLatest(hPkgList, &hPkg); BAIL_ON_TDNF_ERROR(dwError); dwError = hy_goal_install(hGoal, hPkg); BAIL_ON_TDNF_HAWKEY_ERROR(dwError); break; case ALTER_UPGRADE: dwError = hy_goal_upgrade_to_selector(hGoal, hSelector); BAIL_ON_TDNF_HAWKEY_ERROR(dwError); break; case ALTER_UPGRADEALL: dwError = hy_goal_upgrade_all(hGoal); BAIL_ON_TDNF_HAWKEY_ERROR(dwError); break; case ALTER_DISTRO_SYNC: dwError = hy_goal_distupgrade_all(hGoal); BAIL_ON_TDNF_HAWKEY_ERROR(dwError); break; case ALTER_AUTOERASE: dwError = TDNFGoalSetUserInstalled(hGoal, hPkgList); BAIL_ON_TDNF_HAWKEY_ERROR(dwError); break; default: dwError = ERROR_TDNF_INVALID_RESOLVE_ARG; BAIL_ON_TDNF_ERROR(dwError); } if(pTdnf->pArgs->nBest) { nFlags = nFlags | HY_FORCE_BEST; } if(pTdnf->pArgs->nAllowErasing || nResolveFor == ALTER_ERASE || nResolveFor == ALTER_AUTOERASE) { nFlags = nFlags | HY_ALLOW_UNINSTALL; } dwError = hy_goal_run_flags(hGoal, nFlags); if(pTdnf->pArgs->nDebugSolver) { hy_goal_write_debugdata(hGoal, "debugdata"); } BAIL_ON_TDNF_HAWKEY_ERROR(dwError); dwError = TDNFGoalGetResultsIgnoreNoData( hy_goal_list_installs(hGoal), &pPkgsToInstall); BAIL_ON_TDNF_ERROR(dwError); dwError = TDNFGoalGetResultsIgnoreNoData( hy_goal_list_upgrades(hGoal), &pPkgsToUpgrade); BAIL_ON_TDNF_ERROR(dwError); dwError = TDNFGoalGetResultsIgnoreNoData( hy_goal_list_downgrades(hGoal), &pPkgsToDowngrade); BAIL_ON_TDNF_ERROR(dwError); dwError = TDNFGoalGetResultsIgnoreNoData( hy_goal_list_erasures(hGoal), &pPkgsToRemove); BAIL_ON_TDNF_ERROR(dwError); if(nResolveFor == ALTER_AUTOERASE) { dwError = TDNFGoalGetResultsIgnoreNoData( hy_goal_list_unneeded(hGoal), &pPkgsUnNeeded); BAIL_ON_TDNF_ERROR(dwError); } dwError = TDNFGoalGetResultsIgnoreNoData( hy_goal_list_reinstalls(hGoal), &pPkgsToReinstall); BAIL_ON_TDNF_ERROR(dwError); pInfo->pPkgsToInstall = pPkgsToInstall; pInfo->pPkgsToUpgrade = pPkgsToUpgrade; pInfo->pPkgsToDowngrade = pPkgsToDowngrade; pInfo->pPkgsToRemove = pPkgsToRemove; pInfo->pPkgsUnNeeded = pPkgsUnNeeded; pInfo->pPkgsToReinstall = pPkgsToReinstall; pTdnf->hGoal = hGoal; cleanup: return dwError; error: if(hGoal) { TDNFGoalReportProblems(hGoal); hy_goal_free(hGoal); } if(pPkgsToInstall) { TDNFFreePackageInfo(pPkgsToInstall); } if(pPkgsToUpgrade) { TDNFFreePackageInfo(pPkgsToUpgrade); } if(pPkgsToDowngrade) { TDNFFreePackageInfo(pPkgsToDowngrade); } if(pPkgsToRemove) { TDNFFreePackageInfo(pPkgsToRemove); } if(pPkgsUnNeeded) { TDNFFreePackageInfo(pPkgsUnNeeded); } if(pPkgsToReinstall) { TDNFFreePackageInfo(pPkgsToReinstall); } goto cleanup; }
uint32_t TDNFTransAddDowngradePkgs( PTDNFRPMTS pTS, PTDNF pTdnf ) { uint32_t dwError = 0; int i = 0; HyPackage hPkg = NULL; HyPackageList hPkgList = NULL; HyPackage hInstalledPkg = NULL; hPkgList = hy_goal_list_downgrades(pTdnf->hGoal); if(!hPkgList) { dwError = ERROR_TDNF_NO_DATA; BAIL_ON_TDNF_ERROR(dwError); } for(i = 0; (hPkg = hy_packagelist_get(hPkgList, i)) != NULL; ++i) { dwError = TDNFTransAddInstallPkg(pTS, pTdnf, hPkg, 0); BAIL_ON_TDNF_ERROR(dwError); //Downgrade is a removal of existing and installing old. const char* pszName = NULL; pszName = hy_package_get_name(hPkg); if(IsNullOrEmptyString(pszName)) { dwError = hy_get_errno(); if(dwError == 0) { dwError = HY_E_FAILED; } BAIL_ON_TDNF_HAWKEY_ERROR(dwError); } dwError = TDNFFindInstalledPkgByName(pTdnf->hSack, pszName, &hInstalledPkg); BAIL_ON_TDNF_ERROR(dwError); dwError = TDNFTransAddErasePkg(pTS, hInstalledPkg); BAIL_ON_TDNF_ERROR(dwError); hy_package_free(hInstalledPkg); hInstalledPkg = NULL; } cleanup: if(hInstalledPkg) { hy_package_free(hInstalledPkg); } if(hPkgList) { hy_packagelist_free(hPkgList); } return dwError; error: if(dwError == ERROR_TDNF_NO_DATA) { dwError = 0; } goto cleanup; }