poldek: poldek/pm/mod.h, poldek/pm/pkgdb.c, poldek/pm/pm.c, poldek...
mis
mis at pld-linux.org
Sun Jul 8 18:42:33 CEST 2007
Author: mis Date: Sun Jul 8 16:42:33 2007 GMT
Module: poldek Tag: HEAD
---- Log message:
- more ascetic API - killed all pkgdb_get*(); other minor cleanups
---- Files affected:
poldek/poldek/pm:
mod.h (1.13 -> 1.14) , pkgdb.c (1.24 -> 1.25) , pm.c (1.11 -> 1.12) , pm.h (1.20 -> 1.21)
poldek/poldek/pm/pset:
pm_pset.h (1.9 -> 1.10) , pset.c (1.24 -> 1.25)
poldek/poldek/pm/rpm:
pm_rpm.h (1.18 -> 1.19) , rpminstall.c (1.23 -> 1.24)
---- Diffs:
================================================================
Index: poldek/poldek/pm/mod.h
diff -u poldek/poldek/pm/mod.h:1.13 poldek/poldek/pm/mod.h:1.14
--- poldek/poldek/pm/mod.h:1.13 Mon Jan 8 18:21:59 2007
+++ poldek/poldek/pm/mod.h Sun Jul 8 18:42:28 2007
@@ -49,10 +49,12 @@
int (*pkg_vercmp)(const char *one, const char *two);
- int (*pm_install)(struct pkgdb *db, tn_array *pkgs, tn_array *pkgs_toremove,
- struct poldek_ts *ts);
+ int (*pm_install)(struct pkgdb *db, const tn_array *pkgs,
+ const tn_array *pkgs_toremove, struct poldek_ts *ts);
+
+ int (*pm_uninstall)(struct pkgdb *db, const tn_array *pkgs,
+ struct poldek_ts *ts);
- int (*pm_uninstall)(struct pkgdb *db, tn_array *pkgs, struct poldek_ts *ts);
int (*pkg_verify_sign)(void *modh, const char *path, unsigned flags);
================================================================
Index: poldek/poldek/pm/pkgdb.c
diff -u poldek/poldek/pm/pkgdb.c:1.24 poldek/poldek/pm/pkgdb.c:1.25
--- poldek/poldek/pm/pkgdb.c:1.24 Tue Jun 19 22:39:45 2007
+++ poldek/poldek/pm/pkgdb.c Sun Jul 8 18:42:28 2007
@@ -320,7 +320,7 @@
return 0;
}
-static int dbpkg_array_has(tn_array *pkgs, int recno)
+static int dbpkg_array_has(const tn_array *pkgs, int recno)
{
struct pkg tmp;
tmp.recno = recno;
@@ -331,7 +331,7 @@
int pkgdb_search(struct pkgdb *db, tn_array **dbpkgs,
enum pkgdb_it_tag tag,
const char *value,
- tn_array *dbpkgs_skiplist,
+ const tn_array *exclude,
unsigned ldflags)
{
struct pkgdb_it it;
@@ -342,7 +342,7 @@
while ((dbrec = pkgdb_it_get(&it))) {
struct pkg *pkg;
- if (dbpkgs_skiplist && dbpkg_array_has(dbpkgs_skiplist, dbrec->recno))
+ if (exclude && dbpkg_array_has(exclude, dbrec->recno))
continue;
if (dbpkgs == NULL) {
@@ -368,53 +368,9 @@
return nfound;
}
-tn_array *pkgdb_get_conflicted_dbpkgs(struct pkgdb *db,
- const struct capreq *cap,
- tn_array *unistdbpkgs, unsigned ldflags)
-{
- tn_array *dbpkgs = NULL;
- pkgdb_search(db, &dbpkgs, PMTAG_CNFL, capreq_name(cap),
- unistdbpkgs, ldflags);
- return dbpkgs;
-}
-
-
-tn_array *pkgdb_get_provides_dbpkgs(struct pkgdb *db, const struct capreq *cap,
- 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;
-}
-
-
-tn_array *pkgdb_get_file_conflicted_dbpkgs(struct pkgdb *db, const char *path,
- tn_array *cnfldbpkgs,
- tn_array *unistdbpkgs,
- unsigned ldflags)
-{
- pkgdb_search(db, &cnfldbpkgs, PMTAG_FILE, path,
- unistdbpkgs, ldflags);
- return cnfldbpkgs;
-}
-
-int pkgdb_get_pkgs_requires_capn(struct pkgdb *db, tn_array *dbpkgs,
- const char *capname,
- tn_array *unistdbpkgs, unsigned ldflags)
-{
- return pkgdb_search(db, &dbpkgs, PMTAG_REQ, capname,
- unistdbpkgs, ldflags);
-}
-
-
-static
-int header_evr_match_req(struct pm_ctx *ctx, void *hdr,
- const struct capreq *req)
+static int header_evr_match_req(struct pm_ctx *ctx, void *hdr,
+ const struct capreq *req)
{
struct pkg pkg;
@@ -435,9 +391,8 @@
}
-static
-int header_cap_match_req(struct pm_ctx *ctx, void *hdr,
- const struct capreq *req, int strict)
+static int header_cap_match_req(struct pm_ctx *ctx, void *hdr,
+ const struct capreq *req, int strict)
{
struct pkg pkg;
int rc;
@@ -457,10 +412,9 @@
return rc;
}
-static
-int db_match(struct pkgdb *db, enum pkgdb_it_tag tag,
- const struct capreq *cap, tn_array *dbpkgs_skiplist,
- int strict)
+static int db_match(struct pkgdb *db, enum pkgdb_it_tag tag,
+ const struct capreq *cap, const tn_array *exclude,
+ int strict)
{
struct pkgdb_it it;
const struct pm_dbrec *dbrec;
@@ -470,7 +424,7 @@
pkgdb_it_init(db, &it, tag, capreq_name(cap));
while ((dbrec = pkgdb_it_get(&it))) {
- if (dbpkgs_skiplist && dbpkg_array_has(dbpkgs_skiplist, dbrec->recno))
+ if (exclude && dbpkg_array_has(exclude, dbrec->recno))
continue;
if (is_file || header_cap_match_req(db->_ctx, dbrec->hdr, cap, strict)){
@@ -485,28 +439,29 @@
int pkgdb_match_req(struct pkgdb *db, const struct capreq *req, int strict,
- tn_array *skiplist)
+ const tn_array *exclude)
{
int is_file;
is_file = (*capreq_name(req) == '/' ? 1 : 0);
-
- if (!is_file && db_match(db, PMTAG_NAME, req, skiplist, strict))
+ //tracef(0, "%s %d", capreq_snprintf_s(req), n_array_size(exclude));
+
+ if (!is_file && db_match(db, PMTAG_NAME, req, exclude, strict))
return 1;
- if (db_match(db, PMTAG_CAP, req, skiplist, strict))
+ if (db_match(db, PMTAG_CAP, req, exclude, strict))
return 1;
- if (is_file && db_match(db, PMTAG_FILE, req, skiplist, strict))
+ if (is_file && db_match(db, PMTAG_FILE, req, exclude, strict))
return 1;
return 0;
}
-static
-int get_obsoletedby_cap(struct pkgdb *db, int tag, tn_array *dbpkgs,
- struct capreq *cap, unsigned ldflags)
+static int get_obsoletedby_cap(struct pkgdb *db, int tag, tn_array *dbpkgs,
+ struct capreq *cap,
+ const tn_array *exclude, unsigned ldflags)
{
struct pkgdb_it it;
const struct pm_dbrec *dbrec;
@@ -515,6 +470,10 @@
pkgdb_it_init(db, &it, tag, capreq_name(cap));
while ((dbrec = pkgdb_it_get(&it)) != NULL) {
int add = 0;
+
+ if (exclude && dbpkg_array_has(exclude, dbrec->recno))
+ continue;
+
if (dbpkg_array_has(dbpkgs, dbrec->recno))
continue;
@@ -531,6 +490,7 @@
n_assert(0);
break;
}
+
if (add) {
struct pkg *pkg;
if ((pkg = load_pkg(NULL, db, dbrec, ldflags))) {
@@ -545,16 +505,10 @@
return n;
}
-
-int pkgdb_get_obsoletedby_cap(struct pkgdb *db, tn_array *dbpkgs, struct capreq *cap,
- unsigned ldflags)
-{
- return get_obsoletedby_cap(db, PMTAG_NAME, dbpkgs, cap, ldflags);
-}
-
-static
-int get_obsoletedby_pkg_nevr(struct pkgdb *db, tn_array *dbpkgs,
- const struct pkg *pkg, unsigned ldflags, int rev)
+static int get_obsoletedby_pkg_nevr(struct pkgdb *db, tn_array *dbpkgs,
+ const struct pkg *pkg,
+ const tn_array *exclude,
+ unsigned ldflags, int rev)
{
struct capreq *self_cap;
int n, relflags = REL_EQ | REL_LT;
@@ -564,20 +518,20 @@
self_cap = capreq_new(NULL, pkg->name, pkg->epoch, pkg->ver, pkg->rel,
relflags, 0);
- n = pkgdb_get_obsoletedby_cap(db, dbpkgs, self_cap, ldflags);
+ n = get_obsoletedby_cap(db, PMTAG_NAME, dbpkgs, self_cap, exclude, ldflags);
capreq_free(self_cap);
return n;
}
-int pkgdb_get_obsoletedby_pkg(struct pkgdb *db, tn_array *dbpkgs,
- const struct pkg *pkg, unsigned flags,
- unsigned ldflags)
+int pkgdb_q_obsoletedby_pkg(struct pkgdb *db, tn_array *dbpkgs,
+ const struct pkg *pkg, unsigned flags,
+ const tn_array *exclude, unsigned ldflags)
{
int i, n;
n_assert(flags & PKGDB_GETF_OBSOLETEDBY_NEVR);
- n = get_obsoletedby_pkg_nevr(db, dbpkgs, pkg, ldflags,
+ n = get_obsoletedby_pkg_nevr(db, dbpkgs, pkg, exclude, ldflags,
flags & PKGDB_GETF_OBSOLETEDBY_REV);
if ((flags & PKGDB_GETF_OBSOLETEDBY_OBSL) == 0)
@@ -585,16 +539,18 @@
if (pkg->cnfls == NULL)
return n;
-
+
+ /* Obsoletes */
for (i=0; i < n_array_size(pkg->cnfls); i++) {
struct capreq *cnfl = n_array_nth(pkg->cnfls, i);
if (!capreq_is_obsl(cnfl))
continue;
+
/* FIXME: is reverse match should be performed there too? */
- n += get_obsoletedby_cap(db, PMTAG_NAME, dbpkgs, cnfl, ldflags);
+ n += get_obsoletedby_cap(db, PMTAG_NAME, dbpkgs, cnfl, exclude, ldflags);
#ifdef HAVE_RPM_4_1 /* TODO -- code this in pm's module */
- n += get_obsoletedby_cap(db, PMTAG_CAP, dbpkgs, cnfl, ldflags);
+ n += get_obsoletedby_cap(db, PMTAG_CAP, dbpkgs, cnfl, exclude, ldflags);
#endif
}
@@ -626,7 +582,7 @@
int pkgdb_q_what_requires(struct pkgdb *db, tn_array *dbpkgs,
const struct capreq *cap,
- tn_array *skiplist, unsigned ldflags, int strict)
+ const tn_array *exclude, unsigned ldflags, int strict)
{
struct pkgdb_it it;
const struct pm_dbrec *dbrec;
@@ -636,8 +592,9 @@
while ((dbrec = pkgdb_it_get(&it)) != NULL) {
struct pkg *pkg;
- if (skiplist && dbpkg_array_has(skiplist, dbrec->recno))
+ if (exclude && dbpkg_array_has(exclude, dbrec->recno))
continue;
+
#if ENABLE_TRACE
pkg = load_pkg(NULL, db, dbrec, ldflags);
DBGF("%s <- %s ????\n", capreq_name(cap), pkg_snprintf_s(pkg));
@@ -655,12 +612,14 @@
pkg_free(pkg);
} else if (strict && capreq_versioned(cap) &&
- !pkg_requires_versioned_cap(pkg, cap)) {
+ !pkg_requires_cap(pkg, cap)) {
DBGF("skip %s (%s)\n", pkg_snprintf_s(pkg), capreq_snprintf_s(cap));
pkg_free(pkg);
} else {
+ DBGF("%s <- %s\n", capreq_snprintf_s(cap), pkg_id(pkg));
n_array_push(dbpkgs, pkg);
+ n_array_sort(dbpkgs);
n++;
#if ENABLE_TRACE
{
@@ -683,7 +642,7 @@
int pkgdb_q_is_required(struct pkgdb *db, const struct capreq *cap,
- tn_array *skiplist)
+ const tn_array *exclude)
{
struct pkgdb_it it;
const struct pm_dbrec *dbrec;
@@ -697,7 +656,7 @@
while ((dbrec = pkgdb_it_get(&it)) != NULL) {
struct pkg *pkg;
- if (skiplist && dbpkg_array_has(skiplist, dbrec->recno))
+ if (exclude && dbpkg_array_has(exclude, dbrec->recno))
continue;
if ((pkg = load_pkg(NULL, db, dbrec, ldflags))) {
================================================================
Index: poldek/poldek/pm/pm.c
diff -u poldek/poldek/pm/pm.c:1.11 poldek/poldek/pm/pm.c:1.12
--- poldek/poldek/pm/pm.c:1.11 Mon Jan 8 18:22:00 2007
+++ poldek/poldek/pm/pm.c Sun Jul 8 18:42:28 2007
@@ -59,8 +59,8 @@
}
-int pm_pminstall(struct pkgdb *db, tn_array *pkgs, tn_array *pkgs_toremove,
- struct poldek_ts *ts)
+int pm_pminstall(struct pkgdb *db, const tn_array *pkgs,
+ const tn_array *pkgs_toremove, struct poldek_ts *ts)
{
int i, rc;
char path[PATH_MAX];
@@ -89,7 +89,7 @@
return rc;
}
-int pm_pmuninstall(struct pkgdb *db, tn_array *pkgs, struct poldek_ts *ts)
+int pm_pmuninstall(struct pkgdb *db, const tn_array *pkgs, struct poldek_ts *ts)
{
return db->_ctx->mod->pm_uninstall(db, pkgs, ts);
}
================================================================
Index: poldek/poldek/pm/pm.h
diff -u poldek/poldek/pm/pm.h:1.20 poldek/poldek/pm/pm.h:1.21
--- poldek/poldek/pm/pm.h:1.20 Thu Jun 21 18:47:45 2007
+++ poldek/poldek/pm/pm.h Sun Jul 8 18:42:28 2007
@@ -29,10 +29,10 @@
char *pm_dbpath(struct pm_ctx *ctx, char *path, size_t size);
time_t pm_dbmtime(struct pm_ctx *ctx, const char *path);
-int pm_pminstall(struct pkgdb *db, tn_array *pkgs, tn_array *pkgs_toremove,
- struct poldek_ts *ts);
+int pm_pminstall(struct pkgdb *db, const tn_array *pkgs,
+ const tn_array *pkgs_toremove, struct poldek_ts *ts);
-int pm_pmuninstall(struct pkgdb *db, tn_array *pkgs, struct poldek_ts *ts);
+int pm_pmuninstall(struct pkgdb *db, const tn_array *pkgs, struct poldek_ts *ts);
int pm_verify_signature(struct pm_ctx *ctx, const char *path, unsigned flags);
@@ -79,7 +79,7 @@
const struct poldek_ts *ts);
int pkgdb_match_req(struct pkgdb *db, const struct capreq *req, int strict,
- tn_array *excloffs);
+ const tn_array *exclude);
struct pm_dbrec {
unsigned recno;
@@ -142,48 +142,31 @@
/* Search database for value of a tag ignoring packages
- in dbpkgs_skiplist. Found packages are added to dbpkgs
+ from 'exclude' array. Found packages are added to dbpkgs
array (created if NULL), returns number of packages found */
int pkgdb_search(struct pkgdb *db, tn_array **dbpkgs,
enum pkgdb_it_tag tag, const char *value,
- tn_array *dbpkgs_skiplist, unsigned ldflags);
+ const tn_array *exclude, unsigned ldflags);
int pkgdb_q_what_requires(struct pkgdb *db, tn_array *dbpkgs,
const struct capreq *cap,
- tn_array *skiplist, unsigned ldflags, int strict);
+ const tn_array *exclude, unsigned ldflags, int strict);
int pkgdb_q_is_required(struct pkgdb *db, const struct capreq *cap,
- tn_array *skiplist);
-
-
-int pkgdb_get_pkgs_requires_capn(struct pkgdb *db,
- tn_array *dbpkgs, const char *capname,
- tn_array *unistdbpkgs, unsigned ldflags);
+ const tn_array *exclude);
#define PKGDB_GETF_OBSOLETEDBY_NEVR (1 << 0) /* by NEVR only */
#define PKGDB_GETF_OBSOLETEDBY_OBSL (1 << 1) /* by Obsoletes */
#define PKGDB_GETF_OBSOLETEDBY_REV (1 << 10) /* reverse match */
+
/*
adds to dbpkgs packages obsoleted by pkg
*/
-int pkgdb_get_obsoletedby_pkg(struct pkgdb *db, tn_array *dbpkgs,
- const struct pkg *pkg, unsigned getflags,
- unsigned ldflags);
-
-tn_array *pkgdb_get_conflicted_dbpkgs(struct pkgdb *db,
- const struct capreq *cap,
- tn_array *unistdbpkgs, unsigned ldflags);
-
-tn_array *pkgdb_get_provides_dbpkgs(struct pkgdb *db, const struct capreq *cap,
- tn_array *unistdbpkgs, unsigned ldflags);
-
-/* returns installed packages which conflicts with given path */
-tn_array *pkgdb_get_file_conflicted_dbpkgs(struct pkgdb *db, const char *path,
- tn_array *cnfldbpkgs,
- tn_array *unistdbpkgs,
- unsigned ldflags);
+int pkgdb_q_obsoletedby_pkg(struct pkgdb *db, tn_array *dbpkgs,
+ const struct pkg *pkg, unsigned flags,
+ const tn_array *exclude, unsigned ldflags);
enum pm_machine_score_tag {
================================================================
Index: poldek/poldek/pm/pset/pm_pset.h
diff -u poldek/poldek/pm/pset/pm_pset.h:1.9 poldek/poldek/pm/pset/pm_pset.h:1.10
--- poldek/poldek/pm/pset/pm_pset.h:1.9 Sun Aug 20 20:14:58 2006
+++ poldek/poldek/pm/pset/pm_pset.h Sun Jul 8 18:42:28 2007
@@ -13,12 +13,12 @@
int pm_pset_configure(void *pm_pset, const char *key, void *val);
-int pm_pset_packages_install(struct pkgdb *db,
- tn_array *pkgs, tn_array *pkgs_toremove,
+int pm_pset_packages_install(struct pkgdb *db, const tn_array *pkgs,
+ const tn_array *pkgs_toremove,
struct poldek_ts *ts);
-int pm_pset_packages_uninstall(struct pkgdb *db,
- tn_array *pkgs, struct poldek_ts *ts);
+int pm_pset_packages_uninstall(struct pkgdb *db, const tn_array *pkgs,
+ struct poldek_ts *ts);
void *pm_pset_opendb(void *pm_pset, void *dbh,
const char *dbpath, const char *rootdir, mode_t mode,
================================================================
Index: poldek/poldek/pm/pset/pset.c
diff -u poldek/poldek/pm/pset/pset.c:1.24 poldek/poldek/pm/pset/pset.c:1.25
--- poldek/poldek/pm/pset/pset.c:1.24 Sun Jul 1 23:04:27 2007
+++ poldek/poldek/pm/pset/pset.c Sun Jul 8 18:42:28 2007
@@ -625,8 +625,8 @@
return 1;
}
-int pm_pset_packages_install(struct pkgdb *pdb,
- tn_array *pkgs, tn_array *pkgs_toremove,
+int pm_pset_packages_install(struct pkgdb *pdb, const tn_array *pkgs,
+ const tn_array *pkgs_toremove,
struct poldek_ts *ts)
{
struct pm_psetdb *db = pdb->dbh;
@@ -704,8 +704,8 @@
}
-int pm_pset_packages_uninstall(struct pkgdb *pdb,
- tn_array *pkgs, struct poldek_ts *ts)
+int pm_pset_packages_uninstall(struct pkgdb *pdb, const tn_array *pkgs,
+ struct poldek_ts *ts)
{
struct pm_psetdb *db = pdb->dbh;
struct pkgdir *pkgdir;
================================================================
Index: poldek/poldek/pm/rpm/pm_rpm.h
diff -u poldek/poldek/pm/rpm/pm_rpm.h:1.18 poldek/poldek/pm/rpm/pm_rpm.h:1.19
--- poldek/poldek/pm/rpm/pm_rpm.h:1.18 Sat Jun 16 18:31:22 2007
+++ poldek/poldek/pm/rpm/pm_rpm.h Sun Jul 8 18:42:28 2007
@@ -56,11 +56,11 @@
int pm_rpm_dbdepdirs(void *pm_rpm, const char *rootdir, const char *dbpath,
tn_array *depdirs);
-int pm_rpm_packages_install(struct pkgdb *db,
- tn_array *pkgs, tn_array *pkgs_toremove,
- struct poldek_ts *ts);
-int pm_rpm_packages_uninstall(struct pkgdb *db,
- tn_array *pkgs, struct poldek_ts *ts);
+int pm_rpm_packages_install(struct pkgdb *db, const tn_array *pkgs,
+ const tn_array *pkgs_toremove, struct poldek_ts *ts);
+
+int pm_rpm_packages_uninstall(struct pkgdb *db, const tn_array *pkgs,
+ struct poldek_ts *ts);
#ifdef HAVE_RPM_4_1
# include <rpm/rpmcli.h>
================================================================
Index: poldek/poldek/pm/rpm/rpminstall.c
diff -u poldek/poldek/pm/rpm/rpminstall.c:1.23 poldek/poldek/pm/rpm/rpminstall.c:1.24
--- poldek/poldek/pm/rpm/rpminstall.c:1.23 Fri Jul 6 01:17:04 2007
+++ poldek/poldek/pm/rpm/rpminstall.c Sun Jul 8 18:42:28 2007
@@ -295,8 +295,8 @@
}
-int pm_rpm_packages_install(struct pkgdb *db,
- tn_array *pkgs, tn_array *pkgs_toremove,
+int pm_rpm_packages_install(struct pkgdb *db, const tn_array *pkgs,
+ const tn_array *pkgs_toremove,
struct poldek_ts *ts)
{
struct pm_rpm *pm = db->_ctx->modh;
@@ -405,8 +405,6 @@
pkg = n_array_nth(pkgs, i);
pkgpath = pkg->pkgdir->path;
- n_assert(pkg_is_marked(ts->pms, pkg));
-
pkg_filename(pkg, name, sizeof(name));
if (vf_url_type(pkgpath) == VFURL_PATH) {
len = n_snprintf(path, sizeof(path), "%s/%s", pkgpath, name);
@@ -482,8 +480,8 @@
return 0;
}
-int pm_rpm_packages_uninstall(struct pkgdb *db,
- tn_array *pkgs, struct poldek_ts *ts)
+int pm_rpm_packages_uninstall(struct pkgdb *db, const tn_array *pkgs,
+ struct poldek_ts *ts)
{
struct pm_rpm *pm = db->_ctx->modh;
char **argv;
================================================================
---- CVS-web:
http://cvs.pld-linux.org/poldek/poldek/pm/mod.h?r1=1.13&r2=1.14&f=u
http://cvs.pld-linux.org/poldek/poldek/pm/pkgdb.c?r1=1.24&r2=1.25&f=u
http://cvs.pld-linux.org/poldek/poldek/pm/pm.c?r1=1.11&r2=1.12&f=u
http://cvs.pld-linux.org/poldek/poldek/pm/pm.h?r1=1.20&r2=1.21&f=u
http://cvs.pld-linux.org/poldek/poldek/pm/pset/pm_pset.h?r1=1.9&r2=1.10&f=u
http://cvs.pld-linux.org/poldek/poldek/pm/pset/pset.c?r1=1.24&r2=1.25&f=u
http://cvs.pld-linux.org/poldek/poldek/pm/rpm/pm_rpm.h?r1=1.18&r2=1.19&f=u
http://cvs.pld-linux.org/poldek/poldek/pm/rpm/rpminstall.c?r1=1.23&r2=1.24&f=u
More information about the pld-cvs-commit
mailing list