hit-0.6.1: Git operations in haskell

Portabilityunix
Stabilityexperimental
MaintainerVincent Hanquez <vincent@snarc.org>
Safe HaskellNone

Data.Git

Contents

Description

 

Synopsis

Basic types

data Ref Source

represent a git reference (SHA1)

Instances

newtype RefName Source

Constructors

RefName 

Fields

refNameRaw :: String
 

data Person Source

an author or committer line has the format: name email time timezone FIXME: should be a string, but I don't know if the data is stored consistantly in one encoding (UTF8)

Instances

data Tree Source

Represent a root tree with zero to many tree entries.

Constructors

Tree 

Fields

treeGetEnts :: [TreeEnt]
 

data Blob Source

Represent a binary blob.

Constructors

Blob 

data Tag Source

Represent a signed tag.

Instances

data GitTime Source

Git time is number of seconds since unix epoch in the UTC zone with the current timezone associated

newtype ModePerm Source

Constructors

ModePerm Word32 

Instances

Helper & type related to ModePerm

data FilePermissions Source

traditional unix permission for owner, group and permissions

Constructors

FilePermissions 

Fields

getOwnerPerm :: !Perm
 
getGroupPerm :: !Perm
 
getOtherPerm :: !Perm
 

Revision

data Revision Source

A git revision. this can be many things: * a shorten ref * a ref * a named branch or tag followed by optional modifiers RevModifier that can represent: * parenting * type * date

resolveRevision :: Git -> Revision -> IO (Maybe Ref)Source

try to resolve a string to a specific commit ref for example: HEAD, HEAD^, master~3, shortRef

Object resolution

resolveTreeish :: Git -> Ref -> IO (Maybe Tree)Source

returns a tree from a ref that might be either a commit, a tree or a tag.

resolvePathSource

Arguments

:: Git

repository

-> Ref

commit reference

-> [ByteString]

paths

-> IO (Maybe Ref) 

resolve the ref (tree or blob) related to a path at a specific commit ref

repo context

data Git Source

represent a git repo, with possibly already opened filereaders for indexes and packs

withCurrentRepo :: (Git -> IO a) -> IO aSource

execute a function on the current repository.

check findRepo to see how the git repository is found.

withRepo :: FilePath -> (Git -> IO c) -> IO cSource

execute a function f with a git context.

findRepo :: IO FilePathSource

Find the git repository from the current directory.

If the environment variable GIT_DIR is set then it's used, otherwise iterate from current directory, up to 128 parents for a .git directory

Repository queries and creation

initRepo :: FilePath -> IO ()Source

initialize a new repository at a specific location.

isRepo :: FilePath -> IO BoolSource

basic checks to see if a specific path looks like a git repo.

Context operations

rewriteSource

Arguments

:: Git

Repository

-> (Commit -> IO Commit)

Mapping function

-> Revision

revision to start from

-> Int

the number of parents to map

-> IO Ref

return the new head REF

Rewrite a set of commits from a revision and returns the new ref.

If during revision traversal (diving) there's a commit with zero or multiple parents then the traversal will stop regardless of the amount of parent requested.

calling rewrite f 2 (revisionOf d) on the following tree:

a <-- b <-- c <-- d

result in the following tree after mapping with f:

a <-- f(b) <-- f(c) <-- f(d)

Get objects

getObjectSource

Arguments

:: Git

repository

-> Ref

the object's reference to

-> Bool

whether to resolve deltas if found

-> IO (Maybe Object)

returned object if found

get an object from repository using a ref.

getCommit :: Git -> Ref -> IO CommitSource

get a specified commit but raises an exception if doesn't exists or type is not appropriate

getTree :: Git -> Ref -> IO TreeSource

get a specified tree but raise

Set objects

setObject :: Git -> Object -> IO RefSource

set an object in the store and returns the new ref this is always going to create a loose object.

Named refs

branchWriteSource

Arguments

:: Git

repository

-> RefName

the name of the branch to write

-> Ref

the reference to set

-> IO () 

Write a branch to point to a specific reference

branchList :: Git -> IO (Set RefName)Source

Return the list of branches

tagWriteSource

Arguments

:: Git

repository

-> RefName

the name of the tag to write

-> Ref

the reference to set

-> IO () 

Write a tag to point to a specific reference

tagList :: Git -> IO (Set RefName)Source

Return the list of branches

headSetSource

Arguments

:: Git

repository

-> Either Ref RefName

either a raw reference or a branch name

-> IO () 

Set head to point to either a reference or a branch name.

headGet :: Git -> IO (Either Ref RefName)Source

Get what the head is pointing to, or the reference otherwise