Imported Upstream version 0.6.7
[platform/upstream/libsolv.git] / tools / rpmmd2solv.c
index 328af85..d4fe2ff 100644 (file)
 #include "pool.h"
 #include "repo.h"
 #include "repo_rpmmd.h"
+#ifdef SUSE
+#include "repo_autopattern.h"
+#endif
 #include "common_write.h"
-#include "sat_xfopen.h"
+#include "solv_xfopen.h"
 
 
 static void
@@ -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;
@@ -78,19 +89,27 @@ main(int argc, char **argv)
       int l;
       char *fnp;
       l = strlen(dir) + 128;
-      fnp = sat_malloc(l+1);
+      fnp = solv_malloc(l+1);
       snprintf(fnp, l, "%s/primary.xml.gz", dir);
-      if (!(fp = sat_xfopen(fnp)))
+      if (!(fp = solv_xfopen(fnp, 0)))
        {
          perror(fnp);
          exit(1);
        }
-      repo_add_rpmmd(repo, fp, 0, flags);
+      if (repo_add_rpmmd(repo, fp, 0, flags))
+       {
+         fprintf(stderr, "rpmmd2solv: %s: %s\n", fnp, pool_errstr(pool));
+         exit(1);
+       }
       fclose(fp);
       snprintf(fnp, l, "%s/diskusagedata.xml.gz", dir);
-      if ((fp = sat_xfopen(fnp)))
+      if ((fp = solv_xfopen(fnp, 0)))
        {
-         repo_add_rpmmd(repo, fp, 0, flags);
+         if (repo_add_rpmmd(repo, fp, 0, flags))
+           {
+             fprintf(stderr, "rpmmd2solv: %s: %s\n", fnp, pool_errstr(pool));
+             exit(1);
+           }
          fclose(fp);
        }
       if (locale)
@@ -100,7 +119,7 @@ main(int argc, char **argv)
              fprintf(stderr, "-l parameter too long\n");
              exit(1);
            }
-         while (!(fp = sat_xfopen(fnp)))
+         while (!(fp = solv_xfopen(fnp, 0)))
            {
              fprintf(stderr, "not opened %s\n", fnp);
              if (strlen(locale) > 2)
@@ -110,20 +129,34 @@ main(int argc, char **argv)
                      fprintf(stderr, "-l parameter too long\n");
                      exit(1);
                    }
-                 if ((fp = sat_xfopen(fnp)))
+                 if ((fp = solv_xfopen(fnp, 0)))
                    break;
                }
              perror(fnp);
              exit(1);
            }
          fprintf(stderr, "opened %s\n", fnp);
-         repo_add_rpmmd(repo, fp, 0, flags);
+         if (repo_add_rpmmd(repo, fp, 0, flags))
+           {
+             fprintf(stderr, "rpmmd2solv: %s: %s\n", fnp, pool_errstr(pool));
+             exit(1);
+           }
          fclose(fp);
        }
-      sat_free(fnp);
+      solv_free(fnp);
     }
   else
-    repo_add_rpmmd(repo, stdin, 0, flags);
+    {
+      if (repo_add_rpmmd(repo, stdin, 0, flags))
+       {
+         fprintf(stderr, "rpmmd2solv: %s\n", pool_errstr(pool));
+         exit(1);
+       }
+    }
+#ifdef SUSE
+  if (add_auto)
+    repo_add_autopattern(repo, 0);
+#endif
   tool_write(repo, basefile, attrname);
   pool_free(pool);
   exit(0);