From 703178e1c6505b46bd2b4e108054b63b42a3598c Mon Sep 17 00:00:00 2001 From: Mathieu Barbin Date: Thu, 22 Feb 2024 16:23:36 +0100 Subject: [PATCH] Init description --- README.md | 66 ++++++++++++++++++++++++++++++++++++-- doc/diagram/gitcli.dot | 7 ++++ doc/diagram/gitcli.png | Bin 0 -> 27531 bytes doc/diagram/ocaml-git.dot | 7 ++++ doc/diagram/ocaml-git.png | Bin 0 -> 30075 bytes doc/diagram/regen.sh | 9 ++++++ doc/diagram/stdlib.dot | 7 ++++ doc/diagram/stdlib.png | Bin 0 -> 28169 bytes doc/traits.md | 33 +++++++++++++++++++ dune-project | 2 +- vcs.opam | 3 +- 11 files changed, 128 insertions(+), 6 deletions(-) create mode 100644 doc/diagram/gitcli.dot create mode 100644 doc/diagram/gitcli.png create mode 100644 doc/diagram/ocaml-git.dot create mode 100644 doc/diagram/ocaml-git.png create mode 100755 doc/diagram/regen.sh create mode 100644 doc/diagram/stdlib.dot create mode 100644 doc/diagram/stdlib.png create mode 100644 doc/traits.md diff --git a/README.md b/README.md index 9a9db6b..bbd0ed8 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,67 @@ [![CI Status](https://github.com/mbarbin/vcs/workflows/ci/badge.svg)](https://github.com/mbarbin/vcs/actions/workflows/ci.yml) -## Code documentation +A versatile OCaml library for Git interaction -The code documentation of the latest release is built with `odoc` and published -to `GitHub` pages [here](https://mbarbin.github.io/vcs). +## Overview + +`Vcs` is an OCaml library providing a direct-style API for interacting with Git +repositories. It's designed as an "interface", or "virtual" library with the +actual implementation dynamically dispatched at runtime. This design allows for +high flexibility and adaptability to different use cases. + +## Architecture + +The `vcs` repository contains several components: + +![Git-cli diagram](doc/diagram/gitcli.png) + +- **vcs**: The main entry point of the library. Marked with a * to indicate no + runtime dependencies. +- **user-lib**: A placeholder in the diagram for any library that uses `Vcs`. + Also marked with a * to indicate no runtime dependencies. +- **executable**: A placeholder for a runtime component based on `user-lib` that + commits to a specific provider and concurrency model. +- **git-cli**: A IO-free library that parses the output of a `git` cli process. +- **vcs-git-provider**: An instantiation of `Git_cli` based on an `Eio` runtime. +- **vcs-git-blocking**: An instantiation of `Git_cli` based on the OCaml `Stdlib`. + +![Stdlib diagram](doc/diagram/stdlib.png) + +## Design principles + +`Vcs` is designed to be backend-agnostic and concurrency-runtime independent. +It's compatible with both `Eio` and OCaml `Stdlib` runtimes. We plan to explore +the feasibility of supporting [luv](https://github.com/aantron/luv) and +[miou](https://github.com/robur-coop/miou) runtimes as separate future work. + +The concurrency runtime must be compatible with program written in direct style. +Runtime based on monadic concurrent models such as `Async` and `Lwt` are +purposely left outside of the scope of this project. + +## How It Works + +`Vcs` is an interface composed of [Traits](doc/traits.md), each providing +different functionalities associated with Git interaction. The dynamic dispatch +implementation uses the [provider](https://github.com/mbarbin/provider) library. + +## Motivation + +We aim to create a highly compatible library that can serve various use cases +and foster community engagement. We also hope to gain practical experience with +the use of provider-based parametric libraries. + +## Relation to ocaml-git + +[ocaml-git](https://github.com/mirage/ocaml-git) is a pure OCaml implementation +of the Git format and protocol. In the `Vcs` framework, an Eio compatible +`ocaml-git` is a potential `provider` for the interface. We plan to create a +`Vcs` provider based on `ocaml-git` in the future. + +![Ocaml-git diagram](doc/diagram/ocaml-git.png) + +## Current Status + +The project is currently in the draft stage in a private repository. We're in +the process of selecting an appropriate license and seeking preliminary +feedback. diff --git a/doc/diagram/gitcli.dot b/doc/diagram/gitcli.dot new file mode 100644 index 0000000..b146638 --- /dev/null +++ b/doc/diagram/gitcli.dot @@ -0,0 +1,7 @@ +digraph G { + "vcs *" -> "user-lib *"; + "user-lib *" -> "executable (eio)"; + "git-cli" -> "vcs-git-provider"; + eio -> "vcs-git-provider"; + "vcs-git-provider" -> "executable (eio)"; +} diff --git a/doc/diagram/gitcli.png b/doc/diagram/gitcli.png new file mode 100644 index 0000000000000000000000000000000000000000..2b2b44c83777fb597cde8c2634968be244b572fe GIT binary patch literal 27531 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 "user-lib *"; + "user-lib *" -> "executable (eio)"; + "ocaml-git-eio" -> "ocaml-git-provider"; + eio -> "ocaml-git-provider"; + "ocaml-git-provider" -> "executable (eio)"; +} diff --git a/doc/diagram/ocaml-git.png b/doc/diagram/ocaml-git.png new file mode 100644 index 0000000000000000000000000000000000000000..1f761e437183d72abd11c85d05424277c0e06989 GIT binary patch literal 30075 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 literal 0 HcmV?d00001 diff --git a/doc/diagram/regen.sh b/doc/diagram/regen.sh new file mode 100755 index 0000000..27e61e3 --- /dev/null +++ b/doc/diagram/regen.sh @@ -0,0 +1,9 @@ +#!/bin/bash -e + +# Change the current working directory to the directory where the script is located +cd "$(dirname "$0")" + +for i in `ls *.dot`; do + echo "Processing $i ..." + dot -Tpng $i -o `echo $i | sed 's/.dot/.png/'` +done diff --git a/doc/diagram/stdlib.dot b/doc/diagram/stdlib.dot new file mode 100644 index 0000000..7694480 --- /dev/null +++ b/doc/diagram/stdlib.dot @@ -0,0 +1,7 @@ +digraph G { + "vcs *" -> "user-lib *"; + "user-lib *" -> "executable (blocking)"; + "git-cli" -> "vcs-git-blocking"; + stdlib -> "vcs-git-blocking"; + "vcs-git-blocking" -> "executable (blocking)"; +} diff --git a/doc/diagram/stdlib.png b/doc/diagram/stdlib.png new file mode 100644 index 0000000000000000000000000000000000000000..4c037dfcfc851b482875a4c5bb7da83bd833c1aa GIT binary patch literal 28169 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 5.1)) diff --git a/vcs.opam b/vcs.opam index f3fddcf..ab052cd 100644 --- a/vcs.opam +++ b/vcs.opam @@ -1,7 +1,6 @@ # This file is generated by dune, edit dune-project instead opam-version: "2.0" -synopsis: - "A collection of OCaml libraries defining interfaces and providers to interact with git repositories" +synopsis: "A versatile OCaml library for Git interaction" maintainer: ["Mathieu Barbin"] authors: ["Mathieu Barbin"] homepage: "https://github.com/mbarbin/vcs"