-commit 2f6b86835cbbad530f838bcf5d3e183f92eb3396
+commit 9ecd484cd077adba94649b83b3f3bfd639644056
Author: Marcin Banasiak <marcin.banasiak@gmail.com>
-Date: Thu Sep 27 17:44:19 2012 +0200
+Date: Wed Mar 20 00:09:57 2013 +0100
- Change the way how / is stored in dirindex
-
- Previously, / was stored in dirindex with leading slash (i.e. as //)
- what caused various side effects as:
-
- filesystem-4.0-12.x86_64 obsoleted by filesystem-4.0-13.x86_64
- filesystem-4.0-13.x86_64 marks FHS-2.3-35.x86_64 (cap //)
- error: FHS-2.3-35.x86_64: equal version installed, give up
+ rpmvercmp: read macro configuration files before using rpmEVRparse()
-diff --git a/pkgdir/pkgdir_dirindex.c b/pkgdir/pkgdir_dirindex.c
-index a6f422f..abfd05c 100644
---- a/pkgdir/pkgdir_dirindex.c
-+++ b/pkgdir/pkgdir_dirindex.c
-@@ -103,10 +103,14 @@ static int package_key(char *key, int size, const struct pkg *pkg, int prefix)
- static tn_buf *dirarray_join(tn_buf *nbuf, tn_array *arr, char *sep)
- {
- int i, size = n_array_size(arr);
-+
- for (i=0; i < size; i++) {
-- n_buf_printf(nbuf, "%s%s", (char*)n_array_nth(arr, i),
-- i < size - 1 ? sep : "");
-+ const char *dirname = n_array_nth(arr, i);
-+
-+ n_buf_printf(nbuf, "%s%s%s", *dirname != '/' ? "/" : "",
-+ dirname, i < size - 1 ? sep : "");
- }
-+
- return nbuf;
- }
-
-@@ -179,7 +183,8 @@ static int store_from_previous(uint32_t package_no, struct pkg *pkg, struct tndb
-
- while (*tl) {
- const char *dir = *tl;
-- dir = dir + 1; /* skip '/' */
-+ if (dir[1] != '\0')
-+ dir = dir + 1; /* skip '/' only when strlen(dir) > 1 */
- add_to_path_index(path_index, dir, package_no);
- tl++;
+diff --git a/pm/rpm/rpmvercmp.c b/pm/rpm/rpmvercmp.c
+index 968489a..d83f26b 100644
+--- a/pm/rpm/rpmvercmp.c
++++ b/pm/rpm/rpmvercmp.c
+@@ -1,6 +1,6 @@
+ /*
+ Copyright (C) 2000 - 2008 Pawel A. Gajda <mis@pld-linux.org>
+- Copyright (C) 2010 - 2012 Marcin Banasiak <marcin.banasiak@gmail.com>
++ Copyright (C) 2010 - 2013 Marcin Banasiak <marcin.banasiak@gmail.com>
+
+ 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
+@@ -20,7 +20,10 @@
+ #include <stdlib.h>
+
+ #ifdef HAVE_RPM_5
++# include <rpm/rpmrc.h>
+ # include <rpm/rpmtag.h>
++#else
++# include <rpm/rpmlib.h>
+ #endif
+
+ #define _RPMEVR_INTERNAL
+@@ -61,6 +64,11 @@ int main(int argc, char *argv[])
+ exit(1);
}
-@@ -238,15 +243,13 @@ void store_package(uint32_t package_no, struct pkg *pkg, struct tndb *db,
-
- if (required) {
- n_buf_clean(nbuf);
-- n_buf_printf(nbuf, "/"); /* prefix all by '/' */
-- nbuf = dirarray_join(nbuf, required, ":/");
-+ nbuf = dirarray_join(nbuf, required, ":");
- tndb_put(db, key, klen, n_buf_ptr(nbuf), n_buf_size(nbuf));
- }
-
- if (owned) {
- n_buf_clean(nbuf);
-- n_buf_printf(nbuf, "/"); /* prefix all by '/' */
-- nbuf = dirarray_join(nbuf, owned, ":/");
-+ nbuf = dirarray_join(nbuf, owned, ":");
-
- /* ugly, but what for another package_key() call */
- key[1] = PREFIX_PKGKEY_OWNDIR;
-@@ -323,9 +326,13 @@ static int dirindex_create(const struct pkgdir *pkgdir, const char *path,
- for (i=0; i < n_array_size(directories); i++) {
- const char *path = n_array_nth(directories, i);
- tn_array *ids = n_hash_get(path_index, path);
-+ int j;
-
- n_buf_clean(nbuf);
-- nbuf = dirarray_join(nbuf, ids, ":");
-+ for (j = 0; j < n_array_size(ids); j++) {
-+ n_buf_printf(nbuf, "%s%s", (char *)n_array_nth(ids, j),
-+ j < n_array_size(ids) - 1 ? ":" : "");
-+ }
-
- DBGF(" dir %s %s\n", path, (char*)n_buf_ptr(nbuf));
-
-@@ -774,11 +781,11 @@ tn_array *get_package_directories_as_array(const struct pkgdir *pkgdir,
-
- dirs = n_array_new(n, free, (tn_fn_cmp)strcmp);
- while (*tl) {
-- if (**tl)
-+ if (**tl)
- n_array_push(dirs, n_strdup(*tl));
- tl++;
- }
--
-+
- n_str_tokl_free(tl_save);
- n_free(val);
-
-@@ -809,7 +816,7 @@ static tn_array *do_dirindex_get(const struct pkgdir_dirindex *dirindex,
- unsigned char val[8192];
- int n, found, pkgs_passsed = 1;
-- if (*path == '/')
-+ if (*path == '/' && path[1] != '\0')
- path++;
-
- if (!tndb_get_str(dirindex->db, path, val, sizeof(val)))
-@@ -877,7 +884,7 @@ int pkgdir_dirindex_pkg_has_path(const struct pkgdir *pkgdir,
-
- DBGF("%s %s\n", pkg_id(pkg), path);
-
-- if (*path == '/')
-+ if (*path == '/' && path[1] != '\0')
- path++;
-
- if (!tndb_get_str(dirindex->db, path, val, sizeof(val)))
-commit f575c9bbe3cdd8f2d6ef27eb73dcc270c1a8a3f2
-Author: Marcin Banasiak <marcin.banasiak@gmail.com>
-Date: Sun Oct 7 12:41:42 2012 +0200
-
- Provide function body for inlined pkg_id
-
-diff --git a/pkg.c b/pkg.c
-index 6e83694..227fe14 100644
---- a/pkg.c
-+++ b/pkg.c
-@@ -1463,11 +1463,6 @@ struct pkg *pkg_link(struct pkg *pkg)
- return pkg;
- }
-
--const char *pkg_id(const struct pkg *p)
--{
-- return p->_nvr;
--}
--
- int pkg_id_snprintf(char *str, size_t size, const struct pkg *pkg)
- {
- return n_snprintf(str, size, "%s", pkg_id(pkg));
-diff --git a/pkg.h b/pkg.h
-index f0d71ac..ec6cc6d 100644
---- a/pkg.h
-+++ b/pkg.h
-@@ -231,7 +231,11 @@ EXPORT const char *pkg_pkgdirpath(const struct pkg *pkg);
- EXPORT unsigned pkg_file_url_type(const struct pkg *pkg);
-
-
--EXPORT extern__inline const char *pkg_id(const struct pkg *p);
-+static inline const char *pkg_id(const struct pkg *p)
-+{
-+ return p->_nvr;
-+}
++ if (rpmReadConfigFiles(NULL, NULL) < 0) {
++ fprintf(stderr, "Failed to read configuration files\n");
++ exit(2);
++ }
+
- EXPORT int pkg_id_snprintf(char *str, size_t size, const struct pkg *pkg);
- EXPORT int pkg_idevr_snprintf(char *str, size_t size, const struct pkg *pkg);
-
-commit ce00c5a5311fb6d77fcf96b04bca5cf2904d90ae
-Author: Marcin Banasiak <marcin.banasiak@gmail.com>
-Date: Sun Oct 7 12:46:36 2012 +0200
-
- Kill redundant EXPORT in pm.h
-
-diff --git a/pm/pm.h b/pm/pm.h
-index 9913168..a20c305 100644
---- a/pm/pm.h
-+++ b/pm/pm.h
-@@ -204,7 +204,7 @@ EXPORT int pm_get_dbdepdirs(struct pm_ctx *ctx,
+ evr1 = malloc(sizeof(struct EVR_s));
+ evr2 = malloc(sizeof(struct EVR_s));
- EXPORT struct pkg *pm_load_package(struct pm_ctx *ctx,
- tn_alloc *na, const char *path, unsigned ldflags);
--EXPORT struct pkgdir;
-+struct pkgdir;
- EXPORT struct pkgdir *pkgdb_to_pkgdir(struct pm_ctx *ctx, const char *rootdir,
- const char *path, unsigned pkgdir_ldflags,
- const char *key, ...);
+++ /dev/null
-diff -ur poldek-0.30/config.h.in poldek-0.30-vrpmlog/config.h.in
---- poldek-0.30/config.h.in 2012-09-13 15:34:44.000000000 +0200
-+++ poldek-0.30-vrpmlog/config.h.in 2012-09-17 21:07:20.000000000 +0200
-@@ -359,6 +359,9 @@
- /* Define to 1 if you have the `vprintf' function. */
- #undef HAVE_VPRINTF
-
-+/* Define to 1 if you have the `vrpmlog' function. */
-+#undef HAVE_VRPMLOG
-+
- /* Define to 1 if you have the `_rpmvercmp' function. */
- #undef HAVE__RPMVERCMP
-
-diff -ur poldek-0.30/configure.ac poldek-0.30-vrpmlog/configure.ac
---- poldek-0.30/configure.ac 2012-09-17 21:11:07.933745548 +0200
-+++ poldek-0.30-vrpmlog/configure.ac 2012-09-17 21:06:52.533754558 +0200
-@@ -343,7 +343,7 @@
- [$DBLIB -lrpmdb]),
- [$DBLIB])
-
--AC_CHECK_FUNCS(rpmlog rpmCheckSig rpmVerifySignature)
-+AC_CHECK_FUNCS(rpmlog vrpmlog rpmCheckSig rpmVerifySignature)
-
- dnl rpm 4.2?
- AC_CHECK_FUNCS(rpmtsColor, [LIBS="$LIBS -lpthread"
-diff -ur poldek-0.30/pm/rpm/rpm.c poldek-0.30-vrpmlog/pm/rpm/rpm.c
---- poldek-0.30/pm/rpm/rpm.c 2012-09-13 15:26:29.000000000 +0200
-+++ poldek-0.30-vrpmlog/pm/rpm/rpm.c 2012-09-17 21:08:55.423750223 +0200
-@@ -317,14 +317,20 @@
- return dir;
- }
-
--
--#if defined HAVE_RPMLOG && !defined ENABLE_STATIC
-+#if !defined ENABLE_STATIC && (defined HAVE_RPMLOG || defined HAVE_VRPMLOG)
- /* XXX hack: rpmlib dumps messges to stdout only... (AFAIK) */
-+#if defined HAVE_RPMLOG
- void rpmlog(int prii, const char *fmt, ...) __attribute__ ((visibility("default")));
-
--void rpmlog(int prii, const char *fmt, ...)
-+void rpmlog(int prii, const char *fmt, ...)
- {
- va_list args;
-+#elif defined HAVE_VRPMLOG
-+void vrpmlog(unsigned prii, const char *fmt, va_list args) __attribute__ ((visibility("default")));
-+
-+void vrpmlog(unsigned prii, const char *fmt, va_list args)
-+{
-+#endif
- int pri, mask;
- int rpmlogMask, logpri = LOGERR, verbose_level = -1;
-
-@@ -350,7 +356,9 @@
- verbose_level = 2;
- }
-
-+#if defined HAVE_RPMLOG
- va_start(args, fmt);
-+#endif
-
- #if 0
- printf("%d, v = %d, verbose = %d, pm_rpm_verbose = %d\n", pri,
-@@ -389,9 +397,10 @@
- log(logpri | LOGWARN, "%s\n", p);
- }
-
-+#if defined HAVE_RPMLOG
- va_end(args);
-+#endif
- }
--
- #endif /* HAVE_RPMLOG */
-
- int pm_rpm_vercmp(const char *one, const char *two)