poldek: poldek/pm/mod.h, poldek/pm/pkgdb.c, poldek/pm/pm.h, poldek...
mis
mis at pld-linux.org
Thu Jan 31 02:39:19 CET 2008
Author: mis Date: Thu Jan 31 01:39:19 2008 GMT
Module: poldek Tag: HEAD
---- Log message:
- pset backend: with --justdn upgrade an index only
---- Files affected:
poldek/poldek/pm:
mod.h (1.15 -> 1.16) , pkgdb.c (1.27 -> 1.28) , pm.h (1.23 -> 1.24)
poldek/poldek/pm/pset:
mod.c (1.8 -> 1.9) , pm_pset.h (1.11 -> 1.12) , pset.c (1.28 -> 1.29)
poldek/poldek:
poldek_ts.c (1.71 -> 1.72)
---- Diffs:
================================================================
Index: poldek/poldek/pm/mod.h
diff -u poldek/poldek/pm/mod.h:1.15 poldek/poldek/pm/mod.h:1.16
--- poldek/poldek/pm/mod.h:1.15 Sat Jul 14 00:33:11 2007
+++ poldek/poldek/pm/mod.h Thu Jan 31 02:39:14 2008
@@ -36,7 +36,7 @@
const char *path, mode_t mode, tn_hash *kw);
void (*dbclose)(void *dbh);
- void (*dbtxbegin)(void *dbh);
+ void (*dbtxbegin)(void *dbh, struct poldek_ts *ts);
int (*dbtxcommit)(void *dbh);
void (*dbfree)(void *dbh);
================================================================
Index: poldek/poldek/pm/pkgdb.c
diff -u poldek/poldek/pm/pkgdb.c:1.27 poldek/poldek/pm/pkgdb.c:1.28
--- poldek/poldek/pm/pkgdb.c:1.27 Wed Jan 23 22:57:12 2008
+++ poldek/poldek/pm/pkgdb.c Thu Jan 31 02:39:14 2008
@@ -140,11 +140,12 @@
free(db);
}
-int pkgdb_tx_begin(struct pkgdb *db)
+int pkgdb_tx_begin(struct pkgdb *db, struct poldek_ts *ts)
{
+ if (db->_txcnt == 0 && db->_ctx->mod->dbtxbegin)
+ db->_ctx->mod->dbtxbegin(db->dbh, ts);
+
db->_txcnt++;
- if (db->_ctx->mod->dbtxbegin)
- db->_ctx->mod->dbtxbegin(db->dbh);
return db->_txcnt;
}
================================================================
Index: poldek/poldek/pm/pm.h
diff -u poldek/poldek/pm/pm.h:1.23 poldek/poldek/pm/pm.h:1.24
--- poldek/poldek/pm/pm.h:1.23 Tue Jan 22 10:37:18 2008
+++ poldek/poldek/pm/pm.h Thu Jan 31 02:39:14 2008
@@ -71,7 +71,7 @@
void pkgdb_close(struct pkgdb *db);
void pkgdb_free(struct pkgdb *db);
-int pkgdb_tx_begin(struct pkgdb *db);
+int pkgdb_tx_begin(struct pkgdb *db, struct poldek_ts *ts);
int pkgdb_tx_commit(struct pkgdb *db);
struct poldek_ts;
================================================================
Index: poldek/poldek/pm/pset/mod.c
diff -u poldek/poldek/pm/pset/mod.c:1.8 poldek/poldek/pm/pset/mod.c:1.9
--- poldek/poldek/pm/pset/mod.c:1.8 Sat Jul 14 00:33:11 2007
+++ poldek/poldek/pm/pset/mod.c Thu Jan 31 02:39:14 2008
@@ -18,10 +18,10 @@
pm_pset_opendb,
pm_pset_closedb,
- NULL,
- pm_pset_commitdb,
+ pm_pset_tx_begin,
+ pm_pset_tx_commit,
pm_pset_freedb,
-
+
pm_pset_db_it_init,
NULL,
================================================================
Index: poldek/poldek/pm/pset/pm_pset.h
diff -u poldek/poldek/pm/pset/pm_pset.h:1.11 poldek/poldek/pm/pset/pm_pset.h:1.12
--- poldek/poldek/pm/pset/pm_pset.h:1.11 Sat Jul 14 00:33:11 2007
+++ poldek/poldek/pm/pset/pm_pset.h Thu Jan 31 02:39:14 2008
@@ -28,7 +28,8 @@
void pm_pset_closedb(void *dbh);
void pm_pset_freedb(void *dbh);
-int pm_pset_commitdb(void *dbh);
+void pm_pset_tx_begin(void *dbh, struct poldek_ts *ts);
+int pm_pset_tx_commit(void *dbh);
int pm_pset_db_it_init(struct pkgdb_it *it, int tag, const char *arg);
================================================================
Index: poldek/poldek/pm/pset/pset.c
diff -u poldek/poldek/pm/pset/pset.c:1.28 poldek/poldek/pm/pset/pset.c:1.29
--- poldek/poldek/pm/pset/pset.c:1.28 Sun Jan 27 15:09:53 2008
+++ poldek/poldek/pm/pset/pset.c Thu Jan 31 02:39:14 2008
@@ -61,13 +61,14 @@
struct pm_psetdb {
- struct pkgset *ps;
- char *tsdir; /* transaction temp directory */
- tn_array *pkgs_added;
- tn_array *paths_added;
- tn_array *paths_removed;
- int _recno;
- struct pm_pset *pm;
+ struct poldek_ts *ts;
+ struct pkgset *ps;
+ char *tsdir; /* transaction temp directory */
+ tn_array *pkgs_added;
+ tn_array *paths_added;
+ tn_array *paths_removed;
+ int _recno;
+ struct pm_pset *pm;
};
void *pm_pset_init(void)
@@ -210,6 +211,7 @@
pkgset_setup(ps, PSET_VRFY_MERCY);
db = n_malloc(sizeof(*db));
+ db->ts = NULL;
db->ps = ps;
db->pkgs_added = pkgs_array_new(32);
db->paths_added = n_array_new(32, free, NULL);
@@ -359,7 +361,7 @@
return ec == 0;
}
-/* remeber! don't touch any member */
+/* remember! don't touch any member */
struct psetdb_it {
int tag;
int i;
@@ -574,31 +576,37 @@
return arr;
}
+static char *mktsdir(const char *cachedir)
+{
+ char tsdir[PATH_MAX];
+ n_snprintf(tsdir, sizeof(tsdir), "%s/tsXXXXXX", cachedir);
+
+#ifdef HAVE_MKDTEMP
+ if (mkdtemp(tsdir) == NULL) {
+ logn(LOGERR, "mkdtemp %s: %m", tsdir);
+ return NULL;
+ }
+#else
+#error "mkdtemp is needed"
+#endif
+
+ return n_strdup(tsdir);
+}
+
static int do_pkgtslink(struct pm_psetdb *db, const char *cachedir,
struct pkg *pkg, const char *pkgpath)
{
char tspath[PATH_MAX];
if (db->tsdir == NULL) {
- char tsdir[PATH_MAX];
- n_snprintf(tsdir, sizeof(tsdir), "%s/tsXXXXXX", cachedir);
-#ifdef HAVE_MKDTEMP
- if (mkdtemp(tsdir) == NULL) {
- logn(LOGERR, "mkdtemp %s: %m", tsdir);
+ if ((db->tsdir = mktsdir(cachedir)) == NULL)
return 0;
- }
-#else
-#error "mkdtemp is needed"
-#endif
- db->tsdir = n_strdup(tsdir);
}
-
n_snprintf(tspath, sizeof(tspath), "%s/%s", db->tsdir, n_basenam(pkgpath));
-
if (pkg_file_url_type(pkg) == VFURL_PATH) {
if (symlink(pkgpath, tspath) != 0) {
- logn(LOGERR, "%s: symlink failed: %m\n", pkgpath);
+ logn(LOGERR, "%s: symlink failed: %m", pkgpath);
return 0;
}
} else {
@@ -607,6 +615,7 @@
return 0;
}
}
+
n_array_push(db->paths_added, n_strdup(tspath));
return 1;
}
@@ -707,9 +716,6 @@
tmp = n_array_bsearch(pkgdir->pkgs, pkg);
DBGF("after in %p(%p) %s\n", pkg, tmp, pkg_snprintf_s(pkg));
- if (ts->getop(ts, POLDEK_OP_JUSTDB))
- continue;
-
if (!do_pkgtslink(db, ts->cachedir, pkg, path))
return 0;
@@ -756,24 +762,35 @@
pkgdir_remove_package(pkgdir, tmp);
DBGF("un %p(%p) %s\n", pkg, tmp, pkg_snprintf_s(pkg));
- if (ts->getop(ts, POLDEK_OP_JUSTDB))
- continue;
- n_array_push(db->paths_removed, n_strdup(path));
+ n_array_push(db->paths_removed, n_strdup(path));
msgn(2, "Removing %s", path);
}
}
return 1;
}
+void pm_pset_tx_begin(void *dbh, struct poldek_ts *ts)
+{
+ struct pm_psetdb *db = dbh;
+
+ n_assert(db->ts == NULL);
+ db->ts = ts;
+}
+
+
/* TODO: transaction like behaviour */
-int pm_pset_commitdb(void *dbh)
+int pm_pset_tx_commit(void *dbh)
{
struct pm_psetdb *db = dbh;
+ struct poldek_ts *ts = db->ts;
struct pkgdir *pkgdir;
char dstpath[PATH_MAX];
int i, rc = 1, nchanges;
+ n_assert(db->ts);
+ db->ts = NULL;
+
nchanges = n_array_size(db->paths_removed) + n_array_size(db->paths_added);
if (nchanges == 0)
return 1;
@@ -782,39 +799,57 @@
n_assert(n_array_size(db->ps->pkgdirs) == 1);
pkgdir = n_array_nth(db->ps->pkgdirs, 0);
msgn(0, "Operating on %s", pkgdir->path);
+
for (i=0; i < n_array_size(db->paths_removed); i++) {
const char *path = n_array_nth(db->paths_removed, i);
+
+ msgn_f(0, "%%add %s", n_basenam(path));
msgn_f(0, "%%rm %s\n", path);
msgn_tty(1, "rm %s\n", path);
- if (unlink(path) == 0) {
- nchanges++;
-
- } else {
- logn(LOGERR, "%s: unlink failed: %m", path);
- rc = 0;
- break;
+
+ if (!ts->getop(ts, POLDEK_OP_JUSTDB)) {
+ if (unlink(path) != 0) {
+ logn(LOGERR, "%s: unlink failed: %m", path);
+ rc = 0;
+ break;
+ }
}
+ nchanges++;
}
if (rc) {
for (i=0; i < n_array_size(db->paths_added); i++) {
const char *path = n_array_nth(db->paths_added, i);
- n_snprintf(dstpath, sizeof(dstpath), "%s%s", pkgdir->path,
- n_basenam(path));
+ int n;
+
+ n = n_snprintf(dstpath, sizeof(dstpath), "%s", pkgdir->path);
+ n_snprintf(&dstpath[n], sizeof(dstpath) - n, "%s%s",
+ dstpath[n-1] == '/' ? "":"/", n_basenam(path));
+
+ msgn_f(0, "%%del %s", n_basenam(path));
msgn_f(0, "%%cp %s %s\n", path, dstpath);
msgn_tty(1, "cp %s %s\n", n_basenam(path), dstpath);
- if (!do_cp(path, dstpath)) {
- rc = 0;
- break;
+
+ if (!ts->getop(ts, POLDEK_OP_JUSTDB)) {
+ if (!do_cp(path, dstpath)) {
+ rc = 0;
+ break;
+ }
+ unlink(path);
}
- unlink(path);
nchanges++;
}
}
- if (nchanges && rc && pkgdir_type_info(pkgdir->type) & PKGDIR_CAP_SAVEABLE)
+ if (nchanges == 0 || !rc)
+ return rc;
+
+ if (pkgdir_type_info(pkgdir->type) & PKGDIR_CAP_SAVEABLE)
rc = pkgdir_save(pkgdir, 0);
+ else if (ts->getop(ts, POLDEK_OP_JUSTDB))
+ logn(LOGWARN, "--justdb makes no sense for non-db repository");
+
return rc;
}
================================================================
Index: poldek/poldek/poldek_ts.c
diff -u poldek/poldek/poldek_ts.c:1.71 poldek/poldek/poldek_ts.c:1.72
--- poldek/poldek/poldek_ts.c:1.71 Sun Jan 27 17:01:55 2008
+++ poldek/poldek/poldek_ts.c Thu Jan 31 02:39:14 2008
@@ -928,7 +928,7 @@
if (ts->db == NULL)
return 0;
- pkgdb_tx_begin(ts->db);
+ pkgdb_tx_begin(ts->db, ts);
rc = do_poldek_ts_upgrade_dist(ts);
if (rc && !ts->getop(ts, POLDEK_OP_RPMTEST))
pkgdb_tx_commit(ts->db);
@@ -964,7 +964,7 @@
if (ts->db == NULL)
return 0;
- pkgdb_tx_begin(ts->db);
+ pkgdb_tx_begin(ts->db, ts);
DBGF("0 arg_packages_size=%d\n", arg_packages_size(ts->aps));
if (ts->ctx->_depsolver == 3) { /* hope, soon */
================================================================
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/poldek/poldek/pm/mod.h?r1=1.15&r2=1.16&f=u
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/poldek/poldek/pm/pkgdb.c?r1=1.27&r2=1.28&f=u
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/poldek/poldek/pm/pm.h?r1=1.23&r2=1.24&f=u
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/poldek/poldek/pm/pset/mod.c?r1=1.8&r2=1.9&f=u
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/poldek/poldek/pm/pset/pm_pset.h?r1=1.11&r2=1.12&f=u
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/poldek/poldek/pm/pset/pset.c?r1=1.28&r2=1.29&f=u
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/poldek/poldek/poldek_ts.c?r1=1.71&r2=1.72&f=u
More information about the pld-cvs-commit
mailing list