6.5. The MacPorts Registry
This chapter provides an overview of the MacPorts registry and its
API. The registry is queried by MacPorts utilities for information about
installed ports related to dependencies, port images, and simple user
information about what is installed. It provides abstraction over a
modular receipt storage layer; where the default format is a SQLite
database.
The registry allows MacPorts utilities to:
Modify receipts to reflect changes made to installed ports being
maintained by MacPorts.
Query the global file and dependency databases for file
conflicts between a port being installed and a port already
installed.
Maintain dependency trees of installed ports.
The SQLite registry used by default is located at
${portdbpath}/registry
, which by default would
be ${prefix}/var/macports/registry
. All data is
stored in a single file named registry.db
, although
the additional directory portfiles
is used
temporarily for extracting stored Portfiles from the registry.
Furthermore, access to the registry may be locked using
.registry.lock
with the
registry::exclusive_lock
and
registry::exclusive_unlock
APIs.
The legacy flat file registry files are
contained in ${portdbpath}/receipts
, which by
default is location
${prefix}/var/macports/receipts
. File mappings and
dependency mappings are tracked in the flat file registry by
file_map.db
and dep_map.bz2
.
If found, these will be automatically converted to the new SQLite registry.
The MacPorts registry provides a public API in the registry1.0 Tcl
package. Using this API listed below you can access the MacPorts
Registry using the default receipt storage mechanism chosen in
macports.conf
.
registry::new_entry {name version {revision 0}
{variants ""}}
Begin the creation of a new registry entry for the given
port. Returns a reference ID to the registry entry created.
registry::open_entry {name {version 0}
{revision 0} {variants ""}}
Opens an existing registry entry. Returns a reference ID to
the registry entry that was opened.
registry::entry_exists {name version {revision
0} {variants ""}}
Checks to see if a port exists in the registry. Returns 1 if
the entry exists, 0 if not.
registry::write_entry
{ref}
Writes the receipt associated with the given
reference.
registry::delete_entry
{ref}
Deletes the receipt associated with the given
reference.
registry::property_store {ref property
value}
Store the given value with the property name in the receipt
associated with the given reference.
registry::property_retrieve {ref
property}
Retrieve the property name from the receipt associated with
the given reference. Returns the value of the property, if the
property exists.
registry::installed {{name ""} {version
""}}
Get all installed ports, optionally all installed ports
matching the given name, or the given name and version. Returns a
list of the installed ports.
registry::location {portname
portversion}
Returns the physical location the port is installed in on
the disk. This is primarily useful for finding out where a port
image is installed.
registry::open_file_map
{args}
Opens the file map that contains file-port
relationships.
registry::file_registered
{file}
Returns the name of the port that owns the given file, if
the file is registered as installed, and 0 otherwise.
registry::port_registered
{name}
Returns a list of all files associated with the given port
if that port is installed, and 0 otherwise.
registry::register_file {file
port}
Registers the given file in the file map as belonging to the
given port.
registry::unregister_file
{file}
Removes the file from the file map.
registry::write_file_map
{args}
Write the changes to the file map.
registry::open_dep_map
{args}
Opens the dependency map that contains port dependency
relationships.
registry::fileinfo_for_file
{fname}
Returns a list for the given file name representing all data
currently known about the file. This is a 6-tuple in the form
of:
file path
uid
gid
mode
size
md5 checksum
registry::fileinfo_for_index
{flist}
Returns a list of information concerning each file in the
given file list, if that file exists in the registry. The
information if obtained through registry::fileinfo_for_file
registry::list_depends
{name}
Returns a list of all the ports that given port name depends
on.
registry::list_dependents
{name}
Returns a list of all the ports that depend on the given
port name.
registry::register_dep {dep type
port}
Registers the given dependency as the given type of
dependency with the given port.
registry::unregister_dep {dep type
port}
Unregister the given dependency of the given type as a
dependency of the given port.
registry::write_dep_map
{args}
Write changes to the dependency map.