swhid is an OCaml executable and library to work with persistent identifiers found in Software Heritage, also known as swhid. It provides:
- a parser and a printer for swhid (
Swhid_core.Objectmodule) - functions to compute a swhid for a given object of any kind : content, directory, revision, release or snapshot (
Swhid.Compute) - functions to query the swh API in order to get an URL from which you can download a given object (
Swhid.Download)
swhid can be installed with opam:
opam install swhidIf you don't have opam, you can install it following the how to install opam guide.
If you can't or don't want to use opam, consult the opam file for build instructions.
$ swhid-compute content-string "let rec f x = f x\n"
swh:1:cnt:032873006d15555befc1b39017a342580b01f1be
$ swhid compute content-file LICENSE.md
swh:1:cnt:6ea040672f7995fb6d850519df1b1a5408b243a0
$ swhid compute directory src
swh:1:dir:3e89af4dd5b7110d511867be65d25dd51c198ad4
$ swhid download swh:1:dir:3eb35765545dcca55cb5a7f30ab31d794cc36c95
https://archive.softwareheritage.org/api/1/vault/flat/swh:1:dir:3eb35765545dcca55cb5a7f30ab31d794cc36c95/raw/
let id = "swh:1:rev:db21f0afdb54c16b265754ca599869fda0ca4bfc"
let url =
match Swhid_core.Object.of_string id with
| Error e -> Error e
| Ok id -> Swhid.Download.revision id
let () =
match url with
| Error e -> Format.eprintf "can't get download URL: `%s`@." e
| Ok url ->
Format.printf "you can download the revision at the URL: `%s`@." urlFor more, have a look at the example folder, at the documentation or at the test suite.