Skip to content

Commit e00c3cf

Browse files
committed
Implement the REPOWRITER_KEEP_TYPE_DELETED flag
1 parent 63491bc commit e00c3cf

4 files changed

Lines changed: 16 additions & 10 deletions

File tree

src/dataiterator.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ typedef struct _KeyValue {
5252
#define SEARCH_SUB (1<<9)
5353
#define SEARCH_ARRAYSENTINEL (1<<10)
5454
#define SEARCH_DISABLED_REPOS (1<<11)
55-
#define SEARCH_COMPLETE_FILELIST (1<<12) /* ignored, this is the default */
55+
#define SEARCH_KEEP_TYPE_DELETED (1<<12) /* only has effect if no keyname is given */
5656

5757
/* stringification flags */
5858
#define SEARCH_SKIP_KIND (1<<16)
@@ -65,6 +65,9 @@ typedef struct _KeyValue {
6565
/* dataiterator internal */
6666
#define SEARCH_THISSOLVID (1<<31)
6767

68+
/* obsolete */
69+
#define SEARCH_COMPLETE_FILELIST 0 /* ignored, this is the default */
70+
6871
/*
6972
* Datamatcher: match a string against a query
7073
*/

src/repo.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1048,7 +1048,6 @@ repo_create_keyskip(Repo *repo, Id entry, Id **oldkeyskip)
10481048
last = data;
10491049
cnt++;
10501050
}
1051-
printf("repo_create_keyskip: cnt %d\n", cnt);
10521051
if (cnt <= 1)
10531052
{
10541053
if (oldkeyskip)

src/repo_write.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,6 +1176,7 @@ repowriter_write(Repowriter *writer, FILE *fp)
11761176
unsigned int solv_flags;
11771177
Id *oldkeyskip = 0;
11781178
Id *keyskip = 0;
1179+
int searchflags = 0;
11791180

11801181
Id id, *sp;
11811182

@@ -1496,6 +1497,10 @@ for (i = 1; i < target.nkeys; i++)
14961497

14971498
/********************************************************************/
14981499

1500+
searchflags = SEARCH_SUB|SEARCH_ARRAYSENTINEL;
1501+
if ((writer->flags & REPOWRITER_KEEP_TYPE_DELETED) != 0)
1502+
searchflags |= SEARCH_KEEP_TYPE_DELETED;
1503+
14991504
/* set needed count of all strings and rels,
15001505
* find which keys are used in the solvables
15011506
* put all strings in own spool
@@ -1523,7 +1528,7 @@ for (i = 1; i < target.nkeys; i++)
15231528
continue;
15241529
cbdata.keymap = keymap + keymapstart[j];
15251530
cbdata.lastdirid = 0; /* clear dir mapping cache */
1526-
repodata_search_keyskip(data, SOLVID_META, 0, SEARCH_SUB|SEARCH_ARRAYSENTINEL, keyskip, collect_needed_cb, &cbdata);
1531+
repodata_search_keyskip(data, SOLVID_META, 0, searchflags, keyskip, collect_needed_cb, &cbdata);
15271532
}
15281533
needid = cbdata.needid; /* maybe relocated */
15291534
sp = cbdata.sp;
@@ -1560,7 +1565,7 @@ for (i = 1; i < target.nkeys; i++)
15601565
continue;
15611566
cbdata.keymap = keymap + keymapstart[j];
15621567
cbdata.lastdirid = 0;
1563-
repodata_search_keyskip(data, i, 0, SEARCH_SUB|SEARCH_ARRAYSENTINEL, keyskip, collect_needed_cb, &cbdata);
1568+
repodata_search_keyskip(data, i, 0, searchflags, keyskip, collect_needed_cb, &cbdata);
15641569
}
15651570
needid = cbdata.needid; /* maybe relocated */
15661571
}
@@ -1795,7 +1800,7 @@ fprintf(stderr, "dir %d used %d\n", i, cbdata.dirused ? cbdata.dirused[i] : 1);
17951800
continue;
17961801
cbdata.keymap = keymap + keymapstart[j];
17971802
cbdata.lastdirid = 0;
1798-
repodata_search_keyskip(data, SOLVID_META, 0, SEARCH_SUB|SEARCH_ARRAYSENTINEL, keyskip, collect_data_cb, &cbdata);
1803+
repodata_search_keyskip(data, SOLVID_META, 0, searchflags, keyskip, collect_data_cb, &cbdata);
17991804
}
18001805

18011806
if (xd->len - cbdata.lastlen > cbdata.maxdata)
@@ -1835,7 +1840,7 @@ fprintf(stderr, "dir %d used %d\n", i, cbdata.dirused ? cbdata.dirused[i] : 1);
18351840
continue;
18361841
cbdata.keymap = keymap + keymapstart[j];
18371842
cbdata.lastdirid = 0;
1838-
repodata_search_keyskip(data, i, 0, SEARCH_SUB|SEARCH_ARRAYSENTINEL, keyskip, collect_data_cb, &cbdata);
1843+
repodata_search_keyskip(data, i, 0, searchflags, keyskip, collect_data_cb, &cbdata);
18391844
}
18401845
}
18411846
if (xd->len - cbdata.lastlen > cbdata.maxdata)
@@ -2009,7 +2014,7 @@ fprintf(stderr, "dir %d used %d\n", i, cbdata.dirused ? cbdata.dirused[i] : 1);
20092014
continue;
20102015
cbdata.keymap = keymap + keymapstart[j];
20112016
cbdata.lastdirid = 0;
2012-
repodata_search_keyskip(data, i, 0, SEARCH_SUB|SEARCH_ARRAYSENTINEL, keyskip, collect_data_cb, &cbdata);
2017+
repodata_search_keyskip(data, i, 0, searchflags, keyskip, collect_data_cb, &cbdata);
20132018
}
20142019
if (xd->len > 1024 * 1024)
20152020
{

src/repodata.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1188,7 +1188,7 @@ repodata_search_keyskip(Repodata *data, Id solvid, Id keyname, int flags, Id *ke
11881188
return;
11891189
continue;
11901190
}
1191-
if (key->type == REPOKEY_TYPE_DELETED)
1191+
if (key->type == REPOKEY_TYPE_DELETED && !(flags & SEARCH_KEEP_TYPE_DELETED))
11921192
{
11931193
if (onekey)
11941194
return;
@@ -1712,7 +1712,7 @@ dataiterator_step(Dataiterator *di)
17121712
goto di_nextkey;
17131713
if (di->keyskip && (di->key->name >= di->keyskip[0] || di->keyskip[3 + di->key->name] != di->keyskip[1] + di->data->repodataid))
17141714
goto di_nextkey;
1715-
if (di->key->type == REPOKEY_TYPE_DELETED)
1715+
if (di->key->type == REPOKEY_TYPE_DELETED && !(di->flags & SEARCH_KEEP_TYPE_DELETED))
17161716
goto di_nextkey;
17171717
if (di->key->type == REPOKEY_TYPE_FIXARRAY || di->key->type == REPOKEY_TYPE_FLEXARRAY)
17181718
goto di_enterarray;
@@ -2954,7 +2954,6 @@ repodata_unset_uninternalized(Repodata *data, Id solvid, Id keyname)
29542954
*pp = 0;
29552955
}
29562956

2957-
/* XXX: does not work correctly, needs fix in iterators! */
29582957
void
29592958
repodata_unset(Repodata *data, Id solvid, Id keyname)
29602959
{

0 commit comments

Comments
 (0)