From e19042c6427bb3aa7488bd63208ba483899b3622 Mon Sep 17 00:00:00 2001 From: Oscar Lesta Date: Wed, 11 Jun 2025 15:59:45 -0300 Subject: [PATCH] pkgman: add an option to not refresh the repo caches on install. Fixes #13161 Change-Id: I69b307cf8497d411d83f7065b9356159740f7d2b Reviewed-on: https://review.haiku-os.org/c/haiku/+/9337 Reviewed-by: Adrien Destugues --- headers/private/package/manager/PackageManager.h | 4 ++-- src/bin/pkgman/command_install.cpp | 12 ++++++++++-- src/kits/package/manager/PackageManager.cpp | 13 ++++++++----- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/headers/private/package/manager/PackageManager.h b/headers/private/package/manager/PackageManager.h index 06338c3cd2..b3f2b2ece0 100644 --- a/headers/private/package/manager/PackageManager.h +++ b/headers/private/package/manager/PackageManager.h @@ -91,9 +91,9 @@ public: { return fOtherRepositories; } void Install(const char* const* packages, - int packageCount); + int packageCount, bool refresh = true); void Install(const BSolverPackageSpecifierList& - packages); + packages, bool refresh = true); void Uninstall(const char* const* packages, int packageCount); void Uninstall(const BSolverPackageSpecifierList& diff --git a/src/bin/pkgman/command_install.cpp b/src/bin/pkgman/command_install.cpp index 4b7f0dd954..6e0dbc78d6 100644 --- a/src/bin/pkgman/command_install.cpp +++ b/src/bin/pkgman/command_install.cpp @@ -46,6 +46,8 @@ static const char* const kLongUsage = " -H, --home\n" " Install the packages in the user's home directory. Default is to\n" " install in the system directory.\n" + " -R, --no-refresh\n" + " Do not refresh the repository caches.\n" " -y\n" " Non-interactive mode. Automatically confirm changes, but fail when\n" " encountering problems.\n" @@ -62,17 +64,19 @@ InstallCommand::Execute(int argc, const char* const* argv) BPackageInstallationLocation location = B_PACKAGE_INSTALLATION_LOCATION_SYSTEM; bool interactive = true; + bool refresh = true; while (true) { static struct option sLongOptions[] = { { "debug", required_argument, 0, OPTION_DEBUG }, { "help", no_argument, 0, 'h' }, { "home", no_argument, 0, 'H' }, + { "no-refresh", no_argument, 0, 'R' }, { 0, 0, 0, 0 } }; opterr = 0; // don't print errors - int c = getopt_long(argc, (char**)argv, "hHy", sLongOptions, NULL); + int c = getopt_long(argc, (char**)argv, "hHRy", sLongOptions, NULL); if (c == -1) break; @@ -92,6 +96,10 @@ InstallCommand::Execute(int argc, const char* const* argv) interactive = false; break; + case 'R': + refresh = false; + break; + default: PrintUsageAndExit(true); break; @@ -109,7 +117,7 @@ InstallCommand::Execute(int argc, const char* const* argv) PackageManager packageManager(location, interactive); packageManager.SetDebugLevel(fCommonOptions.DebugLevel()); try { - packageManager.Install(packages, packageCount); + packageManager.Install(packages, packageCount, refresh); } catch (BNothingToDoException&) { // Output already installed packages BSolverPackageSpecifierList packagesToInstall; diff --git a/src/kits/package/manager/PackageManager.cpp b/src/kits/package/manager/PackageManager.cpp index 4cb26ea017..06d5febe3a 100644 --- a/src/kits/package/manager/PackageManager.cpp +++ b/src/kits/package/manager/PackageManager.cpp @@ -157,19 +157,22 @@ BPackageManager::SetDebugLevel(int32 level) void -BPackageManager::Install(const char* const* packages, int packageCount) +BPackageManager::Install(const char* const* packages, int packageCount, bool refresh) { BSolverPackageSpecifierList packagesToInstall; _AddPackageSpecifiers(packages, packageCount, packagesToInstall); - Install(packagesToInstall); + Install(packagesToInstall, refresh); } void -BPackageManager::Install(const BSolverPackageSpecifierList& packages) +BPackageManager::Install(const BSolverPackageSpecifierList& packages, bool refresh) { - Init(B_ADD_INSTALLED_REPOSITORIES | B_ADD_REMOTE_REPOSITORIES - | B_REFRESH_REPOSITORIES); + uint32 flags = B_ADD_INSTALLED_REPOSITORIES | B_ADD_REMOTE_REPOSITORIES; + if (refresh) + flags |= B_REFRESH_REPOSITORIES; + + Init(flags); // solve const BSolverPackageSpecifier* unmatchedSpecifier;