]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
support -X option in rpmmd2solv, make add_autopattern available in bindings
authorMichael Schroeder <mls@suse.de>
Mon, 23 Jun 2014 14:44:48 +0000 (16:44 +0200)
committerMichael Schroeder <mls@suse.de>
Mon, 23 Jun 2014 14:45:54 +0000 (16:45 +0200)
bindings/solv.i
src/solvable.c
tools/rpmmd2solv.c

index 68161832dd6c849dd84bc36dd75beefca00ef20a..2d8f77521b3f1fb0efefb4d77f5e48bbce7bfa86 100644 (file)
@@ -497,6 +497,9 @@ typedef int bool;
 #ifdef ENABLE_ARCHREPO
 #include "repo_arch.h"
 #endif
+#ifdef SUSE
+#include "repo_autopattern.h"
+#endif
 #include "solv_xfopen.h"
 
 /* for old ruby versions */
@@ -1603,6 +1606,11 @@ rb_eval_string(
   XSolvable *add_arch_pkg(const char *name, int flags = 0) {
     return new_XSolvable($self->pool, repo_add_arch_pkg($self, name, flags));
   }
+#endif
+#ifdef SUSE
+  bool add_autopattern(int flags = 0) {
+    return repo_add_autopattern($self, flags) == 0;
+  }
 #endif
   void internalize() {
     repo_internalize($self);
index b3e73a62f2b51ed8e8d85e154c8468d1d5877f15..815e9f08a12d8f422ce78866cd11ceae404c9917 100644 (file)
@@ -746,10 +746,6 @@ pool_create_state_maps(Pool *pool, Queue *installed, Map *installedmap, Map *con
  * both solvables need to come from the same pool
  */
 
-#warning HOTFIX [Bug 881493] New: zypper dup does always update sles-release
-inline int isProduct(const char *name)
-{ return name && strncmp(name, "product:", 8) == 0; }
-
 int
 solvable_identical(Solvable *s1, Solvable *s2)
 {
@@ -763,12 +759,14 @@ solvable_identical(Solvable *s1, Solvable *s2)
   if (s1->evr != s2->evr)
     return 0;
 
-  if (isProduct(pool_id2str(s1->repo->pool, s1->name))) // HOTFIX [Bug 881493] end check for products here
-    return 1;
-
-  /* map missing vendor to empty string */
+  /* check vendor, map missing vendor to empty string */
   if ((s1->vendor ? s1->vendor : 1) != (s2->vendor ? s2->vendor : 1))
-    return 0;
+    {
+      /* workaround for bug 881493 */
+      if (s1->repo && !strncmp(pool_id2str(s1->repo->pool, s1->name), "product:", 8))
+       return 1;
+      return 0;
+    }
 
   /* looking good, try some fancier stuff */
   /* might also look up the package checksum here */
@@ -781,6 +779,9 @@ solvable_identical(Solvable *s1, Solvable *s2)
     }
   else
     {
+      /* workaround for bug 881493 */
+      if (s1->repo && !strncmp(pool_id2str(s1->repo->pool, s1->name), "product:", 8))
+       return 1;
       /* look at requires in a last attempt to find recompiled packages */
       rq1 = rq2 = 0;
       if (s1->requires)
index ee39eac930d549e61974b61c71317ed2e32f0653..d4fe2ff73b643af59c09ae4775abee59714b638e 100644 (file)
@@ -19,6 +19,9 @@
 #include "pool.h"
 #include "repo.h"
 #include "repo_rpmmd.h"
+#ifdef SUSE
+#include "repo_autopattern.h"
+#endif
 #include "common_write.h"
 #include "solv_xfopen.h"
 
@@ -44,11 +47,14 @@ main(int argc, char **argv)
   const char *basefile = 0;
   const char *dir = 0;
   const char *locale = 0;
+#ifdef SUSE
+  int add_auto = 0;
+#endif
   
   Pool *pool = pool_create();
   Repo *repo = repo_create(pool, "<stdin>");
 
-  while ((c = getopt (argc, argv, "hn:b:d:l:")) >= 0)
+  while ((c = getopt (argc, argv, "hn:b:d:l:X")) >= 0)
     {
       switch(c)
        {
@@ -67,6 +73,11 @@ main(int argc, char **argv)
        case 'l':
          locale = optarg;
          break;
+       case 'X':
+#ifdef SUSE
+         add_auto = 1;
+#endif
+         break;
         default:
           usage(1);
           break;
@@ -142,6 +153,10 @@ main(int argc, char **argv)
          exit(1);
        }
     }
+#ifdef SUSE
+  if (add_auto)
+    repo_add_autopattern(repo, 0);
+#endif
   tool_write(repo, basefile, attrname);
   pool_free(pool);
   exit(0);