Debian System Wide Information Manager
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
5.0 KiB

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