mbarbin / vcs

A Versatile OCaml Library for Git Operations
https://mbarbin.github.io/vcs/
GNU Lesser General Public License v3.0
7 stars 0 forks source link
git ocaml

A Versatile OCaml Library for Git Operations

Logo

CI Status Coverage Status Deploy Doc Status

Vcs is an OCaml library for interacting with Git repositories. It provides a type-safe and direct-style API to programmatically perform Git operations - ranging from creating commits and branches, to loading and navigating commit graphs in memory, computing diffs between revisions, and more.

Designed as an interface composed of traits, Vcs dynamically dispatches its implementation at runtime. It is currently distributed with two distinct backends: a non-blocking version built atop Eio, and a blocking variant based on OCaml's standard library. Both backends operate by executing git as an external process.

Documentation

Vcs's documentation is published here.

Examples

Explore the example directory to get a firsthand look at how Vcs works in practice.

Motivation

Our goal is to create a versatile and highly compatible library that can cater to a wide range of use cases, while also fostering community engagement. We also hope to gain practical experience with the use of provider-based parametric libraries.

Acknowledgements

We extend our gratitude to the following individuals and teams, whose contributions have been great sources of inspiration for the Vcs project:

We look forward to continuing to learn from and collaborate with the broader open source community.

Build

This repository depends on unreleased packages found in a custom opam-repository. You'll need to add this to your opam switch when building the project.

For example, if you use a local opam switch, this would look like this:

git clone https://github.com/mbarbin/vcs.git
cd vcs
opam switch create . 5.2.0 --no-install
eval $(opam env)
opam repo add mbarbin https://github.com/mbarbin/opam-repository.git
opam install . --deps-only --with-doc --with-test --with-dev-setup

Once this is setup, you can build with dune:

dune build @all @runtest

Current Status

We're currently seeking feedback as we write and publish the code and its dependencies to the opam repository. Please do not hesitate to open issues on GitHub with general feedback, requests, or simply start a discussion.