Exemple #1
0
int
solvable_lookup_deparray(Solvable *s, Id keyname, Queue *q, Id marker)
{
  if (!s->repo)
    {
      queue_empty(q);
      return 0;
    }
  return repo_lookup_deparray(s->repo, s - s->repo->pool->solvables, keyname, q, marker);
}
Exemple #2
0
void
repo_set_deparray(Repo *repo, Id p, Id keyname, Queue *q, Id marker)
{
  Repodata *data;
  if (marker)
    {
      /* complex case, splice old and new arrays */
      int i;
      Queue q2;
      queue_init(&q2);
      repo_lookup_deparray(repo, p, keyname, &q2, -marker);
      if (marker > 0)
	{
	  if (q->count)
	    {
	      queue_push(&q2, marker);
	      for (i = 0; i < q->count; i++)
		queue_push(&q2, q->elements[i]);
	    }
	}
      else
	{
	  if (q2.count)
	    queue_insert(&q2, 0, -marker);
	  queue_insertn(&q2, 0, q->count);
	  for (i = 0; i < q->count; i++)
	   q2.elements[i] = q->elements[i];
	}
      repo_set_deparray(repo, p, keyname, &q2, 0);
      queue_free(&q2);
      return;
    }
  if (p >= 0)
    {
      Solvable *s = repo->pool->solvables + p;
      switch (keyname)
	{
	case SOLVABLE_PROVIDES:
	  s->provides = repo_set_idarray_solvable(repo, q);
	  return;
	case SOLVABLE_OBSOLETES:
	  s->obsoletes = repo_set_idarray_solvable(repo, q);
	  return;
	case SOLVABLE_CONFLICTS:
	  s->conflicts = repo_set_idarray_solvable(repo, q);
	  return;
	case SOLVABLE_REQUIRES:
	  s->requires = repo_set_idarray_solvable(repo, q);
	  return;
	case SOLVABLE_RECOMMENDS:
	  s->recommends = repo_set_idarray_solvable(repo, q);
	  return;
	case SOLVABLE_SUGGESTS:
	  s->suggests = repo_set_idarray_solvable(repo, q);
	  return;
	case SOLVABLE_SUPPLEMENTS:
	  s->supplements = repo_set_idarray_solvable(repo, q);
	  return;
	case SOLVABLE_ENHANCES:
	  s->enhances = repo_set_idarray_solvable(repo, q);
	  return;
	}
    }
  data = repo_last_repodata(repo);
  repodata_set_idarray(data, p, keyname, q);
}