hit: Git operations in haskell

[ bsd3, development, library ] [ Propose Tags ]

An haskell implementation of git storage operations, allowing users to manipulate git repositories (read and write).

This implementation is fully interoperable with the main C implementation.

This is stricly only manipulating the git store (what's inside the .git directory), and doesn't do anything with the index or your working directory files.

[Skip to Readme]
Versions [faq] 0.1.0, 0.2.0, 0.2.1, 0.2.2, 0.3.0, 0.4.0, 0.4.1, 0.4.2, 0.4.3, 0.5.0, 0.5.1, 0.5.2, 0.5.3, 0.5.4, 0.5.5, 0.6.0, 0.6.1, 0.6.2, 0.6.3
Dependencies attoparsec (>=0.10.1), base (>=4 && <4.11), byteable, bytestring (>=0.9), containers, cryptohash, directory, filepath, hashable (>=1.2), hashtables, hit, hourglass (>=0.2), mtl, parsec (>=3), patience (<0.2), random, system-fileio, system-filepath, unix-compat, utf8-string, vector, zlib, zlib-bindings (==0.1.*) [details]
License BSD-3-Clause
Copyright Vincent Hanquez <vincent@snarc.org>
Author Vincent Hanquez <vincent@snarc.org>
Maintainer Vincent Hanquez <vincent@snarc.org>
Revised Revision 2 made by HerbertValerioRiedel at Thu Jan 3 19:20:56 UTC 2019
Category Development
Home page http://github.com/vincenthz/hit
Source repo head: git clone git://github.com/vincenthz/hit
Uploaded by VincentHanquez at Thu Jan 8 09:25:52 UTC 2015
Distributions Debian:0.6.3, NixOS:0.6.3
Executables Hit
Downloads 8799 total (323 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2015-01-11 [all 1 reports]





Build the executable


Add some debugging options


Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

For package maintainers and hackage trustees

Readme for hit-0.6.3

[back to package description]


Hit is a reimplementation of some git operations in pure haskell.

what it does do:

  • read loose objects, and packed objects.
  • write new loose objects
  • git like operations available: commit, cat-file, verify-pack, rev-list, ls-tree.

what is doesn't do:

  • reimplement the whole of git.
  • checkout's index reading/writing, fetching, merging, diffing.

The main functions for users are available from the Data.Git module.

The essential functions are:

  • withRepo: create a new git context and execute a function with the context. functional equivalent of withFile but for git repository.
  • withCurrentRepo: similar to withRepo but found the repository from the user current directory.
  • resolveRevision: turns a git revision (e.g. HEAD, 0a24^^^~3) into a SHA1 reference.
  • resolvePath: from a commit ref and a path, it will gives the tree or blob reference of the object at the specific path (see example).
  • getObject: from a SHA1 reference, gives a high level object (Commit, Blob, Tree, Tag, Delta) from the git repository. if called with resolveDelta set, it will resolves deltas to be simple objects with the deltas applied.
  • getObjectRaw: similar to getObject but gives a raw representation (lazy bytestring) of the object.
  • getCommit: similar to getObject but gives back a commit.
  • getTree: similar to getObject but gives back a tree.

API Example

resolving path of the README file and returning the reference to the blob :

{-# LANGUAGE OverloadedStrings #-}
import Data.Git.Repository

showPathRef commitRef = withRepo ".git" $ \git -> do
    ref <- maybe (error "inexistent object at this path") id `fmap` resolvePath git commitRef ["README"]
    putStrLn ("README has the reference: " ++ show ref)

catting an object from a ref:

import Data.Git.Repository

catFile ref = withRepo ".git" $ \git -> do
    obj <- maybe (error "not a valid object") id `fmap` getObjectRaw git ref True
    L.putStrLn (oiData obj)

more examples on how to use api can be found in Hit.hs.