From: Michael Tremer Date: Wed, 20 Sep 2023 18:26:05 +0000 (+0000) Subject: repos: Implement subpriorities to prefer local packages when possible X-Git-Tag: 0.9.30~1678 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=415c275e8c329184cf931f97c7007294604d5fe6;p=pakfire.git repos: Implement subpriorities to prefer local packages when possible Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/repo.c b/src/libpakfire/repo.c index adb77b0da..fe6db5999 100644 --- a/src/libpakfire/repo.c +++ b/src/libpakfire/repo.c @@ -107,6 +107,23 @@ int pakfire_repo_is_local(struct pakfire_repo* repo) { return pakfire_string_startswith(repo->appdata->baseurl, "file://"); } +/* + LIBSOLV knows a subpriority which is a good way to indicate that + packages from a local repository should be preferred without + preferring an older version of a package over a new one. + + We set this automatically to reduce bandwidth usage. + */ +static void pakfire_repo_update_subpriority(struct pakfire_repo* repo) { + // Prefer local repositories + if (pakfire_repo_is_local(repo)) + repo->repo->subpriority = 1; + + // Otherwise reset + else + repo->repo->subpriority = 0; +} + int pakfire_repo_name_equals(struct pakfire_repo* repo, const char* name) { const char* n = pakfire_repo_get_name(repo); if (!n) @@ -635,6 +652,9 @@ PAKFIRE_EXPORT int pakfire_repo_create(struct pakfire_repo** repo, goto ERROR; } + // Update the subpriority + pakfire_repo_update_subpriority(rep); + // Setup/clear repository data r = pakfire_repo_clear(rep); if (r) @@ -846,6 +866,9 @@ PAKFIRE_EXPORT int pakfire_repo_set_baseurl(struct pakfire_repo* repo, const cha if (!repo->appdata->baseurl) return 1; + // Update sub-priority + pakfire_repo_update_subpriority(repo); + return 0; }