teapot-trepo - TEApot Transparent Repository Structure
This document specifies the directory structure used by transparent repositories (i.e. installation repositories) to store entities.
Assuming that the main directory of the repository is "FOO/" the stored entities are first sorted by their entity type, then their architecture, and at last according to their storage format (Tcl Module, vs. Zip archive). This means that the base path for an entity X is:
"FOO/<entity-type>/<architecture>/<storage>/"
The first two, entity type and architecture, are pulled out of the meta data contained in the archive, whereas the last is determined by the file type and translated into the path segment per the list in the next paragraph
teapot
lib
In the following sections we will write "BASE/" as a shorthand for this directory.
Examples:
The Tcl application BAR, coming in a Tcl Module will be stored under the directory "FOO/application/tcl/teapot/".
The linux-glibc2.2-ix86 package Trf, coming in a Zip archive will be stored under the directory "FOO/package/linux-glibc2.2-ix86/lib/"
Note that while profiles could principally be stored in a transparent repository this is forbidden, and the teacup client prevents it from happening.
Now that the base directory for an entity is known the exact location inside of the base directory can be fully specified. This continues to be dependent on the entity type and storage format, with further dependencies on entity name, version, and its dependencies.
For all entities X coming in a zip archive a directory D is created under the base directory and the zip archive is expanded into this directory. The name of this directory D is of the form NAME-VERSION, using name and version of the entity, as per its TEAPOT meta data. Examples:
The exact location of the linux-glibc2.2-ix86 package Trf, version 2.1, coming in a Zip archive is the directory "BASE/Trf-2.1/".
The exact location of version 1 of the Tcl application BAR, coming in a Zip archive is the directory "BASE/BAR-1/".
For packages coming in as Tcl Modules the directory structure under the base directory is as specified by TIP 189, i.e.
"BASE/tcl8/8.1/" "BASE/tcl8/8.2/" "BASE/tcl8/8.3/" "BASE/tcl8/8.4/" "BASE/tcl8/8.4/" "BASE/tcl8/8.5/" ...
and with the file name the name and version of the package, also encoded as per TIP 189, and extension ".tm". The proper subdirectory depends on the minimal version of Tcl the package depends on, information which is pulled out of the package's meta data, i.e. the package's dependencies.
Example:
The tcl package doctools::toc, version 1.0, depending on Tcl 8.2, is stored in the file "BASE/tcl8/8.2/doctools/toc-1.0.tm".
For applications coming in as Tcl Modules the directory structure under the base directory is simplified, i.e. there are no subdirectories to sort the applications by the version of Tcl they depend on. The encoding of the application name and version into a file name is however also done by the rules of TIP 189.
Example:
The Tcl application BAR, version 2, coming in a Tcl Module is stored in the file "BASE/BAR-2.tm".
Pulling everything together the structure of a transparent repository is
FOO/ package/ARCHITECTURE/ Packages lib/NAME-VERSION/ Zip archive, expanded teapot/tcl8/8.y/PKG.tm Tcl Module, TIP 189 application/ARCHITECTURE/ Applications lib/NAME-VERSION/ Zip archive, expanded teapot/APP.tm Tcl Module, TIP 189
This document will undoubtedly contain bugs and other problems. Please report such at the ActiveState ActiveTcl Bug Tracker. The relevant component is teapot. Please also report any ideas for enhancements you may have for either application and/or documentation.
Copyright © 2007-2008 ActiveState Software Inc.