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
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-users-pl