Historically, package archives that are provided in the cli were given
priority over any version from the feeds to satisfy dependencies.

However, when a score was introduced in 5936c4f (libopkg: pkg_hash:
prefer original packages to satisfy dependencies), it would only look at
the flag if the package had the highest score at the time it was being
assessed.

While one can argue that the intention of the change was to superseed
the by-hand priority, it would still be depended on the order in which
they packages were checked, which is not good.

Perform the "by-hand" check first, and only then go through the score
system.  Add a logging message to show the reason.

Signed-off-by: Eneas U de Queiroz <cotequei...@gmail.com>
---
 libopkg/pkg_hash.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git opkglibopkg/pkg_hash.c b/libopkg/pkg_hash.c
index 11b1a06..482efb8 100644
--- opkglibopkg/pkg_hash.c
+++ b/libopkg/pkg_hash.c
@@ -414,6 +414,14 @@ pkg_t 
*pkg_hash_fetch_best_installation_candidate(abstract_pkg_t * apkg,
                pkg_t *matching = matching_pkgs->pkgs[i];
                if (constraint_fcn(matching, cdata)) {
                        int score = 1;
+                       /* It has been provided by hand, so it is what user 
want */
+                       if (matching->provided_by_hand == 1) {
+                               good_pkg_by_name = matching;
+                               opkg_msg(DEBUG, "Candidate: %s %s (picked by 
hand).\n",
+                                        matching->name, 
pkg_get_string(matching, PKG_VERSION));
+                               break;
+                       }
+
                        if (strcmp(matching->name, apkg->name) == 0)
                                score++;
 
@@ -432,9 +440,6 @@ pkg_t 
*pkg_hash_fetch_best_installation_candidate(abstract_pkg_t * apkg,
 
                        good_pkg_by_name = matching;
                        good_pkg_score = score;
-                       /* It has been provided by hand, so it is what user 
want */
-                       if (matching->provided_by_hand == 1)
-                               break;
                }
        }
 

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to