Safe Haskell | None |
---|
Interface for working with Git repositories.
- data RepositoryFacts = RepositoryFacts {}
- type MonadGit m = (Failure GitException m, Applicative m, MonadIO m, MonadBaseControl IO m)
- class (Applicative m, Monad m, Failure GitException m, Eq (Oid m), Ord (Oid m), Show (Oid m)) => Repository m where
- data Oid m
- data TreeData m
- data Options m
- facts :: m RepositoryFacts
- parseOid :: Text -> m (Oid m)
- renderOid :: Oid m -> Text
- renderObjOid :: Tagged a (Oid m) -> Text
- createRef :: Text -> RefTarget m (Commit m) -> m (Reference m (Commit m))
- createRef_ :: Text -> RefTarget m (Commit m) -> m ()
- lookupRef :: Text -> m (Maybe (Reference m (Commit m)))
- updateRef :: Text -> RefTarget m (Commit m) -> m (Reference m (Commit m))
- updateRef_ :: Text -> RefTarget m (Commit m) -> m ()
- deleteRef :: Text -> m ()
- allRefs :: m [Reference m (Commit m)]
- allRefNames :: m [Text]
- resolveRef :: Text -> m (Maybe (CommitRef m))
- lookupCommit :: CommitOid m -> m (Commit m)
- lookupTree :: TreeOid m -> m (Tree m)
- lookupBlob :: BlobOid m -> m (Blob m)
- lookupTag :: TagOid m -> m (Tag m)
- lookupObject :: Text -> m (Object m)
- existsObject :: Oid m -> m Bool
- traverseObjects :: forall a. (Object m -> m a) -> Maybe (CommitName m) -> m [a]
- traverseObjects_ :: (Object m -> m ()) -> Maybe (CommitName m) -> m ()
- pushCommit :: (MonadTrans t, MonadGit m, MonadGit (t m), Repository m, Repository (t m)) => CommitName m -> Maybe Text -> Text -> t m (CommitRef (t m))
- traverseCommits :: forall a. (CommitRef m -> m a) -> CommitName m -> m [a]
- traverseCommits_ :: (CommitRef m -> m ()) -> CommitName m -> m ()
- missingObjects :: Maybe (CommitName m) -> CommitName m -> m [Object m]
- newTree :: m (Tree m)
- hashContents :: BlobContents m -> m (BlobOid m)
- createBlob :: BlobContents m -> m (BlobOid m)
- createCommit :: [CommitRef m] -> TreeRef m -> Signature -> Signature -> Text -> Maybe Text -> m (Commit m)
- createTag :: CommitOid m -> Signature -> Text -> Text -> m (Tag m)
- deleteRepository :: m ()
- buildPackFile :: FilePath -> [Either (CommitOid m) (TreeOid m)] -> m FilePath
- buildPackIndex :: FilePath -> ByteString -> m (Text, FilePath, FilePath)
- writePackFile :: FilePath -> m ()
- remoteFetch :: Text -> Text -> m ()
- data GitException
- = BackendError Text
- | GitError Text
- | RepositoryNotExist
- | RepositoryInvalid
- | RepositoryCannotAccess Text
- | BlobCreateFailed
- | BlobEmptyCreateFailed
- | BlobEncodingUnknown Text
- | BlobLookupFailed
- | PushNotFastForward Text
- | TranslationException Text
- | TreeCreateFailed Text
- | TreeBuilderCreateFailed
- | TreeBuilderInsertFailed Text
- | TreeBuilderRemoveFailed Text
- | TreeBuilderWriteFailed Text
- | TreeLookupFailed
- | TreeCannotTraverseBlob
- | TreeCannotTraverseCommit
- | TreeEntryLookupFailed FilePath
- | TreeUpdateFailed
- | TreeWalkFailed
- | CommitCreateFailed
- | CommitLookupFailed Text
- | ReferenceCreateFailed
- | ReferenceDeleteFailed Text
- | RefCannotCreateFromPartialOid
- | ReferenceListingFailed
- | ReferenceLookupFailed Text
- | ObjectLookupFailed Text Int
- | ObjectRefRequiresFullOid
- | OidCopyFailed
- | OidParseFailed Text
- | QuotaHardLimitExceeded Int Int
- type BlobOid m = Tagged (Blob m) (Oid m)
- type TreeOid m = Tagged (Tree m) (Oid m)
- type CommitOid m = Tagged (Commit m) (Oid m)
- type TagOid m = Tagged (Tag m) (Oid m)
- data RefTarget m a
- = RefObj !(ObjRef m a)
- | RefSymbolic !Text
- data Reference m a = Reference {}
- data CommitName m
- = CommitObjectId !(CommitOid m)
- | CommitRefName !Text
- | CommitReference !(Reference m (Commit m))
- nameOfCommit :: Commit m -> CommitName m
- commitNameToRef :: Repository m => CommitName m -> m (Maybe (CommitRef m))
- renderCommitName :: Repository m => CommitName m -> Text
- copyOid :: (Repository m, MonadGit m, Repository n, MonadGit n) => Oid m -> n (Oid n)
- copyCommitOid :: (Repository m, MonadGit m, Repository n, MonadGit n) => CommitOid m -> n (CommitOid n)
- copyCommitName :: (Repository m, MonadGit m, Repository n, MonadGit n) => CommitName m -> n (Maybe (CommitName n))
- data ObjRef m a
- type BlobRef m = ObjRef m (Blob m)
- type TreeRef m = ObjRef m (Tree m)
- type CommitRef m = ObjRef m (Commit m)
- type TagRef m = ObjRef m (Tag m)
- data Object m
- objectOid :: Repository m => Object m -> m (Oid m)
- data Blob m = Blob {
- blobOid :: !(BlobOid m)
- blobContents :: !(BlobContents m)
- blobRefOid :: Repository m => BlobRef m -> BlobOid m
- resolveBlobRef :: Repository m => BlobRef m -> m (Blob m)
- type ByteSource m = Producer m ByteString
- data BlobContents m
- = BlobString !ByteString
- | BlobStream !(ByteSource m)
- | BlobSizedStream !(ByteSource m) !Int
- data BlobKind
- data TreeEntry m
- = BlobEntry {
- blobEntryOid :: !(BlobOid m)
- blobEntryKind :: !BlobKind
- | TreeEntry {
- treeEntryRef :: !(TreeRef m)
- | CommitEntry {
- commitEntryRef :: !(CommitOid m)
- = BlobEntry {
- treeEntryOid :: Repository m => TreeEntry m -> m (Oid m)
- blobEntry :: Repository m => BlobOid m -> BlobKind -> TreeEntry m
- treeEntry :: Repository m => Tree m -> TreeEntry m
- commitEntry :: Repository m => Commit m -> TreeEntry m
- data ModifyTreeResult m
- fromModifyTreeResult :: ModifyTreeResult m -> Maybe (TreeEntry m)
- toModifyTreeResult :: (TreeEntry m -> ModifyTreeResult m) -> Maybe (TreeEntry m) -> ModifyTreeResult m
- data Tree m = Tree {
- modifyTree :: FilePath -> Bool -> (Maybe (TreeEntry m) -> m (ModifyTreeResult m)) -> m (Maybe (TreeEntry m))
- lookupEntry :: FilePath -> m (Maybe (TreeEntry m))
- putTreeEntry :: FilePath -> TreeEntry m -> m ()
- putBlob' :: FilePath -> BlobOid m -> BlobKind -> m ()
- putBlob :: FilePath -> BlobOid m -> m ()
- putTree :: FilePath -> TreeRef m -> m ()
- putCommit :: FilePath -> CommitOid m -> m ()
- dropFromTree :: FilePath -> m ()
- writeTree :: m (TreeOid m)
- traverseEntries :: forall a. (FilePath -> TreeEntry m -> m a) -> m [a]
- traverseEntries_ :: (FilePath -> TreeEntry m -> m ()) -> m ()
- getTreeData :: !(TreeData m)
- mkTree :: Repository m => (Tree m -> FilePath -> Bool -> (Maybe (TreeEntry m) -> m (ModifyTreeResult m)) -> m (Maybe (TreeEntry m))) -> (Tree m -> m (TreeOid m)) -> (forall a. Tree m -> (FilePath -> TreeEntry m -> m a) -> m [a]) -> TreeData m -> Tree m
- treeRef :: Tree m -> TreeRef m
- treeRefOid :: Repository m => TreeRef m -> m (TreeOid m)
- resolveTreeRef :: Repository m => TreeRef m -> m (Tree m)
- data Signature = Signature {
- signatureName :: !Text
- signatureEmail :: !Text
- signatureWhen :: !ZonedTime
- data Commit m = Commit {
- commitOid :: !(CommitOid m)
- commitParents :: ![CommitRef m]
- commitTree :: !(TreeRef m)
- commitAuthor :: !Signature
- commitCommitter :: !Signature
- commitLog :: !Text
- commitEncoding :: !Text
- commitRef :: Commit m -> CommitRef m
- commitRefTarget :: Commit c -> RefTarget m (Commit c)
- commitRefOid :: Repository m => CommitRef m -> CommitOid m
- resolveCommitRef :: Repository m => CommitRef m -> m (Commit m)
- referenceToRef :: Repository m => Maybe Text -> Maybe (Reference m (Commit m)) -> m (Maybe (CommitRef m))
- data Tag m = Tag {}
- tagRefOid :: Repository m => TagRef m -> TagOid m
- data ModificationKind
- = Unchanged
- | Modified
- | Added
- | Deleted
- | TypeChanged
- data MergeStatus
- mergeStatus :: ModificationKind -> ModificationKind -> MergeStatus
- data MergeResult m
- = MergeSuccess {
- mergeCommit :: CommitOid m
- | MergeConflicted { }
- = MergeSuccess {
- copyConflict :: (Repository m, MonadGit m, Repository n, MonadGit n) => MergeResult m -> n (MergeResult n)
- data RepositoryOptions = RepositoryOptions {
- repoPath :: !FilePath
- repoIsBare :: !Bool
- repoAutoCreate :: !Bool
- data RepositoryFactory t m c = RepositoryFactory {
- openRepository :: RepositoryOptions -> m c
- runRepository :: forall a. c -> t m a -> m a
- closeRepository :: c -> m ()
- getRepository :: t m c
- defaultOptions :: !RepositoryOptions
- startupBackend :: m ()
- shutdownBackend :: m ()
- withBackendDo :: (MonadIO m, MonadBaseControl IO m) => RepositoryFactory t m a -> m b -> m b
- withRepository' :: (Repository (t m), MonadTrans t, MonadBaseControl IO m, MonadIO m) => RepositoryFactory t m c -> RepositoryOptions -> t m a -> m a
- withRepository :: (Repository (t m), MonadTrans t, MonadBaseControl IO m, MonadIO m) => RepositoryFactory t m c -> FilePath -> t m a -> m a
Documentation
type MonadGit m = (Failure GitException m, Applicative m, MonadIO m, MonadBaseControl IO m)Source
class (Applicative m, Monad m, Failure GitException m, Eq (Oid m), Ord (Oid m), Show (Oid m)) => Repository m whereSource
Repository
is the central point of contact between user code and
Git data objects. Every object must belong to some repository.
facts :: m RepositoryFactsSource
parseOid :: Text -> m (Oid m)Source
renderOid :: Oid m -> TextSource
renderObjOid :: Tagged a (Oid m) -> TextSource
createRef :: Text -> RefTarget m (Commit m) -> m (Reference m (Commit m))Source
createRef_ :: Text -> RefTarget m (Commit m) -> m ()Source
lookupRef :: Text -> m (Maybe (Reference m (Commit m)))Source
updateRef :: Text -> RefTarget m (Commit m) -> m (Reference m (Commit m))Source
updateRef_ :: Text -> RefTarget m (Commit m) -> m ()Source
deleteRef :: Text -> m ()Source
allRefs :: m [Reference m (Commit m)]Source
allRefNames :: m [Text]Source
resolveRef :: Text -> m (Maybe (CommitRef m))Source
lookupCommit :: CommitOid m -> m (Commit m)Source
lookupTree :: TreeOid m -> m (Tree m)Source
lookupBlob :: BlobOid m -> m (Blob m)Source
lookupTag :: TagOid m -> m (Tag m)Source
lookupObject :: Text -> m (Object m)Source
existsObject :: Oid m -> m BoolSource
traverseObjects :: forall a. (Object m -> m a) -> Maybe (CommitName m) -> m [a]Source
traverseObjects_ :: (Object m -> m ()) -> Maybe (CommitName m) -> m ()Source
pushCommit :: (MonadTrans t, MonadGit m, MonadGit (t m), Repository m, Repository (t m)) => CommitName m -> Maybe Text -> Text -> t m (CommitRef (t m))Source
traverseCommits :: forall a. (CommitRef m -> m a) -> CommitName m -> m [a]Source
traverseCommits_ :: (CommitRef m -> m ()) -> CommitName m -> m ()Source
:: Maybe (CommitName m) | A commit we may already have |
-> CommitName m | The commit we need |
-> m [Object m] | All the objects in between |
hashContents :: BlobContents m -> m (BlobOid m)Source
createBlob :: BlobContents m -> m (BlobOid m)Source
createCommit :: [CommitRef m] -> TreeRef m -> Signature -> Signature -> Text -> Maybe Text -> m (Commit m)Source
createTag :: CommitOid m -> Signature -> Text -> Text -> m (Tag m)Source
deleteRepository :: m ()Source
buildPackFile :: FilePath -> [Either (CommitOid m) (TreeOid m)] -> m FilePathSource
buildPackIndex :: FilePath -> ByteString -> m (Text, FilePath, FilePath)Source
writePackFile :: FilePath -> m ()Source
remoteFetch :: Text -> Text -> m ()Source
data GitException Source
There is a separate GitException
for each possible failure when
interacting with the Git repository.
data CommitName m Source
CommitObjectId !(CommitOid m) | |
CommitRefName !Text | |
CommitReference !(Reference m (Commit m)) |
Repository m => Show (CommitName m) |
nameOfCommit :: Commit m -> CommitName mSource
commitNameToRef :: Repository m => CommitName m -> m (Maybe (CommitRef m))Source
renderCommitName :: Repository m => CommitName m -> TextSource
copyOid :: (Repository m, MonadGit m, Repository n, MonadGit n) => Oid m -> n (Oid n)Source
copyCommitOid :: (Repository m, MonadGit m, Repository n, MonadGit n) => CommitOid m -> n (CommitOid n)Source
copyCommitName :: (Repository m, MonadGit m, Repository n, MonadGit n) => CommitName m -> n (Maybe (CommitName n))Source
objectOid :: Repository m => Object m -> m (Oid m)Source
Blob | |
|
blobRefOid :: Repository m => BlobRef m -> BlobOid mSource
resolveBlobRef :: Repository m => BlobRef m -> m (Blob m)Source
type ByteSource m = Producer m ByteStringSource
data BlobContents m Source
BlobString !ByteString | |
BlobStream !(ByteSource m) | |
BlobSizedStream !(ByteSource m) !Int |
Eq (BlobContents m) |
BlobEntry | |
| |
TreeEntry | |
| |
CommitEntry | |
|
treeEntryOid :: Repository m => TreeEntry m -> m (Oid m)Source
treeEntry :: Repository m => Tree m -> TreeEntry mSource
commitEntry :: Repository m => Commit m -> TreeEntry mSource
data ModifyTreeResult m Source
fromModifyTreeResult :: ModifyTreeResult m -> Maybe (TreeEntry m)Source
toModifyTreeResult :: (TreeEntry m -> ModifyTreeResult m) -> Maybe (TreeEntry m) -> ModifyTreeResult mSource
A Tree
is anything that is treeish.
Minimal complete definition: modifyTree
. Note that for some treeish
things, like Tags, it should always be an error to attempt to modify the
tree in any way.
Tree | |
|
mkTree :: Repository m => (Tree m -> FilePath -> Bool -> (Maybe (TreeEntry m) -> m (ModifyTreeResult m)) -> m (Maybe (TreeEntry m))) -> (Tree m -> m (TreeOid m)) -> (forall a. Tree m -> (FilePath -> TreeEntry m -> m a) -> m [a]) -> TreeData m -> Tree mSource
treeRefOid :: Repository m => TreeRef m -> m (TreeOid m)Source
resolveTreeRef :: Repository m => TreeRef m -> m (Tree m)Source
Signature | |
|
Commit | |
|
commitRefTarget :: Commit c -> RefTarget m (Commit c)Source
commitRefOid :: Repository m => CommitRef m -> CommitOid mSource
resolveCommitRef :: Repository m => CommitRef m -> m (Commit m)Source
referenceToRef :: Repository m => Maybe Text -> Maybe (Reference m (Commit m)) -> m (Maybe (CommitRef m))Source
tagRefOid :: Repository m => TagRef m -> TagOid mSource
data ModificationKind Source
data MergeStatus Source
data MergeResult m Source
Repository m => Show (MergeResult m) |
copyConflict :: (Repository m, MonadGit m, Repository n, MonadGit n) => MergeResult m -> n (MergeResult n)Source
data RepositoryOptions Source
RepositoryOptions | |
|
data RepositoryFactory t m c Source
RepositoryFactory | |
|
withBackendDo :: (MonadIO m, MonadBaseControl IO m) => RepositoryFactory t m a -> m b -> m bSource
withRepository' :: (Repository (t m), MonadTrans t, MonadBaseControl IO m, MonadIO m) => RepositoryFactory t m c -> RepositoryOptions -> t m a -> m aSource
withRepository :: (Repository (t m), MonadTrans t, MonadBaseControl IO m, MonadIO m) => RepositoryFactory t m c -> FilePath -> t m a -> m aSource