Skip to content

Latest commit

 

History

History
109 lines (70 loc) · 3.19 KB

Implementation.md

File metadata and controls

109 lines (70 loc) · 3.19 KB

Some details about CPM's Implementation

Information about CPM's local storage structure (i.e., on the client side) can be found in the manual.

Here is some information about CPM's global storage structure.

Global package index

CPM requires a global index containing the specifications of all available packages. The default URL is defined in CPM.Config.packageIndexDefaultURL, currently as

https://git.ps.informatik.uni-kiel.de/curry-packages/cpm-index.git

This configuration can be changed by the .cpmrc value

PACKAGE_INDEX_URL

Currently, it is a git repository but it could also be a tar file or a gzipped tar file.

The directory referenced by this URL must contains for each package pkg and version vers a file

pkg/vers/package.json

containing the package specification in JSON format. For instance, it contains the files

cpm/2.0.0/package.json
cpm/2.1.0/package.json
cpm/2.1.1/package.json

The global package index is downloaded by the CPM command

cypm update

This command also create a local sqlite3 database containing the most important information about each package. The database is used by various CPM commands to accelerate the access to information about packages.

Global package store

CPM uses a global store containing a gzipped tar file for each package. The default URL is defined in CPM.Config.packageTarFilesDefaultURL, currently as

https://www-ps.informatik.uni-kiel.de/~cpm/PACKAGES/

This configuration can be changed by the .cpmrc value

PACKAGE_TARFILES_URL

Currently, it is a git repository but it could also be a tar file or a gzipped tar file.

In order to download the package pkg in version vers, CPM extends this URL by the string pkg-vers.tar.gz. For instance, CPM downloads version 2.1.0 of the package cpm from

https://www-ps.informatik.uni-kiel.de/~cpm/PACKAGES/cpm-2.1.0.tar.gz

If CPM cannot download anything from this location, it tries to download the package from the source field of the package description.

Global package index cache

In order to accelerate the creation of the sqlite3 database during the update command, CPM tries to download the file

https://www-ps.informatik.uni-kiel.de/~cpm/PACKAGES/REPOSITORY_CACHE.csv

which contains the database information in CSV format. If CPM cannot download this file, it creates the database by reading all package specifications of the global package index (which takes more time than reading the CSV file).

Uploading packages

Currently, new package or package version can be uploaded to these global stores by the command

cypm upload

(see the manual for more details). Currently, only packages having a source specification of the form

"source": {
  "git": "...git.ps.informatik.uni-kiel.de/curry-packages/....git",
  "tag": "$version"

can be uploaded. Furthermore, one has to have write access to the source repository. This command tests the package and, in case of a successful test, uploads the package to the global package index and store via the web script at URL

https://www-ps.informatik.uni-kiel.de/~cpm/cpm-upload.cgi