SOURCES: poldek-cvs20070105.patch (NEW) - new from poldek cvs
arekm
arekm at pld-linux.org
Fri Jan 5 15:11:14 CET 2007
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 (mis at k2.net.pl)
++ Copyright (C) 2000-2007 Pawel A. Gajda (mis at pld-linux.org)
+
+ 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>>
More information about the pld-cvs-commit
mailing list