{"id":15061143,"url":"https://github.com/mbarbin/vcs","last_synced_at":"2025-04-10T06:36:47.850Z","repository":{"id":223913720,"uuid":"761668854","full_name":"mbarbin/vcs","owner":"mbarbin","description":"A Versatile OCaml Library for Git Operations","archived":false,"fork":false,"pushed_at":"2025-03-10T09:02:20.000Z","size":1372,"stargazers_count":8,"open_issues_count":5,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-24T07:40:33.513Z","etag":null,"topics":["git","ocaml"],"latest_commit_sha":null,"homepage":"https://mbarbin.github.io/vcs/","language":"OCaml","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mbarbin.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-22T09:09:10.000Z","updated_at":"2025-03-10T09:02:22.000Z","dependencies_parsed_at":"2024-02-22T18:43:51.018Z","dependency_job_id":"9e0acbeb-74f3-41de-96f8-c13fde785d4d","html_url":"https://github.com/mbarbin/vcs","commit_stats":null,"previous_names":["mbarbin/vcs"],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbarbin%2Fvcs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbarbin%2Fvcs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbarbin%2Fvcs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbarbin%2Fvcs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mbarbin","download_url":"https://codeload.github.com/mbarbin/vcs/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248170840,"owners_count":21059265,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["git","ocaml"],"created_at":"2024-09-24T23:09:47.989Z","updated_at":"2025-04-10T06:36:47.814Z","avatar_url":"https://github.com/mbarbin.png","language":"OCaml","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cp align=\"center\"\u003eA Versatile OCaml Library for Git Operations\u003c/p\u003e\n  \u003cimg\n    src=\"./doc/static/img/ocaml-vcs.png?raw=true\"\n    width='216'\n    alt=\"Logo\"\n  /\u003e\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/mbarbin/vcs/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/mbarbin/vcs/workflows/ci/badge.svg\" alt=\"CI Status\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://coveralls.io/github/mbarbin/vcs?branch=main\"\u003e\u003cimg src=\"https://coveralls.io/repos/github/mbarbin/vcs/badge.svg?branch=main\" alt=\"Coverage Status\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/mbarbin/vcs/actions/workflows/deploy-doc.yml\"\u003e\u003cimg src=\"https://github.com/mbarbin/vcs/workflows/deploy-doc/badge.svg\" alt=\"Deploy Doc Status\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nVcs 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.\n\nDesigned 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.\n\n## Documentation\n\nVcs's documentation is published [here](https://mbarbin.github.io/vcs).\n\n## Examples\n\nExplore the [example](example/) directory to get a firsthand look at how Vcs works in practice.\n\n## Motivation\n\nOur 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.\n\n## Acknowledgements\n\nWe extend our gratitude to the following individuals and teams, whose contributions have been great sources of inspiration for the `Vcs` project:\n\n- The `Eio` developers for their work on the [Eio](https://github.com/ocaml-multicore/eio) project. The development of `Eio` has sparked a great deal of enthusiasm for us in our work on the `Vcs` project. We've also referred to Eio's [Exn](https://ocaml-multicore.github.io/eio/eio/Eio/Exn/index.html) module in the design of `Vcs`'s error handling.\n\n- The Jane Street developers for their significant contributions to the open source community. In particular, this project has drawn inspiration from the `Mercurial` backend of `Iron`, Jane Street's code review tool. For more details about how `Iron` has influenced this project and the licensing implications, please refer to the `NOTICE.md` file.\n\n- Vincent Simonet and contributors for [headache](https://github.com/Frama-C/headache), which we use to manage the copyright headers at the beginning of our files.\n\n- The [Rresult](https://erratique.ch/software/rresult/doc/Rresult/index.html#usage) developers: Their usage design guidelines have been a reference in the design of `Vcs`'s error handling, the `Vcs.Rresult` module in particular.\n\nWe look forward to continuing to learn from and collaborate with the broader open source community.\n\n## Build\n\nThis repository depends on unreleased packages found in a custom [opam-repository](https://github.com/mbarbin/opam-repository.git). You'll need to add this to your opam switch when building the project.\n\nFor example, if you use a local opam switch, this would look like this:\n\n```sh\ngit clone https://github.com/mbarbin/vcs.git\ncd vcs\nopam switch create . 5.2.0 --no-install\neval $(opam env)\nopam repo add mbarbin https://github.com/mbarbin/opam-repository.git\nopam install . --deps-only --with-doc --with-test --with-dev-setup\n```\n\nOnce this is setup, you can build with dune:\n\n```sh\ndune build @all @runtest\n```\n\n## Current Status\n\nWe'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.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmbarbin%2Fvcs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmbarbin%2Fvcs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmbarbin%2Fvcs/lists"}