prepare to parse diskusage and translations through rpmmd files
authorKlaus Kaempf <kkaempf@suse.de>
Mon, 4 Aug 2008 10:32:34 +0000 (10:32 +0000)
committerKlaus Kaempf <kkaempf@suse.de>
Mon, 4 Aug 2008 10:32:34 +0000 (10:32 +0000)
(backup checkin)

tools/repo_rpmmd.c
tools/rpmmd2solv.c

index f88c273..0166c20 100644 (file)
@@ -178,6 +178,7 @@ static struct stateswitch stateswitches[] = {
   { NUMSTATES}
 };
 
+
 struct parsedata {
   struct parsedata_common common;
   char *kind;
@@ -200,8 +201,12 @@ struct parsedata {
   Repodata *data;
   Id handle;
   XML_Parser *parser;
+  Id (*dirs)[3]; // dirid, size, nfiles
+  int ndirs;
+  Id langcache[ID_NUM_INTERNAL];
 };
 
+
 static Id
 makeevr_atts(Pool *pool, struct parsedata *pd, const char **atts)
 {
index 88cac02..5c72a8f 100644 (file)
@@ -59,11 +59,12 @@ static void
 usage(int status)
 {
   fprintf(stderr, "\nUsage:\n"
-          "rpmmd2solv [-a][-h][-k][-n <attrname>]\n"
-         "  reads a 'rpmmd' repository from <stdin> and writes a .solv file to <stdout>\n"
+          "rpmmd2solv [-a][-h][-k][-n <attrname>][-l <locale>]\n"
+         "  reads 'primary' from a 'rpmmd' repository from <stdin> and writes a .solv file to <stdout>\n"
          "  -h : print help & exit\n"
          "  -k : don't mix kinds (experimental!)\n"
          "  -n <name>: save attributes as <name>.attr\n"
+         "  -l <locale>: parse localization data for <locale>\n"
         );
    exit(status);
 }
@@ -75,12 +76,12 @@ main(int argc, char **argv)
   const char *attrname = 0;
   const char *basefile = 0;
   const char *dir = 0;
-
+  const char *locale = 0;
   
   Pool *pool = pool_create();
   Repo *repo = repo_create(pool, "<stdin>");
 
-  while ((c = getopt (argc, argv, "hkn:b:d:")) >= 0)
+  while ((c = getopt (argc, argv, "hkn:b:d:l:")) >= 0)
     {
       switch(c)
        {
@@ -99,6 +100,9 @@ main(int argc, char **argv)
         case 'd':
           dir = optarg;
           break;
+       case 'l':
+         locale = optarg;
+         break;
         default:
           usage(1);
           break;
@@ -109,9 +113,9 @@ main(int argc, char **argv)
       FILE *fp;
       int l;
       char *fnp;
-      l = strlen(dir);
-      fnp = sat_malloc(l + 20);
-      sprintf(fnp, "%s/primary.xml.gz", dir);
+      l = strlen(dir) + 128;
+      fnp = sat_malloc(l+1);
+      snprintf(fnp, l, "%s/primary.xml.gz", dir);
       if (!(fp = myfopen(fnp)))
        {
          perror(fnp);
@@ -119,6 +123,39 @@ main(int argc, char **argv)
        }
       repo_add_rpmmd(repo, fp, flags);
       fclose(fp);
+      snprintf(fnp, l, "%s/diskusage.xml.gz", dir);
+      if ((fp = myfopen(fnp)))
+       {
+         repo_add_rpmmd(repo, fp, flags);
+         fclose(fp);
+       }
+      if (locale)
+       {
+         if (snprintf(fnp, l, "%s/translation-%s.xml.gz", dir, locale) >= l)
+           {
+             fprintf(stderr, "-l parameter too long\n");
+             exit(1);
+           }
+         while (!(fp = myfopen(fnp)))
+           {
+             fprintf(stderr, "not opened %s\n", fnp);
+             if (strlen(locale) > 2)
+               {
+                 if (snprintf(fnp, l, "%s/translation-%.2s.xml.gz", dir, locale) >= l)
+                   {
+                     fprintf(stderr, "-l parameter too long\n");
+                     exit(1);
+                   }
+                 if ((fp = myfopen(fnp)))
+                   break;
+               }
+             perror(fnp);
+             exit(1);
+           }
+         fprintf(stderr, "opened %s\n", fnp);
+         repo_add_rpmmd(repo, fp, flags);
+         fclose(fp);
+       }
       sat_free(fnp);
     }
   else