=================================================================== RCS file: /cvsroot/installer/poldek/pkgset-install.c,v retrieving revision 1.147 retrieving revision 1.148 diff -u -r1.147 -r1.148 --- installer/poldek/pkgset-install.c 2005/10/24 15:30:40 1.147 +++ installer/poldek/pkgset-install.c 2005/11/01 19:36:36 1.148 #ifdef HAVE_CONFIG_H @@ -1174,7 +1174,9 @@ memset(&successor, 0, sizeof(successor)); if (process_as == PROCESS_AS_ORPHAN && upg->ts->getop(upg->ts, POLDEK_OP_AGGREEDY)) { - if (pkg_drags(pkg, ps, upg) == 0) { + int ndrags = pkg_drags(pkg, ps, upg); + DBGF("%s, ndrags %d\n", pkg_id(pkg), ndrags); + if (ndrags == 0 || 1) { /* XXX cond temporary disabled - needs test */ struct pkg *p; int is_marked = 0, ndragged = 0, by_obsoletes = 0; @@ -1186,9 +1188,10 @@ successor.realpkg = p; successor.by_obsoletes = by_obsoletes; - /* do not follow successor if package drags something and - is not marked */ - if (p && (ndragged = pkg_drags(p, ps, upg)) > 0 && is_marked == 0) { + /* do not follow successor if it drags more packages than orphaned one + * and successor is not marked */ + + if (p && (ndragged = pkg_drags(p, ps, upg)) > ndrags && is_marked == 0) { DBGF("OMIT select_successor %s -> %s (%d)\n", pkg_id(pkg), pkg_id(p), ndragged); p = NULL; =================================================================== RCS file: /cvsroot/installer/poldek/vfile/misc.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- installer/poldek/vfile/misc.c 2005/07/17 15:04:34 1.11 +++ installer/poldek/vfile/misc.c 2005/11/02 19:45:40 1.12 @@ -58,7 +58,7 @@ p = path; p++; - ndots = 0; + ndots = -1; while (*p) { switch (*p) { @@ -71,11 +71,12 @@ break; case '.': - ndots++; + if (ndots >= 0) + ndots++; break; default: - ndots = 0; + ndots = -1; if (!isalnum(*p) && strchr("-+/._@!~", *p) == NULL) { vf_logerr("%s:%c non alphanumeric characters not allowed\n", =================================================================== RCS file: /cvsroot/installer/poldek/vfile/extcompr.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- installer/poldek/vfile/extcompr.c 2005/05/15 15:46:59 1.7 +++ installer/poldek/vfile/extcompr.c 2005/11/02 20:10:36 1.8 @@ -195,7 +195,7 @@ if (uncompr == NULL) return -1; - if (*vfile_verbose) + if (*vfile_verbose > 0) vf_loginfo(_("Decompressing %s...\n"), n_basenam(path)); return vf_do_compr(uncompr, "-d", path, destpath); } =================================================================== RCS file: /cvsroot/installer/poldek/cli/uninstall.c,v retrieving revision 1.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- installer/poldek/cli/uninstall.c 2005/07/12 17:29:09 1.25 +++ installer/poldek/cli/uninstall.c 2005/11/05 00:14:38 1.26 @@ -171,6 +171,7 @@ ts->setop(ts, POLDEK_OP_GREEDY, bool); } + break; case 't': if (ts->getop(ts, POLDEK_OP_TEST)) =================================================================== RCS file: /cvsroot/installer/poldek/vfcompr,v retrieving revision 1.4 retrieving revision 1.6 diff -u -r1.4 -r1.6 --- installer/poldek/vfcompr 2004/07/05 19:15:10 1.4 +++ installer/poldek/vfcompr 2005/11/02 20:25:37 1.6 @@ -19,7 +22,7 @@ typeset src=$1 typeset dest=$2 - md5file="${src}-vfcompr.md5" + md5file="${dest}-vfcompr.md5" #echo "$md5file" if [ -f $dest -a -f "$md5file" ]; then #echo md5sum --check "$md5file" =================================================================== RCS file: /cvsroot/poldek/poldek/pkg.c,v retrieving revision 1.107 retrieving revision 1.108 diff -u -r1.107 -r1.108 --- poldek/poldek/pkg.c 2005/10/13 15:39:27 1.107 +++ poldek/poldek/pkg.c 2006/03/18 16:29:00 1.108 @@ -1,5 +1,5 @@ /* - Copyright (C) 2000 - 2004 Pawel A. Gajda + Copyright (C) 2000 - 2006 Pawel A. Gajda (mis@k2.net.pl) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2 as @@ -15,7 +15,7 @@ */ /* - $Id$ + $Id$ */ #ifdef HAVE_CONFIG_H @@ -694,8 +694,8 @@ int n; DBGF("\npkg_caps_match_req %s %s\n", pkg_snprintf_s(pkg), - capreq_snprintf_s(req)); - + capreq_snprintf_s(req)); + if (pkg->caps == NULL || n_array_size(pkg->caps) == 0) return 0; /* not match */ @@ -703,40 +703,25 @@ return 0; } else { - struct capreq *cap; int i; + for (i = n; i < n_array_size(pkg->caps); i++) { + struct capreq *cap = n_array_nth(pkg->caps, i); - cap = n_array_nth(pkg->caps, n); - if (cap_xmatch_req(cap, req, flags)) { - DBGF("chk%d (%s-%s-%s) -> match (flags=%d)\n", n, capreq_name(cap), - capreq_ver(cap), capreq_rel(cap), flags); - return 1; - } - n++; - - for (i = n; icaps); i++) { - struct capreq *cap; - - cap = n_array_nth(pkg->caps, n); - if (strcmp(capreq_name(cap), capreq_name(req)) != 0) { - DBGF("chk%d %s-%s-%s -> NOT match IRET\n", i, - capreq_name(cap), capreq_ver(cap), - capreq_rel(cap)); + /* names not equal -> return with false; + eq test omitting for first cap */ + if (i > n && n_str_ne(capreq_name(cap), capreq_name(req))) { + DBGF(" cap[%d] %s -> NOT match, IRET\n", i, + capreq_snprintf_s(cap)); return 0; } - - + if (cap_xmatch_req(cap, req, flags)) { - DBGMSG("chk %s-%s-%s -> match\n", capreq_name(cap), - capreq_ver(cap), capreq_rel(cap)); + DBGF(" cap[%d] %s -> match\n", i, capreq_snprintf_s(cap)); return 1; - } else { - DBGMSG("chk%d %s-%s-%s -> NOT match\n", i, - capreq_name(cap), capreq_ver(cap), - capreq_rel(cap)); } + + DBGF(" cap[%d] %s -> NOT match\n", i, capreq_snprintf_s(cap)); } - DBGMSG("NONE\n"); } return 0; --- poldek/poldek/pm/pkgdb.c 2005/10/24 15:25:58 1.21 +++ poldek/poldek/pm/pkgdb.c 2006/03/18 15:18:04 1.22 @@ -11,7 +11,7 @@ */ /* - $Id$ + $Id$ */ #include @@ -440,6 +440,9 @@ tn_array *unistdbpkgs, unsigned ldflags) { tn_array *dbpkgs = NULL; + + n_assert(db); + n_assert(cap); pkgdb_search(db, &dbpkgs, PMTAG_CAP, capreq_name(cap), unistdbpkgs, ldflags); return dbpkgs; diff -u poldek/poldek/uninstall.c poldek/poldek/uninstall.c --- poldek/poldek/uninstall.c 2006/03/18 15:18:04 1.38 +++ poldek/poldek/uninstall.c 2006/03/18 17:03:48 1.39 @@ -1,5 +1,5 @@ /* - Copyright (C) 2000 - 2005 Pawel A. Gajda + Copyright (C) 2000 - 2006 Pawel A. Gajda This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2 as @@ -11,7 +11,7 @@ */ /* - $Id$ + $Id$ */ #include @@ -407,7 +407,7 @@ tn_array *dbpkgs; int i, nmatches = 0; - + n_assert(cr); DBGF("get_provides %s\n", capreq_snprintf_s(cr)); dbpkgs = pkgdb_get_provides_dbpkgs(ts->db, cr, NULL, uninst_LDFLAGS); @@ -431,7 +431,8 @@ } else { /* with version */ if (ts->getop(ts, POLDEK_OP_CAPLOOKUP)) { if (pkg_xmatch_req(dbpkg, cr, POLDEK_MA_PROMOTE_REQEPOCH)) - matched = 1; + matched = 1; + } else { if (strcmp(dbpkg->name, capreq_name(cr)) == 0) { DBGF("n (%s, %s) %d\n", dbpkg->name, @@ -457,15 +458,20 @@ return nmatches; } -static int resolve_package(struct uninstall_ctx *uctx, struct poldek_ts *ts, const char *mask) +static int resolve_package(struct uninstall_ctx *uctx, struct poldek_ts *ts, + const char *mask) { char *p; struct capreq *cr, *cr_evr; int resolved = 0; cr = NULL; cr_evr = NULL; - - if ((p = strchr(mask, '#')) == NULL) { + + DBGF("mask=%s\n", mask); + /* No EVR mask or empty EVR (last char '#') */ + if ((p = strchr(mask, '#')) == NULL || *(p + 1) == '\0') { + if (p) + *p = '\0'; capreq_new_name_a(mask, cr); } else { @@ -479,8 +485,10 @@ *p = '\0'; p++; - if (poldek_util_parse_evr(p, &epoch, &ver, &rel)) + if (poldek_util_parse_evr(p, &epoch, &ver, &rel)) { cr = cr_evr = capreq_new(NULL, tmp, epoch, ver, rel, REL_EQ, 0); + DBGF("cap=%s\n", capreq_snprintf_s(cr)); + } } if (do_resolve_package(uctx, ts, mask, cr)) @@ -529,7 +537,6 @@ int32_t e = 0; n_strdupap(mask, &tmp); - if (poldek_util_parse_nevr(tmp, &n, &e, &v, &r)) { if (e) n_snprintf(nmask, sizeof(nmask), "%s#%d:%s-%s", n, e, v, r); @@ -538,7 +545,7 @@ msgn(2, " Trying %s\n", nmask); DBGF("try %s => %s (%s, %s, %s)\n", mask, nmask, n, v, r); - matched = resolve_package(uctx, ts, tmp); + matched = resolve_package(uctx, ts, nmask); } } } --- poldek/poldek/conf.c 2005/11/05 17:47:55 1.79 +++ poldek/poldek/conf.c 2006/03/18 15:27:47 1.80 @@ -1,5 +1,5 @@ /* - Copyright (C) 2000 - 2005 Pawel A. Gajda + Copyright (C) 2000 - 2006 Pawel A. Gajda This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2 as @@ -137,9 +137,15 @@ sep = " \t,"; p = v = n_str_tokl(vstr, sep); - if (v == NULL) + + if (v == NULL) /* n_str_tokl error */ return 0; + if (*v == NULL) { /* empty option value */ + n_str_tokl_free(v); + return 1; + } + if (n_hash_exists(ht, name)) { opt = n_hash_get(ht, name); @@ -166,6 +172,7 @@ } p++; } + n_str_tokl_free(v); return 1; } --- poldek/poldek/cli/main.c 2005/11/06 19:26:27 1.54 +++ poldek/poldek/cli/main.c 2006/03/18 15:55:37 1.55 @@ -115,8 +115,8 @@ {"upconf", OPT_UPCONF, 0, 0, N_("Update remote configuration files (if any)"), OPT_GID }, -{"version", OPT_BANNER, 0, 0, N_("Display program version information and exit"), - OPT_GID }, +{"version", OPT_BANNER, 0, OPTION_HIDDEN, + N_("Display program version information and exit"), OPT_GID }, {"log", OPT_LOG, "FILE", 0, N_("Log program messages to FILE"), OPT_GID }, {"runas", OPT_RUNAS, "USER", 0, N_("Run program as user USER"), OPT_GID },