void addfileprovides() {
pool_addfileprovides($self);
}
- Queue addfileprovides_ids() {
+ Queue addfileprovides_queue() {
Queue r;
- Id *addedfileprovides = 0;
queue_init(&r);
- pool_addfileprovides_ids($self, $self->installed, &addedfileprovides);
- if (addedfileprovides) {
- for (; *addedfileprovides; addedfileprovides++)
- queue_push(&r, *addedfileprovides);
- }
+ pool_addfileprovides_queue($self, &r);
return r;
}
void createwhatprovides() {
exit(0);
}
-my @addedprovides = $pool->addfileprovides_ids();
+my @addedprovides = $pool->addfileprovides_queue();
$pool->createwhatprovides();
my @jobs;
if cmdlinerepo:
cmdlinerepo.handle.internalize()
-addedprovides = pool.addfileprovides_ids()
+addedprovides = pool.addfileprovides_queue()
if addedprovides:
sysrepo.updateaddedprovides(addedprovides)
for repo in repos:
exit
end
-addedprovides = pool.addfileprovides_ids()
+addedprovides = pool.addfileprovides_queue()
if !addedprovides.empty?
sysrepo.updateaddedprovides(addedprovides)
for repo in repos
void
-rewrite_repos(Pool *pool, Id *addedfileprovides)
+rewrite_repos(Pool *pool, Queue *addedfileprovides)
{
Repo *repo;
Repodata *data;
Map providedids;
Queue fileprovidesq;
- Id id;
- int i, j, n, nprovidedids;
+ int i, j, n;
struct repoinfo *cinfo;
map_init(&providedids, pool->ss.nstrings);
queue_init(&fileprovidesq);
- for (nprovidedids = 0; (id = addedfileprovides[nprovidedids]) != 0; nprovidedids++)
- MAPSET(&providedids, id);
+ for (i = 0; i < addedfileprovides->count; i++)
+ MAPSET(&providedids, addedfileprovides->elements[i]);
FOR_REPOS(i, repo)
{
/* make sure this repo has just one main repodata */
for (j = 0; j < fileprovidesq.count; j++)
if (MAPTST(&providedids, fileprovidesq.elements[j]))
n++;
- if (n == nprovidedids)
+ if (n == addedfileprovides->count)
continue; /* nothing new added */
}
- /* oh my! */
- for (j = 0; addedfileprovides[j]; j++)
- repodata_add_idarray(data, SOLVID_META, REPOSITORY_ADDEDFILEPROVIDES, addedfileprovides[j]);
+ repodata_set_idarray(data, SOLVID_META, REPOSITORY_ADDEDFILEPROVIDES, addedfileprovides);
repodata_internalize(data);
writecachedrepo(repo, data, 0, cinfo ? cinfo->cookie : installedcookie);
}
char inbuf[128], *ip;
int allpkgs = 0;
FILE **newpkgsfps;
- Id *addedfileprovides = 0;
+ Queue addedfileprovides;
Id repofilter = 0;
int cleandeps = 0;
// FOR_REPOS(i, repo)
// printf("%s: %d solvables\n", repo->name, repo->nsolvables);
- addedfileprovides = 0;
- pool_addfileprovides_ids(pool, pool->installed, &addedfileprovides);
- if (addedfileprovides && *addedfileprovides)
- rewrite_repos(pool, addedfileprovides);
- solv_free(addedfileprovides);
+ queue_init(&addedfileprovides);
+ pool_addfileprovides_queue(pool, &addedfileprovides);
+ if (addedfileprovides.count)
+ rewrite_repos(pool, &addedfileprovides);
+ queue_free(&addedfileprovides);
pool_createwhatprovides(pool);
queue_init(&job);
policy_is_illegal;
pool_add_fileconflicts_deps;
pool_addfileprovides;
- pool_addfileprovides_ids;
+ pool_addfileprovides_queue;
pool_addrelproviders;
pool_alloctmpspace;
pool_arch2color_slow;
}
void
-pool_addfileprovides_ids(Pool *pool, Repo *installed, Id **idp)
+pool_addfileprovides_queue(Pool *pool, Queue *idq)
{
Solvable *s;
- Repo *repo;
+ Repo *installed, *repo;
struct searchfiles sf, isf, *isfp;
struct addfileprovides_cbdata cbd;
int i;
unsigned int now;
+ installed = pool->installed;
now = solv_timems(0);
memset(&sf, 0, sizeof(sf));
map_init(&sf.seen, pool->ss.nstrings + pool->nrels);
memset(&isf, 0, sizeof(isf));
map_init(&isf.seen, pool->ss.nstrings + pool->nrels);
+ if (idq)
+ queue_empty(idq);
isfp = installed ? &isf : 0;
for (i = 1, s = pool->solvables + i; i < pool->nsolvables; i++, s++)
{
map_free(&isf.seen);
POOL_DEBUG(SOLV_DEBUG_STATS, "found %d file dependencies, %d installed file dependencies\n", sf.nfiles, isf.nfiles);
cbd.dids = 0;
- if (idp)
- *idp = 0;
if (sf.nfiles)
{
#if 0
POOL_DEBUG(SOLV_DEBUG_STATS, "looking up %s in filelist\n", pool_id2str(pool, sf.ids[i]));
#endif
pool_addfileprovides_search(pool, &cbd, &sf, 0);
- if (idp)
- {
- sf.ids = solv_extend(sf.ids, sf.nfiles, 1, sizeof(Id), SEARCHFILES_BLOCK);
- sf.ids[sf.nfiles] = 0;
- *idp = sf.ids;
- sf.ids = 0;
- }
+ if (idq)
+ for (i = 0; i < sf.nfiles; i++)
+ queue_push(idq, sf.ids[i]);
solv_free(sf.ids);
for (i = 0; i < sf.nfiles; i++)
{
void
pool_addfileprovides(Pool *pool)
{
- pool_addfileprovides_ids(pool, pool->installed, 0);
+ pool_addfileprovides_queue(pool, 0);
}
void
*/
extern void pool_createwhatprovides(Pool *pool);
extern void pool_addfileprovides(Pool *pool);
-extern void pool_addfileprovides_ids(Pool *pool, struct _Repo *installed, Id **idp);
+extern void pool_addfileprovides_queue(Pool *pool, Queue *idq);
extern void pool_freewhatprovides(Pool *pool);
extern Id pool_queuetowhatprovides(Pool *pool, Queue *q);
char **languages = 0;
int nlanguages = 0;
int i, j, k, l;
- Id *addedfileprovides = 0;
struct keyfilter_data kd;
+ Queue addedfileprovides;
memset(&kd, 0, sizeof(kd));
info = repo_add_repodata(repo, 0);
repodata_set_str(info, SOLVID_META, REPOSITORY_TOOLVERSION, LIBSOLV_TOOLVERSION);
- pool_addfileprovides_ids(repo->pool, 0, &addedfileprovides);
- if (addedfileprovides && *addedfileprovides)
+ queue_init(&addedfileprovides);
+ pool_addfileprovides_queue(repo->pool, &addedfileprovides);
+ if (addedfileprovides.count)
{
kd.haveaddedfileprovides = 1;
- for (i = 0; addedfileprovides[i]; i++)
- repodata_add_idarray(info, SOLVID_META, REPOSITORY_ADDEDFILEPROVIDES, addedfileprovides[i]);
+ repodata_set_idarray(info, SOLVID_META, REPOSITORY_ADDEDFILEPROVIDES, &addedfileprovides);
}
- solv_free(addedfileprovides);
+ queue_free(&addedfileprovides);
pool_freeidhashes(repo->pool); /* free some mem */