libsolv 0.7.8-1 (x86_64;i686;znver1;aarch64;armv7hnl) 2019-9056
9999

Status published
Submitter nobodydead [@T] gmail.com
Platform rolling
Repository main
URL https://abf.openmandriva.org/build_lists/644499
Packages
lib64solv1-0.7.8-1.x86_64.binary
lib64solv1-debuginfo-0.7.8-1.x86_64.debuginfo
lib64solv-devel-0.7.8-1.x86_64.binary
lib64solvext1-0.7.8-1.x86_64.binary
lib64solvext1-debuginfo-0.7.8-1.x86_64.debuginfo
libsolv-0.7.8-1.x86_64.source
libsolv-0.7.8-1.x86_64.binary
libsolv-debuginfo-0.7.8-1.x86_64.debuginfo
libsolv-demo-0.7.8-1.x86_64.binary
libsolv-demo-debuginfo-0.7.8-1.x86_64.debuginfo
libsolv-0.7.8-1.i686.source
libsolv-0.7.8-1.i686.binary
libsolv1-0.7.8-1.i686.binary
libsolv1-debuginfo-0.7.8-1.i686.debuginfo
libsolv-debuginfo-0.7.8-1.i686.debuginfo
libsolv-demo-0.7.8-1.i686.binary
libsolv-demo-debuginfo-0.7.8-1.i686.debuginfo
libsolv-devel-0.7.8-1.i686.binary
libsolvext1-0.7.8-1.i686.binary
libsolvext1-debuginfo-0.7.8-1.i686.debuginfo
lib64solv1-0.7.8-1.znver1.binary
lib64solv1-debuginfo-0.7.8-1.znver1.debuginfo
lib64solv-devel-0.7.8-1.znver1.binary
lib64solvext1-0.7.8-1.znver1.binary
lib64solvext1-debuginfo-0.7.8-1.znver1.debuginfo
libsolv-0.7.8-1.znver1.source
libsolv-0.7.8-1.znver1.binary
libsolv-debuginfo-0.7.8-1.znver1.debuginfo
libsolv-demo-0.7.8-1.znver1.binary
libsolv-demo-debuginfo-0.7.8-1.znver1.debuginfo
lib64solv1-0.7.8-1.aarch64.binary
lib64solv1-debuginfo-0.7.8-1.aarch64.debuginfo
lib64solv-devel-0.7.8-1.aarch64.binary
lib64solvext1-0.7.8-1.aarch64.binary
lib64solvext1-debuginfo-0.7.8-1.aarch64.debuginfo
libsolv-0.7.8-1.aarch64.binary
libsolv-0.7.8-1.aarch64.source
libsolv-debuginfo-0.7.8-1.aarch64.debuginfo
libsolv-demo-0.7.8-1.aarch64.binary
libsolv-demo-debuginfo-0.7.8-1.aarch64.debuginfo
libsolv-0.7.8-1.armv7hnl.source
libsolv-0.7.8-1.armv7hnl.binary
libsolv1-0.7.8-1.armv7hnl.binary
libsolv1-debuginfo-0.7.8-1.armv7hnl.debuginfo
libsolv-debuginfo-0.7.8-1.armv7hnl.debuginfo
libsolv-demo-0.7.8-1.armv7hnl.binary
libsolv-demo-debuginfo-0.7.8-1.armv7hnl.debuginfo
libsolv-devel-0.7.8-1.armv7hnl.binary
libsolvext1-0.7.8-1.armv7hnl.binary
libsolvext1-debuginfo-0.7.8-1.armv7hnl.debuginfo
Build Date 2019-11-20 20:47:29 +0000 UTC
Last Updated 2019-11-24 17:12:25.29575059 +0000 UTC
$ git diff --patch-with-stat --summary c02d350dee4ef753b88658527ec763213ac74931..1d86c7fc78ab90a64d6073b386c6f099bdf1c574

 .abf.yml                                           |   2 +-
 ...se-the-patch-status-in-the-updateinfo-xml.patch |  45 --
 0002-Add-UPDATE_STATUS-to-knownids.patch           |  26 -
 ...c-move-Packages-string-into-backend-imple.patch |  87 ---
 ...und-to-stat_database-to-find-other-databa.patch |  60 --
 0005-Add-solvable_matchessolvable-function.patch   | 145 -----
 ...rker-argument-in-solvable_matchessolvable.patch |  40 --
 0007-Add-support-for-blacklisted-packages.patch    | 617 ---------------------
 ...mental-support-for-self-destruct-packages.patch |  83 ---
 libsolv.spec                                       |  14 +-
 10 files changed, 3 insertions(+), 1116 deletions(-)
 delete mode 100644 0001-Parse-the-patch-status-in-the-updateinfo-xml.patch
 delete mode 100644 0002-Add-UPDATE_STATUS-to-knownids.patch
 delete mode 100644 0003-repo_rpmdb.c-move-Packages-string-into-backend-imple.patch
 delete mode 100644 0004-Add-workaround-to-stat_database-to-find-other-databa.patch
 delete mode 100644 0005-Add-solvable_matchessolvable-function.patch
 delete mode 100644 0006-Move-marker-argument-in-solvable_matchessolvable.patch
 delete mode 100644 0007-Add-support-for-blacklisted-packages.patch
 delete mode 100644 0008-Add-experimental-support-for-self-destruct-packages.patch

diff --git a/.abf.yml b/.abf.yml
index 45d0707..aea2917 100644
--- a/.abf.yml
+++ b/.abf.yml
@@ -1,2 +1,2 @@
 sources:
