Author: arekm Date: Fri Jan 5 14:11:14 2007 GMT Module: SOURCES Tag: HEAD ---- Log message: - new from poldek cvs
---- Files affected: SOURCES: poldek-cvs20070105.patch (NONE -> 1.1) (NEW) ---- Diffs: ================================================================ Index: SOURCES/poldek-cvs20070105.patch diff -u /dev/null SOURCES/poldek-cvs20070105.patch:1.1 --- /dev/null Fri Jan 5 15:11:14 2007 +++ SOURCES/poldek-cvs20070105.patch Fri Jan 5 15:11:09 2007 @@ -0,0 +1,1023 @@ +Index: configure.in +=================================================================== +RCS file: /cvsroot/poldek/poldek/configure.in,v +retrieving revision 1.125 +retrieving revision 1.126 +diff -u -u -r1.125 -r1.126 +--- configure.in 21 Aug 2006 11:20:12 -0000 1.125 ++++ configure.in 17 Dec 2006 22:37:05 -0000 1.126 +@@ -1,5 +1,5 @@ + dnl Process this file with autoconf to produce a configure script. +-dnl $Id$ ++dnl $Id$ + + AC_INIT(poldek,0.20.1) + AC_CONFIG_SRCDIR([capreq.c]) +@@ -273,7 +273,6 @@ + [$DBLIB -lrpmdb]), + [$DBLIB]) + +-AC_CHECK_FUNCS(rpmMachineScore,,[ AC_MSG_ERROR(["rpmlib not found"])]) + AC_CHECK_FUNCS(rpmlog rpmCheckSig rpmVerifySignature) + + dnl rpm 4.2? +@@ -297,11 +296,18 @@ + [ AC_CHECK_FUNCS(rpmGetRpmlibProvides,, + [AC_MSG_WARN(["poldek will not work fine with rpmlib\(...\) capabilities"])], + [$CONF_IN_LDFLAGS])], [$CONF_IN_LDFLAGS]) +- ++dnl rpm 4.4.6 + AC_CHECK_FUNCS(rpmdsUname) + AC_CHECK_FUNCS(rpmdsSysinfo) + AC_CHECK_FUNCS(rpmdsGetconf) + AC_CHECK_FUNCS(rpmdsCpuinfo) ++ ++dnl rpm 4.4.7 ++dnl - killed rpmMachineScore and rpmGetVar ++AC_CHECK_FUNCS(rpmMachineScore) ++AC_CHECK_FUNCS(rpmGetVar) ++dnl - new _rpmvercmp() ++AC_CHECK_FUNCS(_rpmvercmp) + + + +Index: pkg.c +=================================================================== +RCS file: /cvsroot/poldek/poldek/pkg.c,v +retrieving revision 1.111 +retrieving revision 1.112 +diff -u -u -r1.111 -r1.112 +--- pkg.c 20 Aug 2006 21:13:19 -0000 1.111 ++++ pkg.c 11 Sep 2006 21:47:45 -0000 1.112 +@@ -15,7 +15,7 @@ + */ + + /* +- $Id$ ++ $Id$ + */ + + #ifdef HAVE_CONFIG_H +@@ -1380,7 +1380,8 @@ + pkg->na ? pkg->na->_refcnt : -1, + pkg->_refcnt, &pkg->_refcnt); + } +-#endif ++#endif ++ n_assert(pkg->_refcnt < INT16_MAX - 1); + pkg->_refcnt++; + return pkg; + } +Index: pkgmark.c +=================================================================== +RCS file: /cvsroot/poldek/poldek/pkgmark.c,v +retrieving revision 1.7 +retrieving revision 1.8 +diff -u -u -r1.7 -r1.8 +--- pkgmark.c 12 Jun 2005 20:17:13 -0000 1.7 ++++ pkgmark.c 11 Sep 2006 21:47:45 -0000 1.8 +@@ -12,7 +12,7 @@ + + /* + +- $Id$ ++ $Id$ + */ + + #include <ctype.h> +@@ -145,6 +145,7 @@ + const char *id; + + id = package_id(idbuf, sizeof(idbuf), pmark, pkg); ++ n_assert(id); + + if ((pkg_mark = n_hash_get(pmark->ht, id))) + return pkg_mark->flags & flag; +Index: pkgset-order.c +=================================================================== +RCS file: /cvsroot/poldek/poldek/pkgset-order.c,v +retrieving revision 1.31 +retrieving revision 1.32 +diff -u -u -r1.31 -r1.32 +--- pkgset-order.c 20 Aug 2006 18:14:58 -0000 1.31 ++++ pkgset-order.c 17 Dec 2006 17:33:25 -0000 1.32 +@@ -1,5 +1,5 @@ + /* +- Copyright (C) 2000 Pawel A. Gajda ([EMAIL PROTECTED]) ++ Copyright (C) 2000-2007 Pawel A. Gajda ([EMAIL PROTECTED]) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License published by +@@ -7,7 +7,7 @@ + */ + + /* +- $Id$ ++ $Id$ + */ + + #include <limits.h> +@@ -27,13 +27,6 @@ + #include "misc.h" + #include "pkgset-req.h" + +- +-static void mapfn_clean_pkg_color(struct pkg *pkg) +-{ +- pkg_set_color(pkg, PKG_COLOR_WHITE); +- pkg_clr_prereqed(pkg); +-} +- + /* + * Ordering: sort packages topologically + */ +@@ -41,6 +34,7 @@ + tn_array *ordered_pkgs; + tn_array *stack; + int nerrors; ++ int verbose_level; + }; + + +@@ -49,42 +43,40 @@ + unsigned reqpkg_flag, int deep) + { + int i, last_stack_i = -1; +- ++ int verb = vs->verbose_level; ++ + deep += 2; + + pkg_set_color(pkg, PKG_COLOR_GRAY); + if (pkg->reqpkgs == NULL || n_array_size(pkg->reqpkgs) == 0) { +- msg(4, "_\n"); +- msg_i(4, deep, "_ visit %s -> (NO REQS)", pkg->name); ++ msg(verb, "_\n"); ++ msg_i(verb, deep, "_ visit %s (NO REQS)", pkg->name); + goto l_end; + } + + n_array_push(vs->stack, pkg); + last_stack_i = n_array_size(vs->stack) - 1; + +- if (poldek_VERBOSE > 2) { +- msg(4, "_\n"); +- msg_i(4, deep, "_ visit %s -> (", pkg->name); +- for (i=0; i < n_array_size(pkg->reqpkgs); i++) { +- struct reqpkg *rp; +- +- rp = n_array_nth(pkg->reqpkgs, i); +- msg(4, "_%s%s, ", (rp->flags & reqpkg_flag) ? "*" : "", +- rp->pkg->name); ++ msg(verb, "_\n"); ++ msg_i(verb, deep, "_ visit %s -> (", pkg->name); ++ for (i=0; i < n_array_size(pkg->reqpkgs); i++) { ++ struct reqpkg *rp; ++ ++ rp = n_array_nth(pkg->reqpkgs, i); ++ msg(verb, "_%s%s, ", (rp->flags & reqpkg_flag) ? "*" : "", ++ rp->pkg->name); + +- if (rp->flags & REQPKG_MULTI) { +- int n = 0; +- while (rp->adds[n]) { +- msg(4, "_%s%s, ", +- (rp->adds[n]->flags & reqpkg_flag) ? "*" : "", +- rp->adds[n]->pkg->name); +- n++; +- } ++ if (rp->flags & REQPKG_MULTI) { ++ int n = 0; ++ while (rp->adds[n]) { ++ msg(verb, "_%s%s, ", ++ (rp->adds[n]->flags & reqpkg_flag) ? "*" : "", ++ rp->adds[n]->pkg->name); ++ n++; + } + } +- msg(4, "_)\n"); +- msg_i(4, deep, "_ {"); + } ++ msg(verb, "_) {"); + + for (i=0; i < n_array_size(pkg->reqpkgs); i++) { + struct reqpkg *rpkg, *rp; +@@ -104,8 +96,8 @@ + visit_install_order(vs, rp->pkg, reqpkg_flag, deep); + + } else if (pkg_is_color(rp->pkg, PKG_COLOR_BLACK)) { +- msg(4, "_\n"); +- msg_i(4, deep, "_ visited %s", rp->pkg->name); ++ msg(verb, "_\n"); ++ msg_i(verb, deep, "_ visited %s", rp->pkg->name); + + } else if (pkg_is_color(rp->pkg, PKG_COLOR_GRAY)) { /* cycle */ + int is_loop = 0; +@@ -120,7 +112,6 @@ + break; + + n++; +- + if (!pkg_is_prereqed(p)) + break; + +@@ -134,9 +125,9 @@ + if (is_loop) { + vs->nerrors++; + +- if (poldek_VERBOSE > 2) { +- msg(4, "\n"); +- msg_i(4, deep, " cycle %s -> %s", pkg->name, ++ if (verb > 2) { ++ msg(verb, "\n"); ++ msg_i(verb, deep, " cycle %s -> %s", pkg->name, + rp->pkg->name); + + } else { +@@ -147,7 +138,7 @@ + error = alloca(size); + + n = 0; +- n += n_snprintf(error, size, _("PreReq loop: ")); ++ n += n_snprintf(error, size, _("Requires(pre) loop: ")); + n += n_snprintf(&error[n], size - n, "%s", rp->pkg->name); + for (i=n_array_size(vs->stack)-1; i >= 0; i--) { + struct pkg *p = n_array_nth(vs->stack, i); +@@ -157,8 +148,8 @@ + } + + } else { +- msg(4, "\n"); +- msg_i(4, deep, " fakecycle %s -> %s", pkg->name, ++ msg(verb, "\n"); ++ msg_i(verb, deep, " fakecycle %s -> %s", pkg->name, + rp->pkg->name); + } + +@@ -172,22 +163,20 @@ + } + } + +- if (poldek_VERBOSE > 3) { +- msg(4, "\n"); +- msg_i(4, deep, "_ } "); +- msg(4, "_%s", pkg->name); +- for (i=n_array_size(vs->stack)-2; i >= 0; i--) { +- struct pkg *p = n_array_nth(vs->stack, i); +- if (p != pkg) +- msg(4, "_ <- %s", p->name); +- } ++ msg(verb, "\n"); ++ msg_i(verb, deep, "_ } "); ++ msg(verb, "_%s", pkg->name); ++ for (i=n_array_size(vs->stack)-2; i >= 0; i--) { ++ struct pkg *p = n_array_nth(vs->stack, i); ++ if (p != pkg) ++ msg(verb, "_ <- %s", p->name); + } +- msg(4, "_\n"); ++ msg(verb, "_\n"); + + l_end: + pkg_set_color(pkg, PKG_COLOR_BLACK); + pkg_clr_prereqed(pkg); +- msgn(4, "push %s", pkg_snprintf_s(pkg)); ++ msgn(verb, "push %s", pkg_snprintf_s(pkg)); + n_array_push(vs->ordered_pkgs, pkg); + if (last_stack_i != -1) + for (i=last_stack_i; i < n_array_size(vs->stack); i++) { +@@ -198,8 +187,14 @@ + return 0; + } + ++static void mapfn_clean_pkg_color(struct pkg *pkg) ++{ ++ pkg_set_color(pkg, PKG_COLOR_WHITE); ++ pkg_clr_prereqed(pkg); ++} ++ + static int do_order(tn_array *pkgs, tn_array **ordered_pkgs, +- unsigned reqpkg_flag) ++ unsigned reqpkg_flag, int verbose_level) + { + struct pkg *pkg; + struct visit_install_order_s vs; +@@ -209,6 +204,7 @@ + // (tn_fn_free)pkg_free, NULL); + vs.nerrors = 0; + vs.stack = n_array_new(128, NULL, NULL); ++ vs.verbose_level = verbose_level; + + n_array_map(pkgs, (tn_fn_map1)mapfn_clean_pkg_color); + +@@ -230,20 +226,21 @@ + + + /* RET: number of detected loops */ +-int packages_order(tn_array *pkgs, tn_array **ordered_pkgs, int ordertype) ++static int do_packages_order(tn_array *pkgs, tn_array **ordered_pkgs, int ordertype, ++ int verbose_level) + { +- tn_array *ordered = NULL; +- int nloops, verbose; ++ tn_array *preordered = NULL; + unsigned reqpkg_flag = 0; ++ int nloops; + + n_assert(n_array_ctl_get_cmpfn(pkgs) == (tn_fn_cmp)pkg_cmp_name_evr_rev); +- /* insertion sort - assuming pkgs are already sorted ++ /* insertion sort - assuming pkgs is already sorted + by pkg_cmp_pri_name_evr_rev() */ + n_array_isort_ex(pkgs, (tn_fn_cmp)pkg_cmp_pri_name_evr_rev); +- +- verbose = poldek_set_verbose(-10); +- do_order(pkgs, &ordered, 0); +- poldek_set_verbose(verbose); ++ ++ /* Preordering packages using Requires: */ ++ msgn(verbose_level + 2, "Preordering packages..."); ++ do_order(pkgs, &preordered, 0, verbose_level + 2); + + switch (ordertype) { + case PKGORDER_INSTALL: +@@ -257,14 +254,45 @@ + default: + n_assert(0); + } ++ msgn(verbose_level + 2, "Ordering packages..."); + *ordered_pkgs = NULL; +- nloops = do_order(ordered, ordered_pkgs, reqpkg_flag); ++ nloops = do_order(preordered, ordered_pkgs, reqpkg_flag, verbose_level + 1); + +- n_array_free(ordered); ++ n_array_free(preordered); + n_array_isort(pkgs); + + return nloops; + } + ++int packages_order(tn_array *pkgs, tn_array **ordered, int ordertype) ++{ ++ return do_packages_order(pkgs, ordered, ordertype, 3); ++} ++ ++int packages_order_and_verify(tn_array *pkgs, tn_array **ordered, int ordertype, ++ int verbose_level) ++{ ++ int nloops, i; + ++ msgn(verbose_level, _("Verifying packages ordering...")); + ++ nloops = do_packages_order(pkgs, ordered, ordertype, verbose_level); ++ ++ if (nloops) { ++ logn(LOGERR, ngettext("%d prerequirement loop detected", ++ "%d prerequirement loops detected", ++ nloops), nloops); ++ ++ } else { ++ msgn(verbose_level, _("No loops -- OK")); ++ } ++ ++ ++ msgn(verbose_level, "Installation order:"); ++ for (i=0; i < n_array_size(*ordered); i++) { ++ struct pkg *pkg = n_array_nth(*ordered, i); ++ msgn(verbose_level, "%d. %s", i, pkg_id(pkg)); ++ } ++ msg(verbose_level, "\n"); ++ return nloops == 0; ++} +Index: pkgset-req.c +=================================================================== +RCS file: /cvsroot/poldek/poldek/pkgset-req.c,v +retrieving revision 1.45 +retrieving revision 1.46 +diff -u -u -r1.45 -r1.46 +--- pkgset-req.c 20 Aug 2006 21:13:19 -0000 1.45 ++++ pkgset-req.c 11 Sep 2006 21:47:45 -0000 1.46 +@@ -11,7 +11,7 @@ + */ + + /* +- $Id$ ++ $Id$ + */ + + #include <limits.h> +@@ -332,13 +332,24 @@ + } else { /* n is 0 */ + tn_array *pkgs; + if ((pkgs = pkgset_search_reqdir(ps, NULL, reqname))) { ++ int i; + n = 0; ++ ++ for (i=0; i < n_array_size(pkgs); i++) { ++ pkgsbuf[n++] = n_array_nth(pkgs, i); ++ if (n == pkgsbuf_size) ++ break; ++ } ++ ++/* XXX: TOFIX: pkgsbuf is not free()d by caller, so pkg _refcnts must ++ be decreased here */ ++#if 0 + while (n_array_size(pkgs)) { + pkgsbuf[n++] = n_array_shift(pkgs); + if (n == pkgsbuf_size) + break; + } +- ++#endif + *npkgs = n; + if (n) { + matched = 1; +Index: pkgset.h +=================================================================== +RCS file: /cvsroot/poldek/poldek/pkgset.h,v +retrieving revision 1.59 +retrieving revision 1.60 +diff -u -u -r1.59 -r1.60 +--- pkgset.h 20 Aug 2006 18:14:58 -0000 1.59 ++++ pkgset.h 17 Dec 2006 17:33:25 -0000 1.60 +@@ -1,4 +1,4 @@ +-/* $Id$ */ ++/* $Id$ */ + #ifndef POLDEK_PKGSET_H + #define POLDEK_PKGSET_H + +@@ -38,14 +38,12 @@ + #define PKGORDER_INSTALL 1 + #define PKGORDER_UNINSTALL 2 + int packages_order(tn_array *pkgs, tn_array **ordered_pkgs, int ordertype); +-//int packages_order(tn_array *pkgs, tn_array **ordered_pkgs); ++ ++int packages_order_and_verify(tn_array *pkgs, tn_array **ordered_pkgs, ++ int ordertype, int verbose_level); ++ + int pkgset_order(struct pkgset *ps, int verbose); + +-/* if set then: +- * - requirements matched even if requirement has version +- * while capability hasn't (RPM style) +- * - files with different modes only are not assumed as conflicts +- */ + + struct pm_ctx; + struct pkgset *pkgset_new(struct pm_ctx *ctx); +@@ -54,6 +52,12 @@ + int pkgset_load(struct pkgset *ps, int ldflags, tn_array *sources); + int pkgset_add_pkgdir(struct pkgset *ps, struct pkgdir *pkgdir); + ++ ++/* VRFY_MERCY - if set then: ++ * - requirements matched even if requirement has version ++ * while capability hasn't (RPM style) ++ * - files with different modes only are not assumed as conflicts ++ */ + #define PSET_VRFY_MERCY (1 << 0) + #define PSET_VRFY_PROMOTEPOCH (1 << 1) + +Index: poldek_ts.c +=================================================================== +RCS file: /cvsroot/poldek/poldek/poldek_ts.c,v +retrieving revision 1.58 +retrieving revision 1.59 +diff -u -u -r1.58 -r1.59 +--- poldek_ts.c 22 Aug 2006 22:46:32 -0000 1.58 ++++ poldek_ts.c 17 Dec 2006 17:33:25 -0000 1.59 +@@ -11,7 +11,7 @@ + */ + + /* +- $Id$ ++ $Id$ + */ + + #include <stdarg.h> +@@ -1116,6 +1116,12 @@ + if (ts->getop(ts, POLDEK_OP_VRFY_DEPS)) { + msgn(0, _("Verifying dependencies...")); + if (!packages_verify_dependecies(pkgs, ts->ctx->ps)) ++ nerr++; ++ } ++ ++ if (ts->getop(ts, POLDEK_OP_VRFY_ORDER)) { ++ tn_array *ordered = NULL; ++ if (!packages_order_and_verify(pkgs, &ordered, PKGORDER_INSTALL, 1)) + nerr++; + } + +Index: poldek_ts.h +=================================================================== +RCS file: /cvsroot/poldek/poldek/poldek_ts.h,v +retrieving revision 1.35 +retrieving revision 1.36 +diff -u -u -r1.35 -r1.36 +--- poldek_ts.h 21 Aug 2006 14:17:44 -0000 1.35 ++++ poldek_ts.h 17 Dec 2006 21:53:37 -0000 1.36 +@@ -1,4 +1,4 @@ +-/* $Id$ */ ++/* $Id$ */ + #ifndef POLDEK_LIB_TX_H + #define POLDEK_LIB_TX_H + +@@ -27,8 +27,9 @@ + enum poldek_ts_opt { + POLDEK_OP_NULL = 0, + +- POLDEK_OP_UNIQN, /* --uniqn */ +- POLDEK_OP_VRFY_DEPS, /* -V */ ++ POLDEK_OP_UNIQN, /* --uniqn */ ++ POLDEK_OP_VRFY_DEPS, /* -V */ ++ POLDEK_OP_VRFY_ORDER, /* --verify=order */ + POLDEK_OP_VRFY_CNFLS, /* --verify=conflicts */ + POLDEK_OP_VRFY_FILECNFLS, /* --verify=file-conflicts */ + POLDEK_OP_VRFY_FILEORPHANS, /* --verify=file-orphans */ +Index: cli/install.c +=================================================================== +RCS file: /cvsroot/poldek/poldek/cli/install.c,v +retrieving revision 1.40 +retrieving revision 1.41 +diff -u -u -r1.40 -r1.41 +--- cli/install.c 6 Nov 2005 19:26:27 -0000 1.40 ++++ cli/install.c 31 Aug 2006 18:59:27 -0000 1.41 +@@ -7,7 +7,7 @@ + */ + + /* +- $Id$ ++ $Id$ + */ + + #include <limits.h> +@@ -501,9 +501,26 @@ + break; + + case OPT_PM: { +- char opt[256]; +- n_snprintf(opt, sizeof(opt), "--%s", arg); +- poldek_ts_configure(ts, POLDEK_CONF_RPMOPTS, opt); ++ tn_array *tl = NULL; ++ int i; ++ ++ if ((tl = n_str_etokl_ext(arg, "\t ", "", "\"'", '\\')) == NULL) { ++ logn(LOGERR, _("%s: parse error"), arg); ++ return ARGP_ERR_UNKNOWN; ++ } ++ ++ for (i=0; i < n_array_size(tl); i++) { ++ char *a, opt[256], *dash = "--"; ++ ++ a = n_array_nth(tl, i); ++ if (*a == '-') ++ dash = ""; ++ ++ n_snprintf(opt, sizeof(opt), "%s%s", dash, a); ++ poldek_ts_configure(ts, POLDEK_CONF_RPMOPTS, opt); ++ } ++ ++ n_array_cfree(&tl); + } + break; + +Index: cli/op_verify.c +=================================================================== +RCS file: /cvsroot/poldek/poldek/cli/op_verify.c,v +retrieving revision 1.14 +retrieving revision 1.15 +diff -u -u -r1.14 -r1.15 +--- cli/op_verify.c 10 Jul 2005 13:30:17 -0000 1.14 ++++ cli/op_verify.c 17 Dec 2006 17:33:25 -0000 1.15 +@@ -11,7 +11,7 @@ <<Diff was trimmed, longer than 597 lines>> _______________________________________________ pld-cvs-commit mailing list pld-cvs-commit@lists.pld-linux.org http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit