Database Structure note: what's below was written for readability, not to indicate complex structures, all databases are normal hashes. stripped implies that the control field was removed, but the data afterwards kept. Structure of statusindex.deb 1). Initially made in SWIM::DB_Init::database 2). Updated in SWIM::DB::db 3). $sb(packagename) = qw(packagename_version group priority status(separated with :)); All fields stripped Structure of nstatusindex-arch-dists.deb 1). Initally made in SWIM::NDB_Init::not_installed 2). Updated in SWIM::NDB::update_packages_ndb 3). $nsb(packagename) = qw(packagename_version group priority); $nsb{"/."} = qw(packagename_version ...); All fields stripped Structure of packages.deb 1). Initally made in SWIM::DB_Init::database 2). Updated in SWIM::DB::db 3). %db = [ @name => (packagename packagename_version ...), @Tdescriptions => (packagename_version format_info ...), @conf => (packagename_versionCONF every_indented_line_after_Conffiles ...), @REPLACE => (packagename_version(with PRE, DEP, REC, SUG, CON, PRO, or REP appended) package_relationship_field (unstripped) ...) ] Structure of npackages-arch-dists.deb 1). Initially made in SWIM::NDB_Init::not_installed 2). Updated in SWIM::NDB::update_packages_ndb 3). %ndb = [ @name => (packagename packagename_version ...), @Tdescriptions => (packagename_version format_info ...), @conf => (empty), @REPLACE => (packagename_version(with PRE, DEP, REC, SUG, CON, PRO, REP, MD, and FN appended) package_relationship_field (unstripped) ...), @FILENAME => (packagename_versionFN Filename_field(stripped) ...), @MD5SUM => (packagename_versionMD package_MD5_checksum(stripped) ...), @revision => (packagename_versionMD(this comes from the Filename field) "packagename_versionMD REVISION" (this time the version comes from the Version field) ...) ] The revision field is unusual and occurs in the experimental distribution. The hash is used by -p so that the version can be figured out. (check "revision: situation" in SWIM::Deb). Structure of groupindex.deb 1). Initally made in SWIM::DB_Init::database 2). Updated in SWIM::DB::db 3). $gb(group) = qw(packagenames ......) group stripped from Section: Structure of ngroupindex-arch-dists.deb 1). Initially made in SWIM::NDB_Init::not_installed 2). Updated in SWIM::NDB::update_packages_ndb 3). $ngb = qw(packagenames ......) group stripped from Section: Structure of searchindex.deb and dirindex.deb 1). When SWIM::DB_Init::database finishes SWIM::DB_Init::md begins. This writes @dpackage to transfer.deb, which is processed by either fastswim (filedir -> big and long) or imswim (which is like longswim, which produces one large file - filedir.deb), and slowswim (big and long) into the two files big.debian and long.debian and then the databases are finished by SWIM::MD::process_md(). 2). Rebuilt by SWIM::DB::rebuildflatdb 3). searchindex.deb = /path/filename\n ...... (1 package) dirindex.deb = /path/dir\n ...... (> 1 package) Structure of nsearchindex-arch-dists.deb and ndirindex-arch-dists.deb 1). After SWIM::NDB_Init::initndb runs SWIM::NDB_Init::not_installed, SWIM::NDB_Init::nmd runs longswim which produces filedir.deb, then initndb runs slowswim producing big.debian and long.debian. Then the database(s) are finished by SWIM::MD::prcess_md. 2). 3). nsearchindex-arch-dists.deb = /path/filename\n ...... (1 package) ndirindex-arch-dists.deb = /path/dir\n ...... (> 1 package) Note: nsearch* includes elements which pertain to only one package, this generally implies files, not directories, however the ni often has more than one package sharing a file, so its placed into ndir* (this would be rare with an i system). SWIM::Search::search processes these two files differently, which is more effecient for the much larger nsearch*, for this reason you can't merge the two databases together. Structure of ncontentsindex-arch-dists.deb. 1). A compressed Contents database, no alterations (originally the headers were removed, but this is a waste of time.) If the FDB (flat database option if given) SWIM::Library::compress_contents is called from initndb(), otherwise longswim called from SWIM::NDB_Init::nmd copies and compresses. The longswim method compresses, but compress_contents does a cp (not -a). In both cases the header removal has been depreciated. The important thing is that the utime remains the same. 2). The new Contents database is copied (utime) and renamed via compress_contents called from SWIM::NDB. 3). Contents format