]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Transcode ptfdep- dependency in ptf packages to complex requires
authorMichael Schroeder <mls@suse.de>
Wed, 26 May 2021 12:08:46 +0000 (14:08 +0200)
committerMichael Schroeder <mls@suse.de>
Wed, 26 May 2021 12:08:46 +0000 (14:08 +0200)
The rpm package in SLE-12 does not understand complex dependencies,
so we have to encode them as provides and transcode them when we
parse the package metadata.

src/suse.c

index 2533af912eccae937ed23456fd8ee8ef12a5faa3..62b8522b648dd636fa5873fbde0f828e3ed70960 100644 (file)
@@ -236,12 +236,41 @@ repo_fix_conflicts(Repo *repo, Offset conflicts)
   return conflicts;
 }
 
+void
+repo_fix_ptfdeps(Solvable *s)
+{
+  Repo *repo = s->repo;
+  Pool *pool = repo->pool;
+  unsigned int i;
+  Id id, name, evr;
+  char *namestr;
+  Reldep *rd;
+  
+  for (i = s->provides; (id = repo->idarraydata[i]) != 0; i++)
+    {
+      if (!ISRELDEP(id))
+       continue;
+      rd = GETRELDEP(pool, id);
+      if (rd->flags != REL_EQ || strncmp(pool_id2str(pool, rd->name), "ptfdep-", 7) != 0)
+       continue;
+      namestr = solv_strdup(pool_id2str(pool, rd->name) + 7);
+      name = pool_str2id(pool, namestr, 1);
+      solv_free(namestr);
+      evr = rd->evr;
+      id = pool_rel2id(pool, name, evr, REL_EQ, 1);
+      id = pool_rel2id(pool, id, name, REL_COND, 1);
+      s->requires = repo_addid_dep(repo, s->requires, id, -SOLVABLE_PREREQMARKER);
+    }
+}
+
 void
 repo_rewrite_suse_deps(Solvable *s, Offset freshens)
 {
   s->supplements = repo_fix_supplements(s->repo, s->provides, s->supplements, freshens);
   if (s->conflicts)
     s->conflicts = repo_fix_conflicts(s->repo, s->conflicts);
+  if (s->name && !strncmp(pool_id2str(s->repo->pool, s->name), "ptf-", 4))
+    repo_fix_ptfdeps(s);
 }
 
 /**********************************************************************************/