-  libsolv-0.7.7.tar.gz: be93515a4fca86e76c1dfd2f2cb99950de0f42a4
+  libsolv-0.7.8.tar.gz: 5e80bb880cd0d0af4e6c4fd0bb9c70d6a10811d4
diff --git a/0001-Parse-the-patch-status-in-the-updateinfo-xml.patch b/0001-Parse-the-patch-status-in-the-updateinfo-xml.patch
deleted file mode 100644
index c1491dd..0000000
--- a/0001-Parse-the-patch-status-in-the-updateinfo-xml.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 6596f2e3281891e880446d481f98f81a6d2b377c Mon Sep 17 00:00:00 2001
-From: Michael Schroeder <mls@suse.de>
-Date: Fri, 18 Oct 2019 11:04:36 +0200
-Subject: [PATCH 1/8] Parse the patch status in the updateinfo xml
-
-The status is usually 'stable', but can also be things like
-'testing' or 'retracted'
----
- ext/repo_updateinfoxml.c | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/ext/repo_updateinfoxml.c b/ext/repo_updateinfoxml.c
-index f3757272..984f491b 100644
---- a/ext/repo_updateinfoxml.c
-+++ b/ext/repo_updateinfoxml.c
-@@ -220,7 +220,7 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha
-        */
-     case STATE_UPDATE:
-       {
--	const char *from = 0, *type = 0, *version = 0;
-+	const char *from = 0, *type = 0, *version = 0, *status = 0;
- 	for (; *atts; atts += 2)
- 	  {
- 	    if (!strcmp(*atts, "from"))
-@@ -229,6 +229,8 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha
- 	      type = atts[1];
- 	    else if (!strcmp(*atts, "version"))
- 	      version = atts[1];
-+	    else if (!strcmp(*atts, "status"))
-+	      status = atts[1];
- 	  }
- 	solvable = pd->solvable = pool_id2solvable(pool, repo_add_solvable(pd->repo));
- 	pd->handle = pd->solvable - pool->solvables;
-@@ -238,6 +240,8 @@ startElement(struct solv_xmlparser *xmlp, int state, const char *name, const cha
- 	solvable->arch = ARCH_NOARCH;
- 	if (type)
- 	  repodata_set_str(pd->data, pd->handle, SOLVABLE_PATCHCATEGORY, type);
-+	if (status)
-+	  repodata_set_poolstr(pd->data, pd->handle, UPDATE_STATUS, status);
-         pd->buildtime = (time_t)0;
-       }
-       break;
--- 
-2.24.0
-
diff --git a/0002-Add-UPDATE_STATUS-to-knownids.patch b/0002-Add-UPDATE_STATUS-to-knownids.patch
deleted file mode 100644
index f4617d8..0000000
--- a/0002-Add-UPDATE_STATUS-to-knownids.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From ee27eee6318a2cb4f99bc66b3ec4d86d377a4467 Mon Sep 17 00:00:00 2001
-From: Michael Schroeder <mls@suse.de>
-Date: Fri, 18 Oct 2019 13:30:21 +0200
-Subject: [PATCH 2/8] Add UPDATE_STATUS to knownids
-
-Should have been in last commit.
----
- src/knownid.h | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/knownid.h b/src/knownid.h
-index 9d7f157e..7da12396 100644
---- a/src/knownid.h
-+++ b/src/knownid.h
-@@ -261,6 +261,8 @@ KNOWNID(UPDATE_MODULE_ARCH,		"update:module:arch"),		/* architecture */
- KNOWNID(SOLVABLE_BUILDVERSION,		"solvable:buildversion"),	/* conda */
- KNOWNID(SOLVABLE_BUILDFLAVOR,		"solvable:buildflavor"),	/* conda */
- 
-+KNOWNID(UPDATE_STATUS,			"update:status"),		/* "stable", "testing", ...*/
-+
- KNOWNID(ID_NUM_INTERNAL,		0)
- 
- #ifdef KNOWNID_INITIALIZE
--- 
-2.24.0
-
diff --git a/0003-repo_rpmdb.c-move-Packages-string-into-backend-imple.patch b/0003-repo_rpmdb.c-move-Packages-string-into-backend-imple.patch
deleted file mode 100644
index e4110c8..0000000
--- a/0003-repo_rpmdb.c-move-Packages-string-into-backend-imple.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-From 94df5d6bf2eec3fc555550307342e250e2b842c6 Mon Sep 17 00:00:00 2001
-From: Michael Schroeder <mls@suse.de>
-Date: Mon, 21 Oct 2019 13:17:29 +0200
-Subject: [PATCH 3/8] repo_rpmdb.c: move "Packages" string into backend
- implementations
-
-Other rpm database implementations like "ndb" use different names.
----
- ext/repo_rpmdb.c        |  2 +-
- ext/repo_rpmdb_bdb.h    | 11 +++++++++--
- ext/repo_rpmdb_librpm.h |  7 +++----
- 3 files changed, 13 insertions(+), 7 deletions(-)
-
-diff --git a/ext/repo_rpmdb.c b/ext/repo_rpmdb.c
-index fb1491b1..e49188db 100644
---- a/ext/repo_rpmdb.c
-+++ b/ext/repo_rpmdb.c
-@@ -1605,7 +1605,7 @@ repo_add_rpmdb(Repo *repo, Repo *ref, int flags)
-     }
- 
-   /* XXX: should get ro lock of Packages database! */
--  if (stat_database(&state, "Packages", &packagesstat, 1))
-+  if (stat_database(&state, &packagesstat))
-     {
-       freestate(&state);
-       return -1;
-diff --git a/ext/repo_rpmdb_bdb.h b/ext/repo_rpmdb_bdb.h
-index ae477f76..574e9a8d 100644
---- a/ext/repo_rpmdb_bdb.h
-+++ b/ext/repo_rpmdb_bdb.h
-@@ -57,7 +57,7 @@ struct rpmdbstate {
- 
- 
- static int
--stat_database(struct rpmdbstate *state, char *dbname, struct stat *statbuf, int seterror)
-+stat_database_name(struct rpmdbstate *state, char *dbname, struct stat *statbuf, int seterror)
- {
-   char *dbpath;
-   dbpath = solv_dupjoin(state->rootdir, state->is_ostree ? "/usr/share/rpm/" : "/var/lib/rpm/", dbname);
-@@ -72,6 +72,13 @@ stat_database(struct rpmdbstate *state, char *dbname, struct stat *statbuf, int
-   return 0;
- }
- 
-+static int
-+stat_database(struct rpmdbstate *state, struct stat *statbuf)
-+{
-+  return stat_database_name(state, "Packages", statbuf, 1);
-+}
-+
-+
- static inline Id
- db2rpmdbid(unsigned char *db, int byteswapped)
- {
-@@ -426,7 +433,7 @@ count_headers(struct rpmdbstate *state)
-   DBT dbkey;
-   DBT dbdata;
- 
--  if (stat_database(state, "Name", &statbuf, 0))
-+  if (stat_database_name(state, "Name", &statbuf, 0))
-     return 0;
-   memset(&dbkey, 0, sizeof(dbkey));
-   memset(&dbdata, 0, sizeof(dbdata));
-diff --git a/ext/repo_rpmdb_librpm.h b/ext/repo_rpmdb_librpm.h
-index 79983d3a..64e795d2 100644
---- a/ext/repo_rpmdb_librpm.h
-+++ b/ext/repo_rpmdb_librpm.h
-@@ -31,14 +31,13 @@ struct rpmdbstate {
- };
- 
- static int
--stat_database(struct rpmdbstate *state, char *dbname, struct stat *statbuf, int seterror)
-+stat_database(struct rpmdbstate *state, struct stat *statbuf)
- {
-   char *dbpath;
--  dbpath = solv_dupjoin(state->rootdir, state->is_ostree ? "/usr/share/rpm/" : "/var/lib/rpm/", dbname);
-+  dbpath = solv_dupjoin(state->rootdir, state->is_ostree ? "/usr/share/rpm/" : "/var/lib/rpm/", "Packages");
-   if (stat(dbpath, statbuf))
-     {
--      if (seterror)
--        pool_error(state->pool, -1, "%s: %s", dbpath, strerror(errno));
-+      pool_error(state->pool, -1, "%s: %s", dbpath, strerror(errno));
-       free(dbpath);
-       return -1;
-     }
--- 
-2.24.0
-
diff --git a/0004-Add-workaround-to-stat_database-to-find-other-databa.patch b/0004-Add-workaround-to-stat_database-to-find-other-databa.patch
deleted file mode 100644
index 48dadae..0000000
--- a/0004-Add-workaround-to-stat_database-to-find-other-databa.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From ea037722b0f2a1afc8416e08b36fd498a8bb14c4 Mon Sep 17 00:00:00 2001
-From: Michael Schroeder <mls@suse.de>
-Date: Mon, 21 Oct 2019 14:52:31 +0200
-Subject: [PATCH 4/8] Add workaround to stat_database() to find other database
- backends
-
-This is pretty horrible. Rpm upstream wants to add a function
-that stats the database for us, so we may use that in some future
-version.
----
- ext/repo_rpmdb_librpm.h | 31 ++++++++++++++++++++++++-------
- 1 file changed, 24 insertions(+), 7 deletions(-)
-
-diff --git a/ext/repo_rpmdb_librpm.h b/ext/repo_rpmdb_librpm.h
-index 64e795d2..6fdcfb0d 100644
---- a/ext/repo_rpmdb_librpm.h
-+++ b/ext/repo_rpmdb_librpm.h
-@@ -33,15 +33,32 @@ struct rpmdbstate {
- static int
- stat_database(struct rpmdbstate *state, struct stat *statbuf)
- {
--  char *dbpath;
--  dbpath = solv_dupjoin(state->rootdir, state->is_ostree ? "/usr/share/rpm/" : "/var/lib/rpm/", "Packages");
--  if (stat(dbpath, statbuf))
-+  static const char *dbname[] = {
-+    "Packages",
-+    "Packages.db",
-+    "rpmdb.sqlite",
-+    "data.mdb",
-+    "Packages",		/* for error reporting */
-+    0,
-+  };
-+  int i;
-+
-+  for (i = 0; ; i++)
-     {
--      pool_error(state->pool, -1, "%s: %s", dbpath, strerror(errno));
--      free(dbpath);
--      return -1;
-+      char *dbpath = solv_dupjoin(state->rootdir, state->is_ostree ? "/usr/share/rpm/" : "/var/lib/rpm/", dbname[i]);
-+      if (!stat(dbpath, statbuf))
-+	{
-+	  free(dbpath);
-+	  return 0;
-+	}
-+      if (errno != ENOENT || !dbname[i + 1])
-+	{
-+	  pool_error(state->pool, -1, "%s: %s", dbpath, strerror(errno));
-+	  solv_free(dbpath);
-+	  return -1;
-+	}
-+      solv_free(dbpath);
-     }
--  free(dbpath);
-   return 0;
- }
- 
--- 
-2.24.0
-
diff --git a/0005-Add-solvable_matchessolvable-function.patch b/0005-Add-solvable_matchessolvable-function.patch
deleted file mode 100644
index 7823b4e..0000000
--- a/0005-Add-solvable_matchessolvable-function.patch
+++ /dev/null
@@ -1,145 +0,0 @@
-From f5a6b1656360fed253480ff112c40b8e0e94ffe4 Mon Sep 17 00:00:00 2001
-From: Michael Schroeder <mls@suse.de>
-Date: Tue, 22 Oct 2019 14:08:23 +0200
-Subject: [PATCH 5/8] Add solvable_matchessolvable() function
-
-Checks if one of the dependencies of a solvable is matched by
-the provides of another solvable. It is also possible to get
-the list of matching dependencies.
----
- src/libsolv.ver |  1 +
- src/pool.c      |  2 +-
- src/selection.c |  2 +-
- src/solvable.c  | 41 +++++++++++++++++++++++++++++++++++++----
- src/solvable.h  |  3 ++-
- 5 files changed, 42 insertions(+), 7 deletions(-)
-
-diff --git a/src/libsolv.ver b/src/libsolv.ver
-index eafe3e68..ee40d0ad 100644
---- a/src/libsolv.ver
-+++ b/src/libsolv.ver
-@@ -325,6 +325,7 @@ SOLV_1.0 {
- 		solvable_lookup_type;
- 		solvable_lookup_void;
- 		solvable_matchesdep;
-+		solvable_matchessolvable;
- 		solvable_selfprovidedep;
- 		solvable_set_deparray;
- 		solvable_set_id;
-diff --git a/src/pool.c b/src/pool.c
-index 76636a78..0b4b9ddc 100644
---- a/src/pool.c
-+++ b/src/pool.c
-@@ -1542,7 +1542,7 @@ pool_whatmatchessolvable(Pool *pool, Id keyname, Id solvid, Queue *q, int marker
- 	continue;
-       if (s->repo != pool->installed && !pool_installable(pool, s))
- 	continue;
--      if (solvable_matchessolvable_int(s, keyname, marker, solvid, 0, &qq, &missc, reloff))
-+      if (solvable_matchessolvable_int(s, keyname, marker, solvid, 0, &qq, &missc, reloff, 0))
-         queue_push(q, p);
-     }
-   map_free(&missc);
-diff --git a/src/selection.c b/src/selection.c
-index e58d731a..5f01e2b5 100644
---- a/src/selection.c
-+++ b/src/selection.c
-@@ -1502,7 +1502,7 @@ selection_make_matchsolvable_common(Pool *pool, Queue *selection, Queue *solvidq
- 	continue;
-       if (!solvable_matches_selection_flags(pool, s, flags))
- 	continue;
--      if (solvable_matchessolvable_int(s, keyname, marker, solvid, solvidq ? &m : 0, &q, &missc, reloff))
-+      if (solvable_matchessolvable_int(s, keyname, marker, solvid, solvidq ? &m : 0, &q, &missc, reloff, 0))
-         queue_push(selection, p);
-     }
-   queue_free(&q);
-diff --git a/src/solvable.c b/src/solvable.c
-index d3d2d31d..332e6747 100644
---- a/src/solvable.c
-+++ b/src/solvable.c
-@@ -645,7 +645,7 @@ solvable_matchesdep(Solvable *s, Id keyname, Id dep, int marker)
- }
- 
- int
--solvable_matchessolvable_int(Solvable *s, Id keyname, int marker, Id solvid, Map *solvidmap, Queue *depq, Map *missc, int reloff)
-+solvable_matchessolvable_int(Solvable *s, Id keyname, int marker, Id solvid, Map *solvidmap, Queue *depq, Map *missc, int reloff, Queue *outdepq)
- {
-   Pool *pool = s->repo->pool;
-   int i, boff;
-@@ -653,6 +653,8 @@ solvable_matchessolvable_int(Solvable *s, Id keyname, int marker, Id solvid, Map
- 
-   if (depq->count)
-     queue_empty(depq);
-+  if (outdepq && outdepq->count)
-+    queue_empty(outdepq);
-   solvable_lookup_deparray(s, keyname, depq, marker);
-   for (i = 0; i < depq->count; i++)
-     {
-@@ -695,15 +697,46 @@ solvable_matchessolvable_int(Solvable *s, Id keyname, int marker, Id solvid, Map
- 	{
- 	  for (; *wp; wp++)
- 	    if (MAPTST(solvidmap, *wp))
--	      return 1;
-+	      break;
- 	}
-       else
- 	{
- 	  for (; *wp; wp++)
- 	    if (*wp == solvid)
--	      return 1;
-+	      break;
-+	}
-+      if (*wp)
-+	{
-+	  if (outdepq)
-+	    {
-+	      queue_pushunique(outdepq, dep);
-+	      continue;
-+	    }
-+	  return 1;
- 	}
-       MAPSET(missc, boff);
-     }
--  return 0;
-+  return outdepq && outdepq->count ? 1 : 0;
-+}
-+
-+int
-+solvable_matchessolvable(Solvable *s, Id keyname, int marker, Id solvid, Queue *depq)
-+{
-+  Pool *pool = s->repo->pool;
-+  Map missc;		/* cache for misses */
-+  int res, reloff;
-+  Queue qq;
-+
-+  if (depq && depq->count)
-+    queue_empty(depq);
-+  if (s - pool->solvables == solvid)
-+    return 0;		/* no self-matches */
-+
-+  queue_init(&qq);
-+  reloff = pool->ss.nstrings;
-+  map_init(&missc, reloff + pool->nrels);
-+  res = solvable_matchessolvable_int(s, keyname, marker, solvid, 0, &qq, &missc, reloff, depq);
-+  map_free(&missc);
-+  queue_free(&qq);
-+  return res;
- }
-diff --git a/src/solvable.h b/src/solvable.h
-index bf92a000..d5258f2c 100644
---- a/src/solvable.h
-+++ b/src/solvable.h
-@@ -81,9 +81,10 @@ int solvable_identical(Solvable *s1, Solvable *s2);
- Id solvable_selfprovidedep(Solvable *s);
- 
- int solvable_matchesdep(Solvable *s, Id keyname, Id dep, int marker);
-+int solvable_matchessolvable(Solvable *s, Id keyname, int marker, Id solvid, Queue *depq);
- 
- /* internal */
--int solvable_matchessolvable_int(Solvable *s, Id keyname, int marker, Id solvid, Map *solvidmap, Queue *depq, Map *missc, int reloff);
-+int solvable_matchessolvable_int(Solvable *s, Id keyname, int marker, Id solvid, Map *solvidmap, Queue *depq, Map *missc, int reloff, Queue *outdepq);
- 
- 
- /* weird suse stuff */
--- 
-2.24.0
-
diff --git a/0006-Move-marker-argument-in-solvable_matchessolvable.patch b/0006-Move-marker-argument-in-solvable_matchessolvable.patch
deleted file mode 100644
index 2b01920..0000000
--- a/0006-Move-marker-argument-in-solvable_matchessolvable.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From cea2f345d653f161961876a3d5fdeb0b498758ad Mon Sep 17 00:00:00 2001
-From: Michael Schroeder <mls@suse.de>
-Date: Tue, 22 Oct 2019 14:16:11 +0200
-Subject: [PATCH 6/8] Move marker argument in solvable_matchessolvable()
-
-This makes it similar to the pool_whatmatchessolvable() function.
----
- src/solvable.c | 2 +-
- src/solvable.h | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/solvable.c b/src/solvable.c
-index 332e6747..474e6f5b 100644
---- a/src/solvable.c
-+++ b/src/solvable.c
-@@ -720,7 +720,7 @@ solvable_matchessolvable_int(Solvable *s, Id keyname, int marker, Id solvid, Map
- }
- 
- int
--solvable_matchessolvable(Solvable *s, Id keyname, int marker, Id solvid, Queue *depq)
-+solvable_matchessolvable(Solvable *s, Id keyname, Id solvid, Queue *depq, int marker)
- {
-   Pool *pool = s->repo->pool;
-   Map missc;		/* cache for misses */
-diff --git a/src/solvable.h b/src/solvable.h
-index d5258f2c..7788e7c7 100644
---- a/src/solvable.h
-+++ b/src/solvable.h
-@@ -81,7 +81,7 @@ int solvable_identical(Solvable *s1, Solvable *s2);
- Id solvable_selfprovidedep(Solvable *s);
- 
- int solvable_matchesdep(Solvable *s, Id keyname, Id dep, int marker);
--int solvable_matchessolvable(Solvable *s, Id keyname, int marker, Id solvid, Queue *depq);
-+int solvable_matchessolvable(Solvable *s, Id keyname, Id solvid, Queue *depq, int marker);
- 
- /* internal */
- int solvable_matchessolvable_int(Solvable *s, Id keyname, int marker, Id solvid, Map *solvidmap, Queue *depq, Map *missc, int reloff, Queue *outdepq);
--- 
-2.24.0
-
diff --git a/0007-Add-support-for-blacklisted-packages.patch b/0007-Add-support-for-blacklisted-packages.patch
deleted file mode 100644
index ebd7b09..0000000
--- a/0007-Add-support-for-blacklisted-packages.patch
+++ /dev/null
@@ -1,617 +0,0 @@
-From 4120051be87d2cccc2146a30c5128edd5c78d76d Mon Sep 17 00:00:00 2001
-From: Michael Schroeder <mls@suse.de>
-Date: Fri, 8 Nov 2019 14:34:18 +0100
-Subject: [PATCH 7/8] Add support for blacklisted packages
-
-This will be used in SUSE's ptf packages and also to retract
-released updates. The idea is that it is not possible to pull in
-a blacklisted package via a dependency, they can only be installed
-by a job that directly addresses them (the SETEVR bit is set).
----
- ext/libsolvext.ver                 |   1 +
- ext/repo_updateinfoxml.c           |  89 ++++++++++++++++++++++
- ext/repo_updateinfoxml.h           |   3 +
- ext/testcase.c                     |   2 +
- src/problems.c                     |  15 ++++
- src/problems.h                     |  11 +--
- src/rules.c                        | 118 +++++++++++++++++++++++++++++
- src/rules.h                        |   6 +-
- src/solver.c                       |  13 ++++
- src/solver.h                       |   4 +
- src/solverdebug.c                  |   2 +
- test/testcases/blacklist/ptf       |  52 +++++++++++++
- test/testcases/blacklist/retracted |  22 ++++++
- tools/repo2solv.c                  |   1 +
- 14 files changed, 333 insertions(+), 6 deletions(-)
- create mode 100644 test/testcases/blacklist/ptf
- create mode 100644 test/testcases/blacklist/retracted
-
-diff --git a/ext/libsolvext.ver b/ext/libsolvext.ver
-index ef028f0f..02cf6d14 100644
---- a/ext/libsolvext.ver
-+++ b/ext/libsolvext.ver
-@@ -42,6 +42,7 @@ SOLV_1.0 {
- 		repo_add_zyppdb_products;
- 		repo_find_all_pubkeys;
- 		repo_find_pubkey;
-+		repo_mark_retracted_packages;
- 		repo_verify_sigdata;
- 		rpm_byfp;
- 		rpm_byrpmdbid;
-diff --git a/ext/repo_updateinfoxml.c b/ext/repo_updateinfoxml.c
-index 984f491b..51c3f5ab 100644
---- a/ext/repo_updateinfoxml.c
-+++ b/ext/repo_updateinfoxml.c
-@@ -490,3 +490,92 @@ repo_add_updateinfoxml(Repo *repo, FILE *fp, int flags)
-   return pd.ret;
- }
- 
-+#ifdef SUSE
-+
-+static int
-+repo_mark_retracted_packages_cmp(const void *ap, const void *bp, void *dp)
-+{
-+  Id *a = (Id *)ap;
-+  Id *b = (Id *)bp;
-+  if (a[1] != b[1])
-+    return a[1] - b[1];
-+  if (a[2] != b[2])
-+    return a[2] - b[2];
-+  if (a[0] != b[0])
-+    return a[0] - b[0];
-+  return 0;
-+}
-+
-+
-+void
-+repo_mark_retracted_packages(Repo *repo, Id retractedmarker)
-+{
-+  Pool *pool = repo->pool;
-+  int i, p;
-+  Solvable *s;
-+  Id con, *conp;
-+  Id retractedname, retractedevr;
-+
-+  Queue q;
-+  queue_init(&q);
-+  for (p = 1; p < pool->nsolvables; p++)
-+    {
-+      const char *status;
-+      s = pool->solvables + p;
-+      if (strncmp(pool_id2str(pool, s->name), "patch:", 6) != 0)
-+	{
-+	  if (s->arch == ARCH_SRC || s->arch == ARCH_NOSRC)
-+	    continue;
-+	  queue_push2(&q, p, s->name);
-+	  queue_push2(&q, s->evr, s->arch);
-+	  continue;
-+	}
-+      status = solvable_lookup_str(s, UPDATE_STATUS);
-+      if (!status || strcmp(status, "retracted") != 0)
-+	continue;
-+      if (!s->conflicts)
-+	continue;
-+      conp = s->repo->idarraydata + s->conflicts;
-+      while ((con = *conp++) != 0)
-+	{
-+	  Reldep *rd;
-+	  Id name, evr, arch;
-+	  if (!ISRELDEP(con))
-+	    continue;
-+	  rd = GETRELDEP(pool, con);
-+	  if (rd->flags != REL_LT)
-+	    continue;
-+	  name = rd->name;
-+	  evr = rd->evr;
-+	  arch = 0;
-+	  if (ISRELDEP(name))
-+	    {
-+	      rd = GETRELDEP(pool, name);
-+	      name = rd->name;
-+	      if (rd->flags == REL_ARCH)
-+		arch = rd->evr;
-+	    }
-+	  queue_push2(&q, 0, name);
-+	  queue_push2(&q, evr, arch);
-+	}
-+    }
-+  if (q.count)
-+    solv_sort(q.elements, q.count / 4, sizeof(Id) * 4, repo_mark_retracted_packages_cmp, repo->pool);
-+  retractedname = retractedevr = 0;
-+  for (i = 0; i < q.count; i += 4)
-+    {
-+      if (!q.elements[i])
-+	{
-+	  retractedname = q.elements[i + 1];
-+	  retractedevr = q.elements[i + 2];
-+	}
-+      else if (q.elements[i + 1] == retractedname && q.elements[i + 2] == retractedevr)
-+	{
-+	  s = pool->solvables + q.elements[i];
-+	  s->provides = repo_addid_dep(repo, s->provides, retractedmarker, 0);
-+	}
-+    }
-+  queue_free(&q);
-+}
-+
-+#endif
-diff --git a/ext/repo_updateinfoxml.h b/ext/repo_updateinfoxml.h
-index bd0a61b6..c3da0f67 100644
---- a/ext/repo_updateinfoxml.h
-+++ b/ext/repo_updateinfoxml.h
-@@ -6,3 +6,6 @@
-  */
- 
- extern int repo_add_updateinfoxml(Repo *repo, FILE *fp, int flags);
-+
-+extern void repo_mark_retracted_packages(Repo *repo, Id retractedmarker);
-+
-diff --git a/ext/testcase.c b/ext/testcase.c
-index bd0643a8..d6c4a577 100644
---- a/ext/testcase.c
-+++ b/ext/testcase.c
-@@ -59,6 +59,7 @@ static struct job2str {
-   { SOLVER_ALLOWUNINSTALL, "allowuninstall" },
-   { SOLVER_FAVOR,          "favor" },
-   { SOLVER_DISFAVOR,       "disfavor" },
-+  { SOLVER_BLACKLIST,      "blacklist" },
-   { 0, 0 }
- };
- 
-@@ -1190,6 +1191,7 @@ static struct rclass2str {
-   { SOLVER_RULE_LEARNT, "learnt" },
-   { SOLVER_RULE_BEST, "best" },
-   { SOLVER_RULE_YUMOBS, "yumobs" },
-+  { SOLVER_RULE_BLACK, "black" },
-   { SOLVER_RULE_RECOMMENDS, "recommends" },
-   { 0, 0 }
- };
-diff --git a/src/problems.c b/src/problems.c
-index 6f2ad4b1..b46d6249 100644
---- a/src/problems.c
-+++ b/src/problems.c
-@@ -719,6 +719,12 @@ convertsolution(Solver *solv, Id why, Queue *solutionq)
- 	}
-       return;
-     }
-+  if (why >= solv->blackrules && why < solv->blackrules_end)
-+    {
-+      queue_push(solutionq, SOLVER_SOLUTION_BLACK);
-+      assert(solv->rules[why].p < 0);
-+      queue_push(solutionq, -solv->rules[why].p);
-+    }
- }
- 
- /*
-@@ -981,6 +987,8 @@ solver_solutionelement_extrajobflags(Solver *solv, Id problem, Id solution)
-  *    -> add (SOLVER_INSTALL|SOLVER_SOLVABLE, rp) to the job
-  *    SOLVER_SOLUTION_BEST          pkgid
-  *    -> add (SOLVER_INSTALL|SOLVER_SOLVABLE, rp) to the job
-+ *    SOLVER_SOLUTION_BLACK         pkgid
-+ *    -> add (SOLVER_INSTALL|SOLVER_SOLVABLE, rp) to the job
-  *    SOLVER_SOLUTION_JOB           jobidx
-  *    -> remove job (jobidx - 1, jobidx) from job queue
-  *    SOLVER_SOLUTION_POOLJOB       jobidx
-@@ -1331,6 +1339,8 @@ solver_problemruleinfo2str(Solver *solv, SolverRuleinfo type, Id source, Id targ
-       s = pool_tmpjoin(pool, "both package ", pool_solvid2str(pool, source), " and ");
-       s = pool_tmpjoin(pool, s, pool_solvid2str(pool, target), " obsolete ");
-       return pool_tmpappend(pool, s, pool_dep2str(pool, dep), 0);
-+    case SOLVER_RULE_BLACK:
-+      return pool_tmpjoin(pool, "package ", pool_solvid2str(pool, source), " can only be installed by a direct request");
-     default:
-       return "bad problem rule type";
-     }
-@@ -1385,6 +1395,11 @@ solver_solutionelement2str(Solver *solv, Id p, Id rp)
-       else
-         return pool_tmpjoin(pool, "install ", pool_solvable2str(pool, s), " despite the old version");
-     }
-+  else if (p == SOLVER_SOLUTION_BLACK)
-+    {
-+      Solvable *s = pool->solvables + rp;
-+      return pool_tmpjoin(pool, "install ", pool_solvable2str(pool, s), 0);
-+    }
-   else if (p > 0 && rp == 0)
-     return pool_tmpjoin(pool, "allow deinstallation of ", pool_solvid2str(pool, p), 0);
-   else if (p > 0 && rp > 0)
-diff --git a/src/problems.h b/src/problems.h
-index 37021e1d..45e4e7c6 100644
---- a/src/problems.h
-+++ b/src/problems.h
-@@ -22,11 +22,12 @@ extern "C" {
- 
- struct s_Solver;
- 
--#define SOLVER_SOLUTION_JOB             (0)
--#define SOLVER_SOLUTION_DISTUPGRADE     (-1)
--#define SOLVER_SOLUTION_INFARCH         (-2)
--#define SOLVER_SOLUTION_BEST            (-3)
--#define SOLVER_SOLUTION_POOLJOB         (-4)
-+#define SOLVER_SOLUTION_JOB		(0)
-+#define SOLVER_SOLUTION_DISTUPGRADE	(-1)
-+#define SOLVER_SOLUTION_INFARCH		(-2)
-+#define SOLVER_SOLUTION_BEST		(-3)
-+#define SOLVER_SOLUTION_POOLJOB		(-4)
-+#define SOLVER_SOLUTION_BLACK		(-5)
- 
- void solver_recordproblem(struct s_Solver *solv, Id rid);
- void solver_fixproblem(struct s_Solver *solv, Id rid);
-diff --git a/src/rules.c b/src/rules.c
-index 57895c01..611029e3 100644
---- a/src/rules.c
-+++ b/src/rules.c
-@@ -2101,6 +2101,97 @@ reenableduprule(Solver *solv, Id name)
-     }
- }
- 
-+/***********************************************************************
-+ ***
-+ ***  Black rule part
-+ ***/
-+
-+static inline void
-+disableblackrule(Solver *solv, Id p)
-+{
-+  Rule *r;
-+  int i;
-+  for (i = solv->blackrules, r = solv->rules + i; i < solv->blackrules_end; i++, r++)
-+    if (r->p == -p)
-+      solver_disablerule(solv, r);
-+}
-+
-+static inline void
-+reenableblackrule(Solver *solv, Id p)
-+{
-+  Pool *pool = solv->pool;
-+  Rule *r;
-+  int i;
-+  for (i = solv->blackrules, r = solv->rules + i; i < solv->blackrules_end; i++, r++)
-+    if (r->p == -p)
-+      {
-+	solver_enablerule(solv, r);
-+	IF_POOLDEBUG (SOLV_DEBUG_SOLUTIONS)
-+	  {
-+	    POOL_DEBUG(SOLV_DEBUG_SOLUTIONS, "@@@ re-enabling ");
-+	    solver_printruleclass(solv, SOLV_DEBUG_SOLUTIONS, r);
-+	  }
-+      }
-+}
-+
-+void
-+solver_addblackrules(Solver *solv)
-+{
-+  int i;
-+  Id how, select, what, p, pp;
-+  Queue *job = &solv->job;
-+  Pool *pool = solv->pool;
-+  Repo *installed = solv->installed;
-+  Map updatemap;
-+
-+  map_init(&updatemap, 0);
-+  solv->blackrules = solv->nrules;
-+  if (installed)
-+    {
-+      for (i = 0; i < job->count; i += 2)
-+	{
-+	  how = job->elements[i];
-+	  select = job->elements[i] & SOLVER_SELECTMASK;
-+	  what = job->elements[i + 1];
-+	  switch (how & SOLVER_JOBMASK)
-+	    {
-+	    case SOLVER_BLACKLIST:
-+	      FOR_JOB_SELECT(p, pp, select, what)
-+		{
-+		  Solvable *s = pool->solvables + p;
-+		  if (s->repo != installed)
-+		    continue;
-+		  if (!updatemap.size)
-+		    map_grow(&updatemap, pool->ss.nstrings);
-+		  if (s->name > 0 && s->name < pool->ss.nstrings)
-+		    MAPSET(&updatemap, s->name);
-+		}
-+	    }
-+	}
-+    }
-+  for (i = 0; i < job->count; i += 2)
-+    {
-+      how = job->elements[i];
-+      select = job->elements[i] & SOLVER_SELECTMASK;
-+      what = job->elements[i + 1];
-+      switch (how & SOLVER_JOBMASK)
-+	{
-+	case SOLVER_BLACKLIST:
-+	  FOR_JOB_SELECT(p, pp, select, what)
-+	    {
-+	      Solvable *s = pool->solvables + p;
-+	      if (s->repo == installed)
-+		continue;
-+	      if (updatemap.size && s->name > 0 && s->name < pool->ss.nstrings && MAPTST(&updatemap, s->name))
-+		continue;	/* installed package with same name is already blacklisted */
-+	      solver_addrule(solv, -p, 0, 0);
-+	    }
-+	  break;
-+	}
-+    }
-+  map_free(&updatemap);
-+  solv->blackrules_end = solv->nrules;
-+}
- 
- /***********************************************************************
-  ***
-@@ -2114,6 +2205,7 @@ reenableduprule(Solver *solv, Id name)
- #define DISABLE_UPDATE	1
- #define DISABLE_INFARCH	2
- #define DISABLE_DUP	3
-+#define DISABLE_BLACK	4
- 
- static void
- jobtodisablelist(Solver *solv, Id how, Id what, Queue *q)
-@@ -2213,6 +2305,16 @@ jobtodisablelist(Solver *solv, Id how, Id what, Queue *q)
- 		}
- 	    }
- 	}
-+      if ((set & SOLVER_SETEVR) != 0 && solv->blackrules != solv->blackrules_end)
-+        {
-+	  if (select == SOLVER_SOLVABLE)
-+	    queue_push2(q, DISABLE_BLACK, what);
-+	  else
-+	    {
-+	      FOR_JOB_SELECT(p, pp, select, what)
-+	        queue_push2(q, DISABLE_BLACK, p);
-+	    }
-+        }
-       if (!installed || installed->end == installed->start)
- 	return;
-       /* now the hard part: disable some update rules */
-@@ -2386,6 +2488,9 @@ solver_disablepolicyrules(Solver *solv)
- 	case DISABLE_DUP:
- 	  disableduprule(solv, arg);
- 	  break;
-+	case DISABLE_BLACK:
-+	  disableblackrule(solv, arg);
-+	  break;
- 	default:
- 	  break;
- 	}
-@@ -2489,6 +2594,9 @@ solver_reenablepolicyrules(Solver *solv, int jobidx)
- 	case DISABLE_DUP:
- 	  reenableduprule(solv, arg);
- 	  break;
-+	case DISABLE_BLACK:
-+	  reenableblackrule(solv, arg);
-+	  break;
- 	}
-     }
-   queue_free(&q);
-@@ -2815,6 +2923,12 @@ solver_ruleinfo(Solver *solv, Id rid, Id *fromp, Id *top, Id *depp)
- 	*depp = solv->yumobsrules_info[rid - solv->yumobsrules];
-       return SOLVER_RULE_YUMOBS;
-     }
-+  if (rid >= solv->blackrules && rid < solv->blackrules_end)
-+    {
-+      if (fromp)
-+	*fromp = -r->p;
-+      return SOLVER_RULE_BLACK;
-+    }
-   if (rid >= solv->choicerules && rid < solv->choicerules_end)
-     return SOLVER_RULE_CHOICE;
-   if (rid >= solv->recommendsrules && rid < solv->recommendsrules_end)
-@@ -2845,10 +2959,14 @@ solver_ruleclass(Solver *solv, Id rid)
-     return SOLVER_RULE_BEST;
-   if (rid >= solv->yumobsrules && rid < solv->yumobsrules_end)
-     return SOLVER_RULE_YUMOBS;
-+  if (rid >= solv->blackrules && rid < solv->blackrules_end)
-+    return SOLVER_RULE_BLACK;
-   if (rid >= solv->choicerules && rid < solv->choicerules_end)
-     return SOLVER_RULE_CHOICE;
-   if (rid >= solv->recommendsrules && rid < solv->recommendsrules_end)
-     return SOLVER_RULE_RECOMMENDS;
-+  if (rid >= solv->blackrules && rid < solv->blackrules_end)
-+    return SOLVER_RULE_BLACK;
-   if (rid >= solv->learntrules && rid < solv->nrules)
-     return SOLVER_RULE_LEARNT;
-   return SOLVER_RULE_UNKNOWN;
-diff --git a/src/rules.h b/src/rules.h
-index 6b8511f7..92860908 100644
---- a/src/rules.h
-+++ b/src/rules.h
-@@ -72,7 +72,8 @@ typedef enum {
-   SOLVER_RULE_LEARNT = 0x800,
-   SOLVER_RULE_BEST = 0x900,
-   SOLVER_RULE_YUMOBS = 0xa00,
--  SOLVER_RULE_RECOMMENDS = 0xb00
-+  SOLVER_RULE_RECOMMENDS = 0xb00,
-+  SOLVER_RULE_BLACK = 0xc00
- } SolverRuleinfo;
- 
- #define SOLVER_RULE_TYPEMASK    0xff00
-@@ -134,6 +135,9 @@ extern void solver_addbestrules(struct s_Solver *solv, int havebestinstalljobs,
- /* yumobs rules */
- extern void solver_addyumobsrules(struct s_Solver *solv);
- 
-+/* black rules */
-+extern void solver_addblackrules(struct s_Solver *solv);
-+
- /* recommends rules */
- extern void solver_addrecommendsrules(struct s_Solver *solv);
- 
-diff --git a/src/solver.c b/src/solver.c
-index 45f9dbfd..6a9d66e6 100644
---- a/src/solver.c
-+++ b/src/solver.c
-@@ -3377,6 +3377,7 @@ solver_solve(Solver *solv, Queue *job)
-   int hasbestinstalljob = 0;
-   int hasfavorjob = 0;
-   int haslockjob = 0;
-+  int hasblacklistjob = 0;
- 
-   solve_start = solv_timems(0);
- 
-@@ -3987,6 +3988,10 @@ solver_solve(Solver *solv, Queue *job)
- 	  POOL_DEBUG(SOLV_DEBUG_JOB, "job: %s %s\n", (how & SOLVER_JOBMASK) == SOLVER_FAVOR ? "favor" : "disfavor", solver_select2str(pool, select, what));
- 	  hasfavorjob = 1;
- 	  break;
-+	case SOLVER_BLACKLIST:
-+	  POOL_DEBUG(SOLV_DEBUG_JOB, "job: blacklist %s\n", solver_select2str(pool, select, what));
-+	  hasblacklistjob = 1;
-+	  break;
- 	default:
- 	  POOL_DEBUG(SOLV_DEBUG_JOB, "job: unknown job\n");
- 	  break;
-@@ -4040,6 +4045,11 @@ solver_solve(Solver *solv, Queue *job)
-   else
-     solv->yumobsrules = solv->yumobsrules_end = solv->nrules;
- 
-+  if (hasblacklistjob)
-+    solver_addblackrules(solv);
-+  else
-+    solv->blackrules = solv->blackrules_end = solv->nrules;
-+
-   if (solv->havedisfavored && solv->strongrecommends && solv->recommendsruleq)
-     solver_addrecommendsrules(solv);
-   else
-@@ -4851,6 +4861,9 @@ pool_job2str(Pool *pool, Id how, Id what, Id flagmask)
-     case SOLVER_DISFAVOR:
-       strstart = "disfavor ";
-       break;
-+    case SOLVER_BLACKLIST:
-+      strstart = "blacklist ";
-+      break;
-     default:
-       strstart = "unknown job ";
-       break;
-diff --git a/src/solver.h b/src/solver.h
-index daf4f636..2dec2590 100644
---- a/src/solver.h
-+++ b/src/solver.h
-@@ -76,6 +76,9 @@ struct s_Solver {
-   Id yumobsrules_end;
-   Id *yumobsrules_info;			/* the dependency for each rule */
- 
-+  Id blackrules;			/* rules from blacklisted packages */
-+  Id blackrules_end;
-+
-   Id choicerules;			/* choice rules (always weak) */
-   Id choicerules_end;
-   Id *choicerules_info;			/* the rule we used to generate the choice rule */
-@@ -244,6 +247,7 @@ typedef struct s_Solver Solver;
- #define SOLVER_ALLOWUNINSTALL		0x0b00
- #define SOLVER_FAVOR			0x0c00
- #define SOLVER_DISFAVOR			0x0d00
-+#define SOLVER_BLACKLIST		0x0e00
- 
- #define SOLVER_JOBMASK			0xff00
- 
-diff --git a/src/solverdebug.c b/src/solverdebug.c
-index b1b55f48..0b2879b0 100644
---- a/src/solverdebug.c
-+++ b/src/solverdebug.c
-@@ -128,6 +128,8 @@ solver_printruleclass(Solver *solv, int type, Rule *r)
-     POOL_DEBUG(type, "FEATURE ");
-   else if (p >= solv->yumobsrules && p < solv->yumobsrules_end)
-     POOL_DEBUG(type, "YUMOBS ");
-+  else if (p >= solv->blackrules && p < solv->blackrules_end)
-+    POOL_DEBUG(type, "BLACK ");
-   else if (p >= solv->recommendsrules && p < solv->recommendsrules_end)
-     POOL_DEBUG(type, "RECOMMENDS ");
-   solver_printrule(solv, type, r);
-diff --git a/test/testcases/blacklist/ptf b/test/testcases/blacklist/ptf
-new file mode 100644
-index 00000000..b8765d05
---- /dev/null
-+++ b/test/testcases/blacklist/ptf
-@@ -0,0 +1,52 @@
-+repo system 0 testtags <inline>
-+#>=Pkg: ptf-2 1 1 noarch
-+#>=Prv: ptf-package()
-+repo available 0 testtags <inline>
-+#>=Pkg: ptf-1 1 1 noarch
-+#>=Prv: ptf-package()
-+#>=Pkg: ptf-2 2 1 noarch
-+#>=Prv: ptf-package()
-+#>=Pkg: A 1 1 noarch
-+#>=Req: ptf-1
-+
-+system i686 * system
-+
-+#
-+# test 1: a ptf package cannot be pulled in via a dependency
-+#
-+job blacklist provides ptf-package()
-+job install name A
-+result transaction,problems <inline>
-+#>problem 78613afb info package A-1-1.noarch requires ptf-1, but none of the providers can be installed
-+#>problem 78613afb solution 23f73f5b deljob install name A
-+#>problem 78613afb solution b79aeb6f allow ptf-1-1-1.noarch@available
-+
-+#
-+# test 2: a ptf package cannot be pulled in via a unspecific job
-+#
-+nextjob
-+job blacklist provides ptf-package()
-+job install name ptf-1
-+result transaction,problems <inline>
-+#>problem 021b17e2 info package ptf-1-1-1.noarch cannot only be installed by a direct request
-+#>problem 021b17e2 solution 932a6c2f deljob install name ptf-1
-+#>problem 021b17e2 solution b79aeb6f allow ptf-1-1-1.noarch@available
-+
-+#
-+# test 3: a ptf package can be pulled in via a specific job
-+#
-+nextjob
-+job blacklist provides ptf-package()
-+job install name ptf-1 [setevr]
-+result transaction,problems <inline>
-+#>install ptf-1-1-1.noarch@available
-+
-+#
-+# test 4: a ptf package can be updated
-+#
-+nextjob
-+job blacklist provides ptf-package()
-+job update all packages
-+result transaction,problems <inline>
-+#>upgrade ptf-2-1-1.noarch@system ptf-2-2-1.noarch@available
-+
-diff --git a/test/testcases/blacklist/retracted b/test/testcases/blacklist/retracted
-new file mode 100644
-index 00000000..d75f17dd
---- /dev/null
-+++ b/test/testcases/blacklist/retracted
-@@ -0,0 +1,22 @@
-+repo system 0 testtags <inline>
-+#>=Pkg: B 1 1 noarch
-+repo available 0 testtags <inline>
-+#>=Pkg: patch 1 1 noarch
-+#>=Con: B < 2-1
-+#>=Pkg: B 2 1 noarch
-+#>=Prv: retracted-patch-package()
-+
-+system i686 * system
-+
-+job blacklist provides retracted-patch-package()
-+job install name patch
-+#>problem 3a66200a info package patch-1-1.noarch conflicts with B < 2-1 provided by B-1-1.noarch
-+#>problem 3a66200a solution 14805cf8 deljob install name patch
-+#>problem 3a66200a solution 4a9277b8 allow B-2-1.noarch@available
-+#>problem 3a66200a solution 718064ed erase B-1-1.noarch@system
-+
-+nextjob
-+job blacklist provides retracted-patch-package()
-+job install pkg B-2-1.noarch@available
-+result transaction,problems <inline>
-+#>upgrade B-1-1.noarch@system B-2-1.noarch@available
-diff --git a/tools/repo2solv.c b/tools/repo2solv.c
-index 03491a67..b3907439 100644
---- a/tools/repo2solv.c
-+++ b/tools/repo2solv.c
-@@ -868,6 +868,7 @@ main(int argc, char **argv)
- #ifdef SUSE
-   if (add_auto)
-     repo_add_autopattern(repo, 0);
-+  repo_mark_retracted_packages(repo, pool_str2id(pool, "retracted-patch-package()", 1));
- #endif
-   tool_write(repo, stdout);
-   pool_free(pool);
--- 
-2.24.0
-
diff --git a/0008-Add-experimental-support-for-self-destruct-packages.patch b/0008-Add-experimental-support-for-self-destruct-packages.patch
deleted file mode 100644
index 00ef780..0000000
--- a/0008-Add-experimental-support-for-self-destruct-packages.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-From 25356d16b4520d716e64c8f9506ef4d00b343c63 Mon Sep 17 00:00:00 2001
-From: Michael Schroeder <mls@suse.de>
-Date: Fri, 8 Nov 2019 15:09:54 +0100
-Subject: [PATCH 8/8] Add experimental support for self-destruct packages
-
-Self-destruct packages will not be part of the transaction. But
-they still will obsolete packages, thus updating to a self-destruct
-package will lead to the erasure of the old package.
----
- src/knownid.h     |  2 ++
- src/transaction.c | 15 ++++++++++++++-
- 2 files changed, 16 insertions(+), 1 deletion(-)
-
-diff --git a/src/knownid.h b/src/knownid.h
-index 7da12396..3a88ee26 100644
---- a/src/knownid.h
-+++ b/src/knownid.h
-@@ -263,6 +263,8 @@ KNOWNID(SOLVABLE_BUILDFLAVOR,		"solvable:buildflavor"),	/* conda */
- 
- KNOWNID(UPDATE_STATUS,			"update:status"),		/* "stable", "testing", ...*/
- 
-+KNOWNID(LIBSOLV_SELF_DESTRUCT_PKG,      "libsolv-self-destruct-pkg()"),	/* this package will self-destruct on installation */
-+
- KNOWNID(ID_NUM_INTERNAL,		0)
- 
- #ifdef KNOWNID_INITIALIZE
-diff --git a/src/transaction.c b/src/transaction.c
-index 4a4189eb..fb2cc9aa 100644
---- a/src/transaction.c
-+++ b/src/transaction.c
-@@ -646,6 +646,8 @@ create_transaction_info(Transaction *trans, Queue *decisionq)
-       s = pool->solvables + p;
-       if (!s->repo || s->repo == installed)
- 	continue;
-+      if (!MAPTST(&trans->transactsmap, p))
-+	continue;
-       multi = trans->multiversionmap.size && MAPTST(&trans->multiversionmap, p);
-       FOR_PROVIDES(p2, pp2, s->name)
- 	{
-@@ -726,9 +728,10 @@ transaction_create_decisionq(Pool *pool, Queue *decisionq, Map *multiversionmap)
- {
-   Repo *installed = pool->installed;
-   int i, needmulti;
--  Id p;
-+  Id p, pp;
-   Solvable *s;
-   Transaction *trans;
-+  Map selfdestructmap;
- 
-   trans = transaction_create(pool);
-   if (multiversionmap && !multiversionmap->size)
-@@ -736,6 +739,13 @@ transaction_create_decisionq(Pool *pool, Queue *decisionq, Map *multiversionmap)
-   queue_empty(&trans->steps);
-   map_init(&trans->transactsmap, pool->nsolvables);
-   needmulti = 0;
-+  map_init(&selfdestructmap, 0);
-+  FOR_PROVIDES(p, pp, LIBSOLV_SELF_DESTRUCT_PKG)
-+    {
-+      if (!selfdestructmap.size)
-+	map_grow(&selfdestructmap, pool->nsolvables);
-+      MAPSET(&selfdestructmap, p);
-+    }
-   for (i = 0; i < decisionq->count; i++)
-     {
-       p = decisionq->elements[i];
-@@ -746,11 +756,14 @@ transaction_create_decisionq(Pool *pool, Queue *decisionq, Map *multiversionmap)
- 	MAPSET(&trans->transactsmap, -p);
-       if (!(installed && s->repo == installed) && p > 0)
- 	{
-+	  if (selfdestructmap.size && MAPTST(&selfdestructmap, p))
-+	    continue;
- 	  MAPSET(&trans->transactsmap, p);
- 	  if (multiversionmap && MAPTST(multiversionmap, p))
- 	    needmulti = 1;
- 	}
-     }
-+  map_free(&selfdestructmap);
-   MAPCLR(&trans->transactsmap, SYSTEMSOLVABLE);
-   if (needmulti)
-     map_init_clone(&trans->multiversionmap, multiversionmap);
--- 
-2.24.0
-
diff --git a/libsolv.spec b/libsolv.spec
index 38327be..e275708 100644
--- a/libsolv.spec
+++ b/libsolv.spec
@@ -5,23 +5,13 @@
 
 Summary:	Package dependency solver and repository storage system
 Name:		libsolv
-Version:	0.7.7
-Release:	2
+Version:	0.7.8
+Release:	1
 License:	MIT
 Group:		System/Libraries
 # See also: https://github.com/openSUSE/libsolv
 URL:		http://en.opensuse.org/openSUSE:Libzypp_satsolver
 Source0:	https://github.com/openSUSE/%{name}/archive/%{version}/%{name}-%{version}.tar.gz
-# Patches from git master
-# libzypp needs solvable_matchessolvable (added in Patch4)
-Patch0:		0001-Parse-the-patch-status-in-the-updateinfo-xml.patch
-Patch1:		0002-Add-UPDATE_STATUS-to-knownids.patch
-Patch2:		0003-repo_rpmdb.c-move-Packages-string-into-backend-imple.patch
-Patch3:		0004-Add-workaround-to-stat_database-to-find-other-databa.patch
-Patch4:		0005-Add-solvable_matchessolvable-function.patch
-Patch5:		0006-Move-marker-argument-in-solvable_matchessolvable.patch
-Patch6:		0007-Add-support-for-blacklisted-packages.patch
-Patch7:		0008-Add-experimental-support-for-self-destruct-packages.patch
 # OpenMandriva specific patches
 ## znver1 support
 Patch1001:	libsolv-0.6.34-znver1.patch
Not Available

benbullard79 [@T] cox.netNo Comment.1611d 06hrs
benbullard79 [@T] cox.netIn the fullness of time.1608d 15hrs
benbullard79 [@T] cox.netTime.1608d 15hrs