]> git.pld-linux.org Git - packages/poldek.git/commitdiff
- rel 33
authorBartłomiej Zimoń <cactus@pld-linux.org>
Thu, 29 Oct 2009 09:08:58 +0000 (09:08 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
- patch28 - score also pkgs marked to install
- patch29 - dont be so greedy, sometimes upgraded pkg has got needed cap.

Changed files:
    poldek-dont-be-greedy.patch -> 1.1
    poldek-multilib-upgrade.patch -> 1.2
    poldek-score-reqs-marked-to-install.patch -> 1.1
    poldek.spec -> 1.388

poldek-dont-be-greedy.patch [new file with mode: 0644]
poldek-multilib-upgrade.patch
poldek-score-reqs-marked-to-install.patch [new file with mode: 0644]
poldek.spec

diff --git a/poldek-dont-be-greedy.patch b/poldek-dont-be-greedy.patch
new file mode 100644 (file)
index 0000000..ec30c8c
--- /dev/null
@@ -0,0 +1,14 @@
+diff --git a/install3/requirements.c b/install3/requirements.c
+index ea9df61..361c400 100644
+--- a/install3/requirements.c
++++ b/install3/requirements.c
+@@ -386,7 +392,8 @@ static int process_orphan_req(int indent, struct i3ctx *ictx,
+     }
+     
+     /* try upgrade orphan */
+-    if (ts->getop(ts, POLDEK_OP_GREEDY)) {
++    if (ts->getop(ts, POLDEK_OP_GREEDY) && !(tomark && pkg_caps_match_req(tomark, req,
++              POLDEK_MA_PROMOTE_EPOCH || POLDEK_MA_PROMOTE_VERSION))) {
+         if (try_to_upgrade_orphan(indent, ictx, pkg, req, tomark))
+             goto l_end;
+     }
index 4deb96533cfeb4597880a9ad5556428a8112f4d8..fa07a5217ddc8d5abbb7a82b0653a16cc25af268 100644 (file)
@@ -103,7 +103,7 @@ index f123e03..7bf34d4 100644
      return strcmp(pkg->name, capreq_name(cr)) == 0 &&
          strcmp(pkg->ver, capreq_ver(cr)) == 0 &&
 diff --git a/pkgcmp.h b/pkgcmp.h
-index 6b1b75a..573e32b 100644
+index 6b1b75a..980f675 100644
 --- a/pkgcmp.h
 +++ b/pkgcmp.h
 @@ -17,6 +17,9 @@ int pkg_is_colored_like(const struct pkg *candidate, const struct pkg *pkg);
@@ -116,6 +116,15 @@ index 6b1b75a..573e32b 100644
  /* strncmp(p1->name, p2->name, strlen(p2->name)) */
  extern__inline int pkg_ncmp_name(const struct pkg *p1, const struct pkg *p2);
  
+@@ -27,7 +30,7 @@ int pkg_cmp_name(const struct pkg *p1, const struct pkg *p2);
+ extern__inline int pkg_cmp_id(const struct pkg *p1, const struct pkg *p2);
+-/* versions only */
++/* versions only (+epoch) */
+ int pkg_cmp_ver(const struct pkg *p1, const struct pkg *p2);
+ /* EVR only */
+ int pkg_cmp_evr(const struct pkg *p1, const struct pkg *p2);
 diff --git a/upgrade-dist.c b/upgrade-dist.c
 index 458b764..00f34fc 100644
 --- a/upgrade-dist.c
diff --git a/poldek-score-reqs-marked-to-install.patch b/poldek-score-reqs-marked-to-install.patch
new file mode 100644 (file)
index 0000000..0aa1764
--- /dev/null
@@ -0,0 +1,151 @@
+diff --git a/install3/iset.c b/install3/iset.c
+index e891a13..8ecbd7f 100644
+--- a/install3/iset.c
++++ b/install3/iset.c
+@@ -238,6 +238,29 @@ int iset_provides(struct iset *iset, const struct capreq *cap)
+     return pkg != NULL;
+ }
++// returns how many pkg reqs are in iset
++int iset_reqs_score(struct iset *iset, const struct pkg *pkg)
++{
++    struct pkg_req_iter  *it = NULL;
++    const struct capreq  *req = NULL;
++    unsigned itflags = PKG_ITER_REQIN | PKG_ITER_REQDIR; // | PKG_ITER_REQDIR | PKG_ITER_REQSUG
++    int score = 0;
++
++    n_assert(pkg->reqs);
++
++    it = pkg_req_iter_new(pkg, itflags);
++    while ((req = pkg_req_iter_get(it))) {
++        if (iset_provides(iset, req)){
++            score++;
++          if (capreq_versioned(req))
++              score +=2;
++      }
++    }
++    pkg_req_iter_free(it);
++
++    return score;
++}
++
+ void iset_dump(struct iset *iset)
+ {
+     int i;
+diff --git a/install3/iset.h b/install3/iset.h
+index 3946c0e..7b3b08d 100644
+--- a/install3/iset.h
++++ b/install3/iset.h
+@@ -32,7 +32,11 @@ void iset_add(struct iset *iset, struct pkg *pkg, unsigned mflag);
+ int  iset_remove(struct iset *iset, struct pkg *pkg);
+ int iset_provides(struct iset *iset, const struct capreq *cap);
++// returns how many pkg reqs are in iset
++int iset_reqs_score(struct iset *iset, const struct pkg *pkg);
++
+ int iset_has_pkg(struct iset *iset, const struct pkg *pkg);
++// return 1st found pkg_is_kind_of from iset or null
+ struct pkg *iset_has_kind_of_pkg(struct iset *iset, const struct pkg *pkg);
+ #endif    
+diff --git a/install3/requirements.c b/install3/requirements.c
+index ea9df61..37bb5e2 100644
+--- a/install3/requirements.c
++++ b/install3/requirements.c
+@@ -21,9 +21,8 @@ tn_array *filter_out_olders(struct i3ctx *ictx, tn_array *pkgs,
+                             const struct pkg *pkg)
+ {
+     tn_array *tmp = n_array_clone(pkgs);
+-    int i;
+-    
+-    for (i=0; i < n_array_size(pkgs); i++) {
++
++    for (unsigned int i=0; i < n_array_size(pkgs); i++) {
+         struct pkg *p = n_array_nth(pkgs, i);
+         int cmprc;
+         
+@@ -49,7 +48,8 @@ static struct pkg *select_successor(int indent, struct i3ctx *ictx,
+ {
+     const struct pkg *selected_pkg = NULL;
+     tn_array *pkgs, *tmp;
+-    int i, max_score = 0, *scores;
++    int max_score = 0, *scores;
++    unsigned int i;
+     int nconsidered = 0, nuncolored = 0;
+     tracef(indent, "%s (c=%d)", pkg_id(pkg), pkg->color);
+@@ -73,13 +73,21 @@ static struct pkg *select_successor(int indent, struct i3ctx *ictx,
+         selected_pkg = n_array_nth(pkgs, 0);
+         goto l_end;
+     }
+-    
++
+     /* multilib mode */
+     scores = alloca(sizeof(*scores) * n_array_size(pkgs));
+     for (i=0; i < n_array_size(pkgs); i++) {
+         struct pkg *p = n_array_nth(pkgs, i);
+         scores[i] = 0;
+-        
++
++      // extra 100 points for arch compatible
++      if (pkg_is_kind_of(p, pkg) && pkg_is_arch_compat(p, pkg)) {
++          scores[i] += 100;
++      }
++
++      // extra points for reqs marked to install
++      scores[i] += iset_reqs_score(ictx->inset, p);
++
+         if (pkg->color == 0 && p->color == 0) { /* both uncolored  */
+             scores[i] += 1;
+             if (pkg_is_kind_of(p, pkg))
+@@ -93,14 +101,14 @@ static struct pkg *select_successor(int indent, struct i3ctx *ictx,
+         } else if (pkg_is_colored_like(p, pkg)) {
+             scores[i] += 2;
+         }
+-        
++
+         trace(indent, "- %d. %s -> color %d, score %d", i, pkg_id(p),
+-              p->color, scores[i]);
+-        
+-        if (max_score < scores[i]) {
+-            max_score = scores[i];
+-            selected_pkg = p;
+-        }
++            p->color, scores[i]);
++
++      if (max_score < scores[i]) {
++          max_score = scores[i];
++          selected_pkg = p;
++      }
+         
+         nconsidered++;
+     }
+@@ -150,9 +158,7 @@ l_end:
+ /* detect which package capability has "replaces" meaning, if any */
+ static const char *get_replacemeant_capname(const struct pkg *pkg) 
+ {
+-    int i;
+-    
+-    for (i=0; i < n_array_size(pkg->cnfls); i++) {
++    for (unsigned int i=0; i < n_array_size(pkg->cnfls); i++) {
+         struct capreq *cnfl = n_array_nth(pkg->cnfls, i);
+         if (capreq_versioned(cnfl) || !capreq_is_obsl(cnfl))
+@@ -194,7 +200,7 @@ struct pkg *find_successor_by(int indent, struct i3ctx *ictx,
+ {
+     struct pkg *bypkg = NULL;
+     tn_array *pkgs, *tmp;
+-    int i, best_i;
++    unsigned int i, best_i;
+     n_assert(tag == PS_SEARCH_OBSL || tag == PS_SEARCH_CAP);
+     if ((pkgs = pkgset_search(ictx->ps, tag, pkg->name)) == NULL) {
+@@ -741,7 +747,7 @@ int i3_process_pkg_requirements(int indent, struct i3ctx *ictx,
+        asks for suggested package, even though it is required. */
+     if (ts->getop(ts, POLDEK_OP_SUGGESTS) && nerrors == 0) {
+         tn_array *suggests = NULL;
+-      int      i;
++      unsigned int i;
+       
+       suggests = with_suggests(indent + 2, ictx, pkg);
+       
index c1533f8ca2447b10fb1a0894cc39aa9d7202f562..e81630e5a14c2eb621ffe249e1fe618bb7a5d2f7 100644 (file)
@@ -15,7 +15,7 @@
 %define        ver_rpm 4.5-5
 #
 %define                snap    20080820.23
-%define                rel             32
+%define                rel             33
 Summary:       RPM packages management helper tool
 Summary(pl.UTF-8):     Pomocnicze narzędzie do zarządzania pakietami RPM
 Name:          poldek
@@ -64,6 +64,8 @@ Patch24:      %{name}-unescape-urlencoded-strings.patch
 Patch25:       %{name}-ls-source-rpm.patch
 Patch26:       %{name}-add-arch-match.patch
 Patch27:       %{name}-multilib-upgrade.patch
+Patch28:       %{name}-score-reqs-marked-to-install.patch
+Patch29:       %{name}-dont-be-greedy.patch
 URL:           http://poldek.pld-linux.org/
 BuildRequires: autoconf
 BuildRequires: automake
@@ -220,6 +222,10 @@ Moduły języka Python dla poldka.
 %patch26 -p1
 # LP#408034
 %patch27 -p1
+# score reqs already marked to install
+%patch28 -p1
+# dont be greedy if upgraded pkg has needed capabilities
+%patch29 -p1
 
 # cleanup backups after patching
 find . '(' -name '*~' -o -name '*.orig' ')' -print0 | xargs -0 -r -l512 rm -f
This page took 0.093495 seconds and 4 git commands to generate.