- add repodata_dir2str function
authorMichael Schroeder <mls@suse.de>
Fri, 14 Mar 2008 10:04:18 +0000 (10:04 +0000)
committerMichael Schroeder <mls@suse.de>
Fri, 14 Mar 2008 10:04:18 +0000 (10:04 +0000)
src/poolid.c
src/repodata.c
src/repodata.h
tools/dumpsolv.c

index 35b521d..abd859f 100644 (file)
@@ -233,7 +233,7 @@ dep2str(Pool *pool, Id id)
   dep2strcpy(pool, p, id);
   return p;
 }
-  
+
 void
 pool_shrink_strings(Pool *pool)
 {
index 53571c7..fe64c30 100644 (file)
@@ -1487,6 +1487,52 @@ repodata_str2dir(Repodata *data, const char *dir, int create)
   return parent;
 }
 
+const char *
+repodata_dir2str(Repodata *data, Id did, const char *suf)
+{
+  Pool *pool = data->repo->pool;
+  int l = 0;
+  Id parent, comp;
+  const char *comps;
+  char *p;
+
+  if (!did)
+    return suf ? suf : "";
+  parent = did;
+  while (parent)
+    {
+      comp = dirpool_compid(&data->dirpool, parent);
+      comps = stringpool_id2str(data->localpool ? &data->spool : &pool->ss, comp);
+      l += strlen(comps);
+      parent = dirpool_parent(&data->dirpool, parent);
+      if (parent)
+       l++;
+    }
+  if (suf)
+    l += strlen(suf) + 1;
+  p = pool_alloctmpspace(pool, l + 1) + l;
+  *p = 0;
+  if (suf)
+    {
+      p -= strlen(suf);
+      strcpy(p, suf);
+      *--p = '/';
+    }
+  parent = did;
+  while (parent)
+    {
+      comp = dirpool_compid(&data->dirpool, parent);
+      comps = stringpool_id2str(data->localpool ? &data->spool : &pool->ss, comp);
+      l = strlen(comps);
+      p -= l;
+      strncpy(p, comps, l);
+      parent = dirpool_parent(&data->dirpool, parent);
+      if (parent)
+        *--p = '/';
+    }
+  return p;
+}
+
 unsigned int
 repodata_compress_page(unsigned char *page, unsigned int len, unsigned char *cpage, unsigned int max)
 {
index a1c8bc9..49d8e0c 100644 (file)
@@ -140,6 +140,7 @@ void repodata_internalize(Repodata *data);
 void repodata_disable_paging(Repodata *data);
 
 Id repodata_str2dir(Repodata *data, const char *dir, int create);
+const char *repodata_dir2str(Repodata *data, Id did, const char *suf);
 
 unsigned int repodata_compress_page(unsigned char *, unsigned int, unsigned char *, unsigned int);
 void repodata_read_or_setup_pages(Repodata *data, unsigned int pagesz, unsigned int blobsz);
index c3d5c68..480d300 100644 (file)
@@ -104,14 +104,10 @@ dump_repoattrs_cb(void *vcbdata, Solvable *s, Repodata *data, Repokey *key, KeyV
       printf("%s: %d\n", keyname, kv->num);
       break;
     case REPOKEY_TYPE_DIRNUMNUMARRAY:
-      printf("%s: ", keyname);
-      printdir(data, kv->id);
-      printf(" %d %d\n", kv->num, kv->num2);
+      printf("%s: %s %d %d\n", keyname, repodata_dir2str(data, kv->id, 0), kv->num, kv->num2);
       break;
     case REPOKEY_TYPE_DIRSTRARRAY:
-      printf("%s: ", keyname);
-      printdir(data, kv->id);
-      printf("/%s\n", kv->str);
+      printf("%s: %s\n", keyname, repodata_dir2str(data, kv->id, kv->str));
       break;
     default:
       printf("%s: ?\n", keyname);