Gentoo Archives: gentoo-commits

From: Fabian Groffen <grobian@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage-utils:master commit in: libq/
Date: Tue, 07 May 2019 06:19:56
Message-Id: 1557165706.64628c5c37601544f85785a3b8bb343f495200d8.grobian@gentoo
1 commit: 64628c5c37601544f85785a3b8bb343f495200d8
2 Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
3 AuthorDate: Mon May 6 18:01:46 2019 +0000
4 Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
5 CommitDate: Mon May 6 18:01:46 2019 +0000
6 URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=64628c5c
7
8 libq/vdb: add switch to vdb_get_atom to make it cheap/expensive
9
10 while at it, ensure repeated calls get the atom for "free"
11
12 Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>
13
14 libq/vdb.c | 28 +++++++++++++++++++---------
15 libq/vdb.h | 2 +-
16 2 files changed, 20 insertions(+), 10 deletions(-)
17
18 diff --git a/libq/vdb.c b/libq/vdb.c
19 index 5dc5e79..810a84c 100644
20 --- a/libq/vdb.c
21 +++ b/libq/vdb.c
22 @@ -414,17 +414,27 @@ next_entry:
23 }
24
25 depend_atom *
26 -vdb_get_atom(vdb_pkg_ctx *pkg_ctx)
27 +vdb_get_atom(vdb_pkg_ctx *pkg_ctx, bool complete)
28 {
29 - pkg_ctx->atom = atom_explode(pkg_ctx->name);
30 - if (pkg_ctx->atom == NULL)
31 - return NULL;
32 - pkg_ctx->atom->CATEGORY = (char *)pkg_ctx->cat_ctx->name;
33 + if (pkg_ctx->atom == NULL) {
34 + pkg_ctx->atom = atom_explode(pkg_ctx->name);
35 + if (pkg_ctx->atom == NULL)
36 + return NULL;
37 + pkg_ctx->atom->CATEGORY = (char *)pkg_ctx->cat_ctx->name;
38 + }
39
40 - vdb_pkg_eat(pkg_ctx, "SLOT", &pkg_ctx->slot, &pkg_ctx->slot_len);
41 - pkg_ctx->atom->SLOT = pkg_ctx->slot;
42 - vdb_pkg_eat(pkg_ctx, "repository", &pkg_ctx->repo, &pkg_ctx->repo_len);
43 - pkg_ctx->atom->REPO = pkg_ctx->repo;
44 + if (complete) {
45 + if (pkg_ctx->atom->SLOT == NULL) {
46 + vdb_pkg_eat(pkg_ctx, "SLOT",
47 + &pkg_ctx->slot, &pkg_ctx->slot_len);
48 + pkg_ctx->atom->SLOT = pkg_ctx->slot;
49 + }
50 + if (pkg_ctx->atom->REPO == NULL) {
51 + vdb_pkg_eat(pkg_ctx, "repository",
52 + &pkg_ctx->repo, &pkg_ctx->repo_len);
53 + pkg_ctx->atom->REPO = pkg_ctx->repo;
54 + }
55 + }
56
57 return pkg_ctx->atom;
58 }
59
60 diff --git a/libq/vdb.h b/libq/vdb.h
61 index 2954bef..28ca040 100644
62 --- a/libq/vdb.h
63 +++ b/libq/vdb.h
64 @@ -91,6 +91,6 @@ int vdb_foreach_pkg_sorted(const char *sroot, const char *svdb,
65 vdb_pkg_cb callback, void *priv);
66 struct dirent *vdb_get_next_dir(DIR *dir);
67 set *get_vdb_atoms(const char *sroot, const char *svdb, int fullcpv);
68 -depend_atom *vdb_get_atom(vdb_pkg_ctx *pkg_ctx);
69 +depend_atom *vdb_get_atom(vdb_pkg_ctx *pkg_ctx, bool complete);
70
71 #endif