To focus the search input from anywhere on the page, press the 'S' key.
in-package search v0.1.0
Install
Authors
Maintainers
Sources
sha256=9d9db7028c58eb82ee44236afdd68feb42ebe9778aa23a3e59ba65aa2d40ce6d
sha512=ae73f03138455d2bbd3617c9740c2d950f6f6e848dc9f76fbc608cc17f57eab041e1fbdb338a82f94c5121e7dacb733618a40585959097e2dce9c8c87e9f10d0
README.md.html
ocaml-git -- Git format and protocol in pure OCaml
Support for on-disk and in-memory Git stores. Can read and write all
the Git objects: the usual blobs, trees, commits and tags but also
the pack files, pack indexes and the index file (where the staging area
lives).
All the objects share a consistent API, and convenience functions are
provided to manipulate the different objects. For instance, it is
possible to make a pack file position independent (as the Zlib
compression might change the relative offsets between the packed
objects), to generate pack indexes from pack files, or to expand
the filesystem of a given commit.
The library comes with some command-line tools called ogit-*
as a Proof-of-concept
of the core library which shares a similar interface with git
, but where all
operations are mapped to the API exposed ocaml-git
(and hence using only OCaml
code). However, these tools are not done to be use. They are just examples of how to use ocaml-git
.
The API documentation is available
online.
Build and Install Instructions
To build and install the project, simply run:
$ opam install git
What is supported
The loose object files can be read and written;
blobs (files)
trees (directories)
commits (revision history)
tags (annotated tags)
references (branch names)
The pack files
(collections of compressed loose objects using a binary-diff representation)
and pack indexes
(indexes of pack files) can be read and
written). The binary diff hunks are exposed using a high-level
position-independent representation so that they can be manipulated
more easily. Pack file can be created and is compressed.The index file
(used as for managing the staging area)
are fully supported. Which means thatgit diff
andgit status
will work as expected on a repository created by the library.Cloning and fetching
(using various options) are fully supported for
the Git protocol, the smart-HTTP protocol andgit+ssh
. A subset
of the protocol capabilities are implemented (mainlythin-pack
,ofs-delta
,side-band-64k
andallow-reachable-sha1-in-want
).Pushing is still experimental and needs more testing.
An abstraction for Git Store
Is available. Various store implementations are available:An in-memory implementation;
A unix filesystem
implementation;A mirageOS implementation,
requiring aMirage_fs_lwt
implementation.
What is not supported
No server-side operations are currently supported.
No GC.
Updates, merge and rebase are not supported. Use
irmin instead.
Performance
Performance is comparable to the Git tool.
Example
# #require "git.unix";;
# open Git_unix;;
# module Search = Git.Search.Make(FS);;
# let read filename =
let open Lwt_result.Infix in
Store.v (Fpath.v ".") >>= fun t ->
Store.Ref.resolve Store.Reference.master >>= fun head ->
let open Lwt.Infix in
Search.find t head (`Commit (`Path filename)) >|= function
| None -> Lwt.return (Error `Not_found)
| Some hash -> Store.read t hash
val read : string list -> (Store.Value.t, Store.error) Lwt_result.t
# let pp =
let ok ppf = function
| Store.Value.Blob blob ->
Fmt.string ppf (Store.Value.Blob.to_string blob)
| _ -> Fmt.string ppf "#git-object" in
Fmt.pp_result ~ok ~error:Store.pp_error
val pp : (Store.Value.t, Store.error) Fmt.t
# Lwt_main.run Lwt.Infix.(read [ "README.md" ] >|= pp Fmt.stdout)
ocaml-git -- Git format and protocol in pure OCaml
Support for on-disk and in-memory Git stores. Can read and write all
the Git objects: the usual blobs, trees, commits and tags but also
the pack files, pack indexes and the index file (where the staging area
lives).
[...]
License
MIT, see LICENSE.md file for its text.