- repo_content: store DESCRDIR
authorMichael Schroeder <mls@suse.de>
Wed, 24 Jun 2009 09:26:18 +0000 (11:26 +0200)
committerMichael Schroeder <mls@suse.de>
Wed, 24 Jun 2009 09:26:18 +0000 (11:26 +0200)
- susetags2solv: add query option

ext/repo_content.c
src/knownid.h
tools/susetags2solv.c

index 4c71c42..b398297 100644 (file)
@@ -203,6 +203,8 @@ repo_add_content(Repo *repo, FILE *fp, int flags)
   Repodata *data;
   Id handle = 0;
   int contentstyle = 0;
+  char *descrdir = 0;
+  char *datadir = 0;
 
   int i = 0;
 
@@ -270,17 +272,45 @@ repo_add_content(Repo *repo, FILE *fp, int flags)
 #define code10 (contentstyle == 10)
 #define code11 (contentstyle == 11)
 
-         if (contentstyle == 0)
+         if (istag ("CONTENTSTYLE"))
            {
-             if (istag ("CONTENTSTYLE"))
-               {
-                 contentstyle = atoi(value);
-                 continue;
-               }
+             contentstyle = atoi(value);
+             continue;
+           }
+         if (!contentstyle)
+           contentstyle = 10;
+
+         if (istag ("DESCRDIR"))
+           {
+             if (descrdir)
+               free(descrdir);
+             else
+               repo_set_str(repo, SOLVID_META, SUSETAGS_DESCRDIR, value);
+             if (s)
+               repo_set_str(repo, s - pool->solvables, SUSETAGS_DESCRDIR, value);
+             descrdir = strdup(value);
+             continue;
+           }
+         if (istag ("DATADIR"))
+           {
+             if (datadir)
+               free(datadir);
              else
-               contentstyle = 10;
+               repo_set_str(repo, SOLVID_META, SUSETAGS_DATADIR, value);
+             if (s)
+               repo_set_str(repo, s - pool->solvables, SUSETAGS_DATADIR, value);
+             datadir = strdup(value);
+             continue;
            }
 
+         /* XXX: add those to SOLVID_META, too */
+         if (istag ("META"))
+           continue;
+         if (istag ("HASH"))
+           continue;
+         if (istag ("KEY"))
+           continue;
+
          if ((code10 && istag ("PRODUCT"))
              || (code11 && istag ("NAME")))
            {
@@ -306,6 +336,10 @@ repo_add_content(Repo *repo, FILE *fp, int flags)
              repodata_extend(data, s - pool->solvables);
              handle = s - pool->solvables;
              s->name = str2id(pool, join(&pd, "product", ":", value), 1);
+             if (datadir)
+               repo_set_str(repo, s - pool->solvables, SUSETAGS_DATADIR, datadir);
+             if (descrdir)
+               repo_set_str(repo, s - pool->solvables, SUSETAGS_DESCRDIR, descrdir);
              continue;
            }
 
@@ -324,8 +358,6 @@ repo_add_content(Repo *repo, FILE *fp, int flags)
             pd.tmprel = strdup(value);
          else if (code11 && istag ("DISTRIBUTION"))
            repo_set_str(repo, s - pool->solvables, SOLVABLE_DISTRIBUTION, value);
-         else if (istag ("DATADIR"))
-           repo_set_str(repo, s - pool->solvables, SUSETAGS_DATADIR, value);
          else if (istag ("UPDATEURLS"))
            add_multiple_urls(data, handle, value, str2id(pool, "update", 1));
          else if (istag ("EXTRAURLS"))
@@ -409,9 +441,14 @@ repo_add_content(Repo *repo, FILE *fp, int flags)
        pool_debug(pool, SAT_ERROR, "repo_content: malformed line: %s\n", line);
     }
 
+  if (datadir)
+    free(datadir);
+  if (descrdir)
+    free(descrdir);
+
   if (!s || !s->name)
     {
-      pool_debug(pool, SAT_FATAL, "repo_content: 'content' incomplete, no product solvable created !\n");
+      pool_debug(pool, SAT_FATAL, "repo_content: 'content' incomplete, no product solvable created!\n");
       exit(1);
     }
 
@@ -460,6 +497,7 @@ repo_add_content(Repo *repo, FILE *fp, int flags)
     sat_free(pd.tmp);
   sat_free(line);
   sat_free(otherarchs);
