Skip to content
/ hit Public
forked from vincenthz/hit

library to manipulate git repositories in haskell (no bindings)

License

Notifications You must be signed in to change notification settings

snoyberg/hit

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

library to manipulate git repositories in haskell (no bindings)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Haskell 100.0%