Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
library to manipulate git repositories in haskell (no bindings)

README.md

Hit

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.

Something went wrong with that request. Please try again.