#define SEARCH_SUB (1<<9)
#define SEARCH_ARRAYSENTINEL (1<<10)
#define SEARCH_DISABLED_REPOS (1<<11)
-#define SEARCH_COMPLETE_FILELIST (1<<12) /* ignored, this is the default */
+#define SEARCH_KEEP_TYPE_DELETED (1<<12) /* only has effect if no keyname is given */
/* stringification flags */
#define SEARCH_SKIP_KIND (1<<16)
/* dataiterator internal */
#define SEARCH_THISSOLVID (1<<31)
+/* obsolete */
+#define SEARCH_COMPLETE_FILELIST 0 /* ignored, this is the default */
+
/*
* Datamatcher: match a string against a query
*/
unsigned int solv_flags;
Id *oldkeyskip = 0;
Id *keyskip = 0;
+ int searchflags = 0;
Id id, *sp;
/********************************************************************/
+ searchflags = SEARCH_SUB|SEARCH_ARRAYSENTINEL;
+ if ((writer->flags & REPOWRITER_KEEP_TYPE_DELETED) != 0)
+ searchflags |= SEARCH_KEEP_TYPE_DELETED;
+
/* set needed count of all strings and rels,
* find which keys are used in the solvables
* put all strings in own spool
continue;
cbdata.keymap = keymap + keymapstart[j];
cbdata.lastdirid = 0; /* clear dir mapping cache */
- repodata_search_keyskip(data, SOLVID_META, 0, SEARCH_SUB|SEARCH_ARRAYSENTINEL, keyskip, collect_needed_cb, &cbdata);
+ repodata_search_keyskip(data, SOLVID_META, 0, searchflags, keyskip, collect_needed_cb, &cbdata);
}
needid = cbdata.needid; /* maybe relocated */
sp = cbdata.sp;
continue;
cbdata.keymap = keymap + keymapstart[j];
cbdata.lastdirid = 0;
- repodata_search_keyskip(data, i, 0, SEARCH_SUB|SEARCH_ARRAYSENTINEL, keyskip, collect_needed_cb, &cbdata);
+ repodata_search_keyskip(data, i, 0, searchflags, keyskip, collect_needed_cb, &cbdata);
}
needid = cbdata.needid; /* maybe relocated */
}
continue;
cbdata.keymap = keymap + keymapstart[j];
cbdata.lastdirid = 0;
- repodata_search_keyskip(data, SOLVID_META, 0, SEARCH_SUB|SEARCH_ARRAYSENTINEL, keyskip, collect_data_cb, &cbdata);
+ repodata_search_keyskip(data, SOLVID_META, 0, searchflags, keyskip, collect_data_cb, &cbdata);
}
if (xd->len - cbdata.lastlen > cbdata.maxdata)
continue;
cbdata.keymap = keymap + keymapstart[j];
cbdata.lastdirid = 0;
- repodata_search_keyskip(data, i, 0, SEARCH_SUB|SEARCH_ARRAYSENTINEL, keyskip, collect_data_cb, &cbdata);
+ repodata_search_keyskip(data, i, 0, searchflags, keyskip, collect_data_cb, &cbdata);
}
}
if (xd->len - cbdata.lastlen > cbdata.maxdata)
continue;
cbdata.keymap = keymap + keymapstart[j];
cbdata.lastdirid = 0;
- repodata_search_keyskip(data, i, 0, SEARCH_SUB|SEARCH_ARRAYSENTINEL, keyskip, collect_data_cb, &cbdata);
+ repodata_search_keyskip(data, i, 0, searchflags, keyskip, collect_data_cb, &cbdata);
}
if (xd->len > 1024 * 1024)
{
return;
continue;
}
- if (key->type == REPOKEY_TYPE_DELETED)
+ if (key->type == REPOKEY_TYPE_DELETED && !(flags & SEARCH_KEEP_TYPE_DELETED))
{
if (onekey)
return;
goto di_nextkey;
if (di->keyskip && (di->key->name >= di->keyskip[0] || di->keyskip[3 + di->key->name] != di->keyskip[1] + di->data->repodataid))
goto di_nextkey;
- if (di->key->type == REPOKEY_TYPE_DELETED)
+ if (di->key->type == REPOKEY_TYPE_DELETED && !(di->flags & SEARCH_KEEP_TYPE_DELETED))
goto di_nextkey;
if (di->key->type == REPOKEY_TYPE_FIXARRAY || di->key->type == REPOKEY_TYPE_FLEXARRAY)
goto di_enterarray;
*pp = 0;
}
-/* XXX: does not work correctly, needs fix in iterators! */
void
repodata_unset(Repodata *data, Id solvid, Id keyname)
{