diff options
author | Colin Watson <cjwatson@debian.org> | 2022-10-02 15:10:50 +0100 |
---|---|---|
committer | Colin Watson <cjwatson@debian.org> | 2022-10-02 15:10:51 +0100 |
commit | 866c3571d34313c53193d5920de252f8c2c9af1e (patch) | |
tree | a086aa99853f0a109a7a72180ec0cf5c19635ceb /libdb | |
parent | d1a5cb5c4819580aa59cd5dd7ceefbdd8248c1be (diff) |
mandb: Fully reorganize databases
This allows us to produce bitwise-identical databases regardless of the
order in which pages were scanned (at least with GDBM).
`gdbm_reorganize` isn't enough for this, probably because entries end up
in different positions in hash buckets depending on insertion order; but
reading in the entire database and writing it back out in sorted order
seems to do the job with negligible cost.
Fixes Debian bug #1010957.
* src/mandb.c (reorganize): New function: read all the items from a
database in sorted order and write them back out.
(mandb): Stop calling `MYDBM_REORG`, which saved space after deletions
but didn't help with reproducibility.
(process_manpath): Call `reorganize` if any changes were made to a
database.
* libdb/mydbm.h (MYDBM_REORG): Remove macro.
* NEWS.md: Document this.
Diffstat (limited to 'libdb')
-rw-r--r-- | libdb/mydbm.h | 3 |
1 files changed, 0 insertions, 3 deletions
diff --git a/libdb/mydbm.h b/libdb/mydbm.h index 068ea674..370a91a4 100644 --- a/libdb/mydbm.h +++ b/libdb/mydbm.h @@ -88,7 +88,6 @@ void man_gdbm_free (man_gdbm_wrapper wrap); # define MYDBM_FIRSTKEY(db) man_gdbm_firstkey(db) # define MYDBM_NEXTKEY(db, key) man_gdbm_nextkey(db, key) # define MYDBM_GET_TIME(db) man_gdbm_get_time(db) -# define MYDBM_REORG(db) gdbm_reorganize((db)->file) # elif defined(NDBM) && !defined(GDBM) && !defined(BTREE) @@ -131,7 +130,6 @@ extern void man_ndbm_free (man_ndbm_wrapper wrap); # define MYDBM_FIRSTKEY(db) man_ndbm_firstkey(db) # define MYDBM_NEXTKEY(db, key) man_ndbm_nextkey(db, key) # define MYDBM_GET_TIME(db) man_ndbm_get_time(db) -# define MYDBM_REORG(db) do {} while (0) /* not implemented */ # elif defined(BTREE) && !defined(NDBM) && !defined(GDBM) @@ -180,7 +178,6 @@ extern struct timespec man_btree_get_time (man_btree_wrapper wrap); # define MYDBM_FIRSTKEY(db) man_btree_firstkey(db) # define MYDBM_NEXTKEY(db, key) man_btree_nextkey(db) # define MYDBM_GET_TIME(db) man_btree_get_time(db) -# define MYDBM_REORG(db) do {} while (0) /* not implemented */ # else /* not GDBM or NDBM or BTREE */ # error Define either GDBM, NDBM or BTREE before including mydbm.h |