poldek: poldek/pkgdir/pkgdir.c, poldek/pkgdir/pkgdir.h - added pkg...
mis
mis at pld-linux.org
Mon Jul 9 14:59:59 CEST 2007
Author: mis Date: Mon Jul 9 12:59:59 2007 GMT
Module: poldek Tag: HEAD
---- Log message:
- added pkgdir_add_packages() - a faster version of pkgdir_add_package(); clock skew detection fix
---- Files affected:
poldek/poldek/pkgdir:
pkgdir.c (1.50 -> 1.51) , pkgdir.h (1.38 -> 1.39)
---- Diffs:
================================================================
Index: poldek/poldek/pkgdir/pkgdir.c
diff -u poldek/poldek/pkgdir/pkgdir.c:1.50 poldek/poldek/pkgdir/pkgdir.c:1.51
--- poldek/poldek/pkgdir/pkgdir.c:1.50 Mon Jul 2 18:39:22 2007
+++ poldek/poldek/pkgdir/pkgdir.c Mon Jul 9 14:59:54 2007
@@ -648,13 +648,15 @@
"%d packages loaded", n_array_size(pkgdir->pkgs)),
n_array_size(pkgdir->pkgs));
- n_assert(pkgdir->ts > 0); /* ts must be set by backend */
+ if (rc) {
+ n_assert(pkgdir->ts > 0); /* ts must be set by backend */
- pkgdir->_ldflags = ldflags;
+ pkgdir->_ldflags = ldflags;
+
+ if (ldflags & PKGDIR_LD_DIRINDEX)
+ do_open_dirindex(pkgdir);
+ }
- if (ldflags & PKGDIR_LD_DIRINDEX)
- do_open_dirindex(pkgdir);
-
return rc;
}
@@ -951,15 +953,18 @@
} else {
int create = 1;
-
- if (orig->ts >= pkgdir->ts) {
- if (orig->ts == pkgdir->ts)
+ int norig = n_array_size(orig->pkgs), n = n_array_size(pkgdir->pkgs);
+
+ if (orig->ts == pkgdir->ts) {
+ if (norig != n)
logn(LOGNOTICE, "slow down, unable to handle so "
"frequent index changes");
- else
- logn(LOGWARN, _("clock skew detected; create index with fake "
- "timestamp %lu >= %lu"), (unsigned long)orig->ts,
- (unsigned long)pkgdir->ts);
+ pkgdir->ts = orig->ts + 1;
+
+ } else if (orig->ts > pkgdir->ts) {
+ logn(LOGWARN, _("clock skew detected; create index with fake "
+ "timestamp (orig %lu > %lu)"), (unsigned long)orig->ts,
+ (unsigned long)pkgdir->ts);
pkgdir->ts = orig->ts + 1;
}
@@ -1009,6 +1014,36 @@
pkg->recno = 0; /* local to pkgdir */
n_array_push(pkgdir->pkgs, pkg_link(pkg));
+ n_array_isort(pkgdir->pkgs);
+ pkgdir->flags |= PKGDIR_CHANGED;
+ return 1;
+}
+
+int pkgdir_add_packages(struct pkgdir *pkgdir, tn_array *pkgs)
+{
+ int i, n = 0;
+ uint8_t *to_add;
+
+ to_add = alloca(n_array_size(pkgs));
+ memset(to_add, 0, n_array_size(pkgs));
+
+ for (i=0; i < n_array_size(pkgs); i++) {
+ struct pkg *pkg = n_array_nth(pkgs, i);
+
+ if (!n_array_bsearch(pkgdir->pkgs, pkg))
+ to_add[i] = 1;
+ }
+
+ for (i=0; i < n_array_size(pkgs); i++) {
+ if (to_add[i]) {
+ struct pkg *pkg = n_array_nth(pkgs, i);
+
+ pkg->recno = 0; /* local to pkgdir */
+ n_array_push(pkgdir->pkgs, pkg_link(pkg));
+ n++;
+ }
+ }
+
pkgdir->flags |= PKGDIR_CHANGED;
return 1;
}
================================================================
Index: poldek/poldek/pkgdir/pkgdir.h
diff -u poldek/poldek/pkgdir/pkgdir.h:1.38 poldek/poldek/pkgdir/pkgdir.h:1.39
--- poldek/poldek/pkgdir/pkgdir.h:1.38 Mon Jul 2 18:39:22 2007
+++ poldek/poldek/pkgdir/pkgdir.h Mon Jul 9 14:59:54 2007
@@ -170,6 +170,7 @@
struct pkg;
int pkgdir_add_package(struct pkgdir *pkgdir, struct pkg *pkg);
+int pkgdir_add_packages(struct pkgdir *pkgdir, tn_array *pkgs);
int pkgdir_remove_package(struct pkgdir *pkgdir, struct pkg *pkg);
================================================================
---- CVS-web:
http://cvs.pld-linux.org/poldek/poldek/pkgdir/pkgdir.c?r1=1.50&r2=1.51&f=u
http://cvs.pld-linux.org/poldek/poldek/pkgdir/pkgdir.h?r1=1.38&r2=1.39&f=u
More information about the pld-cvs-commit
mailing list