- cleanup repo handlin API
[platform/upstream/libsolv.git] / tools / dumpsolv.c
1 /*
2  * Copyright (c) 2007, Novell Inc.
3  *
4  * This program is licensed under the BSD license, read LICENSE.BSD
5  * for further information
6  */
7
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <unistd.h>
11 #include <string.h>
12
13 #include "pool.h"
14 #include "repo_solv.h"
15
16 static void
17 printids(Repo *repo, char *kind, Offset ido)
18 {
19   Pool *pool = repo->pool;
20   Id id, *ids;
21   if (!ido)
22     return;
23   printf("%s:\n", kind);
24   ids = repo->idarraydata + ido;
25   while((id = *ids++) != 0)
26     printf("  %s\n", dep2str(pool, id));
27 }
28
29 int main(int argc, char **argv)
30 {
31   Repo *repo;
32   Pool *pool;
33   int i;
34   Solvable *s;
35
36   if (argc != 1)
37     {
38       if (freopen(argv[1], "r", stdin) == 0)
39         {
40           perror(argv[1]);
41           exit(1);
42         }
43     }
44   pool = pool_create();
45   repo = repo_create(pool, argc != 1 ? argv[1] : "<stdin>");
46   repo_add_solv(repo, stdin);
47   printf("repo contains %d solvables\n", repo->nsolvables);
48   for (i = repo->start; i < repo->start + repo->nsolvables; i++)
49     {
50       s = pool->solvables + i;
51       printf("\n");
52       printf("solvable %d:\n", i);
53       printf("name: %s %s %s\n", id2str(pool, s->name), id2str(pool, s->evr), id2str(pool, s->arch));
54       if (s->vendor)
55         printf("vendor: %s\n", id2str(pool, s->vendor));
56       printids(repo, "provides", s->provides);
57       printids(repo, "obsoletes", s->obsoletes);
58       printids(repo, "conflicts", s->conflicts);
59       printids(repo, "requires", s->requires);
60       printids(repo, "recommends", s->recommends);
61       printids(repo, "suggests", s->suggests);
62       printids(repo, "supplements", s->supplements);
63       printids(repo, "enhances", s->enhances);
64       printids(repo, "freshens", s->freshens);
65     }
66   exit(0);
67 }