hit-0.6.2: Git operations in haskell

LicenseBSD-style
MaintainerVincent Hanquez <vincent@snarc.org>
Stabilityexperimental
Portabilityunix
Safe HaskellNone
LanguageHaskell98

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.

resolvePath Source

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 a Source

execute a function on the current repository.

check findRepo to see how the git repository is found.

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

execute a function f with a git context.

findRepo :: IO FilePath Source

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 Bool Source

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

Context operations

rewrite Source

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

getObject Source

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 Commit Source

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

getTree :: Git -> Ref -> IO Tree Source

get a specified tree but raise

Set objects

setObject :: Git -> Object -> IO Ref Source

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

Named refs

branchWrite Source

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

tagWrite Source

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

headSet Source

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