Witam Prosilbym o sprawdzenie czy ta latka niczego nikomu nie psuje: http://starowa.one.pl/~uzi/pld/poldek-upgrade_on_multiarch.patch
W skrocie: przy upgrade dodatkowo sprawdzamy czy arch pakietu zgadza sie z tym juz zainstalowanym. Detale: Wczesniej przy upgrade poldek nie sprawdzal czy pakiet, ktory bedzie zainstalowany posiada ta sama arch (sprawdzal tylko nazwe i kolor). Test zawodzil zwykle przy pakietach *-devel.x86_64 (gdzie jesli w pakiecie znajdowaly sie symlinki do bibliotek to automatycznie kolor = 0 bez wzgledu na arch) wiec probowal bezskutecznie instalowac pakiet *-devel.i686 Latka dodaje warunek, ze jesli uruchamiamy install z opcja -F to nalezy dodatkowo sprawdzic arch pakietu. Najprawdopodobniej funkcja pkg_is_kind_of() jest zle zaimplementowana w komentarzu mamy ze sprawdza nazwe i arch - za to sprawdza tylko nazwe i kolor. W wersji uproszczonej mozna poprostu naprawic funkcje pkg_is_kind_of() Tylko najprawdopodobniej moze to popsuc cos wiecej ale postaram sie niebawem zamiescic tez taka wersje latki. Pozdrawiam. Bartek. ps. megabajt dzieki za pomoc.
diff --git a/install3/misc.c b/install3/misc.c index e3d238e..66b1dfa 100644 --- a/install3/misc.c +++ b/install3/misc.c @@ -19,7 +19,8 @@ int i3_is_pkg_installed(struct poldek_ts *ts, struct pkg *pkg, int *cmprc) { tn_array *dbpkgs = NULL; - int n; + int n = 0, freshen = 0; + freshen = ts->getop(ts, POLDEK_OP_FRESHEN); n = pkgdb_search(ts->db, &dbpkgs, PMTAG_NAME, pkg->name, NULL, PKG_LDNEVR); n_assert(n >= 0); @@ -37,7 +38,9 @@ int i3_is_pkg_installed(struct poldek_ts *ts, struct pkg *pkg, int *cmprc) //pkgs_array_dump(dbpkgs, "before_multilib"); for (i=0; i < n_array_size(dbpkgs); i++) { struct pkg *dbpkg = n_array_nth(dbpkgs, i); - if (pkg_is_kind_of(dbpkg, pkg)) + // if freshen (upgrade) preffer same arch + // add package if pkg_is_kind_of (have same name and color) + if (pkg_is_kind_of(dbpkg, pkg) && !(freshen && 0 != pkg_cmp_arch(dbpkg, pkg))) n_array_push(arr, pkg_link(dbpkg)); } diff --git a/pkgcmp.c b/pkgcmp.c index f123e03..5452aa9 100644 --- a/pkgcmp.c +++ b/pkgcmp.c @@ -38,7 +38,7 @@ extern int poldek_conf_MULTILIB; -/* same name && arch? */ +/* same name && arch (but just compare color) */ int pkg_is_kind_of(const struct pkg *candidate, const struct pkg *pkg) { register int rc = strcmp(pkg->name, candidate->name); diff --git a/pkgcmp.h b/pkgcmp.h index 6b1b75a..3c59a66 100644 --- a/pkgcmp.h +++ b/pkgcmp.h @@ -14,7 +14,7 @@ struct capreq; /* candidate in pkg's rainbow */ int pkg_is_colored_like(const struct pkg *candidate, const struct pkg *pkg); -/* same name && arch */ +/* same name && arch (but just compare color) */ int pkg_is_kind_of(const struct pkg *candidate, const struct pkg *pkg); /* strncmp(p1->name, p2->name, strlen(p2->name)) */
_______________________________________________ pld-users-pl mailing list pld-users-pl@lists.pld-linux.org http://lists.pld-linux.org/mailman/listinfo/pld-users-pl