+  join_freemem();
   if (!(flags & REPO_NO_INTERNALIZE))
     repodata_internalize(data);
 }
index 723af5d..62be3ce 100644 (file)
@@ -139,10 +139,11 @@ KNOWNID(SOLVABLE_ORDER,                   "solvable:order"),
 
 KNOWNID(UPDATE_REBOOT,                 "update:reboot"),       /* reboot suggested (kernel update) */
 KNOWNID(UPDATE_RESTART,                        "update:restart"),      /* restart suggested (update stack update) */
-KNOWNID(UPDATE_RELOGIN,                        "update:relogin"),      /* restart suggested (update stack update) */
+KNOWNID(UPDATE_RELOGIN,                        "update:relogin"),      /* relogin suggested */
 
-KNOWNID(UPDATE_MESSAGE,                        "update:message"),      /* restart suggested (update stack update) */
-                                                                       /* 'content' of patch, usually list of packages */
+KNOWNID(UPDATE_MESSAGE,                        "update:message"),      /* informative message */
+
+/* 'content' of patch, usually list of packages */
 KNOWNID(UPDATE_COLLECTION,             "update:collection"),          /*  "name evr arch" */
 KNOWNID(UPDATE_COLLECTION_NAME,                "update:collection:name"),     /*   name */
 KNOWNID(UPDATE_COLLECTION_EVR,         "update:collection:evr"),      /*   epoch:version-release */
@@ -171,6 +172,7 @@ KNOWNID(PRODUCT_REGISTER_RELEASE,   "product:regrelease"),
 
 /* argh */
 KNOWNID(SUSETAGS_DATADIR,              "susetags:datadir"),
+KNOWNID(SUSETAGS_DESCRDIR,             "susetags:descrdir"),
 
 /* timestamp then the repository was generated */
 KNOWNID(REPOSITORY_TIMESTAMP,          "repository:timestamp"),
@@ -207,6 +209,7 @@ KNOWNID(DELTA_SEQ_NAME,                     "delta:seqname"),
 KNOWNID(DELTA_SEQ_EVR,                 "delta:seqevr"),
 KNOWNID(DELTA_SEQ_NUM,                 "delta:seqnum"),
 
+/* XXX: shouldn't use a real ID */
 KNOWNID(NAMESPACE_PRODUCTBUDDY,         "namespace:productbuddy"),
 
 KNOWNID(REPOSITORY_REPOMD,             "repository:repomd"),
index 9a0325b..8393ba6 100644 (file)
@@ -72,6 +72,23 @@ myfopen(const char *fn)
   return  fopencookie(gzf, "r", cio);
 }
 
+/* content file query */
+static void
+doquery(Pool *pool, Repo *repo, const char *arg)
+{
+  char qbuf[256];
+  const char *str;
+  Id id;
+
+  snprintf(qbuf, sizeof(qbuf), "susetags:%s", arg);
+  id = str2id(pool, qbuf, 0);
+  if (!id)
+    return;
+  str = repo_lookup_str(repo, SOLVID_META, id);
+  if (str)
+    printf("%s\n", str);
+}
+
 int
 main(int argc, char **argv)
 {
@@ -79,11 +96,12 @@ main(int argc, char **argv)
   const char *attrname = 0;
   const char *descrdir = 0;
   const char *basefile = 0;
+  const char *query = 0;
   Id product = 0;
   int flags = 0;
   int c;
 
-  while ((c = getopt(argc, argv, "hkn:c:d:b:")) >= 0)
+  while ((c = getopt(argc, argv, "hkn:c:d:b:q:")) >= 0)
     {
       switch (c)
        {
@@ -105,6 +123,9 @@ main(int argc, char **argv)
        case 'b':
          basefile = optarg;
          break;
+       case 'q':
+         query = optarg;
+         break;
        default:
          usage(1);
          break;
@@ -259,7 +280,11 @@ main(int argc, char **argv)
     /* read data from stdin */
     repo_add_susetags(repo, stdin, product, 0, REPO_REUSE_REPODATA | REPO_NO_INTERNALIZE);
   repo_internalize(repo);
-  tool_write(repo, basefile, attrname);
+
+  if (query)
+    doquery(pool, repo, query);
+  else
+    tool_write(repo, basefile, attrname);
   pool_free(pool);
   exit(0);
 }