Safe Haskell | None |
---|
Git
Description
Interface for working with Git repositories.
- data RepositoryFacts = RepositoryFacts {}
- class (Applicative m, Monad m, Failure GitException m, IsOid (Oid m)) => Repository m where
- type Oid m :: *
- data Tree m :: *
- data Options m :: *
- facts :: m RepositoryFacts
- parseOid :: Text -> m (Oid m)
- parseObjOid :: forall o. Text -> m (Tagged o (Oid m))
- createReference :: Text -> RefTarget m -> m (Reference m)
- createReference_ :: Text -> RefTarget m -> m ()
- lookupReference :: Text -> m (Maybe (Reference m))
- updateReference :: Text -> RefTarget m -> m (Reference m)
- updateReference_ :: Text -> RefTarget m -> m ()
- deleteReference :: Text -> m ()
- allReferences :: m [Reference m]
- allReferenceNames :: m [Text]
- resolveReference :: Text -> m (Maybe (CommitOid 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)
- lookupObjectOid :: Text -> m (ObjectOid m)
- existsObject :: Oid m -> m Bool
- traverseObjects :: forall a. (Oid m -> m a) -> Maybe (CommitOid m) -> m [a]
- traverseObjects_ :: (Oid m -> m ()) -> Maybe (CommitOid m) -> m ()
- pushCommit :: (MonadTrans t, MonadGit m, MonadGit (t m), Repository m, Repository (t m)) => CommitOid m -> Maybe Text -> Text -> t m (CommitOid (t m))
- traverseCommits :: forall a. (CommitOid m -> m a) -> CommitOid m -> m [a]
- traverseCommits_ :: (CommitOid m -> m ()) -> CommitOid m -> m ()
- missingObjects :: Maybe (CommitOid m) -> CommitOid m -> m [ObjectOid m]
- newTreeBuilder :: Maybe (Tree m) -> m (TreeBuilder m)
- treeOid :: Tree m -> TreeOid m
- getTreeEntry :: Tree m -> FilePath -> m (Maybe (TreeEntry m))
- traverseEntries :: (FilePath -> TreeEntry m -> m a) -> Tree m -> m [a]
- traverseEntries_ :: (FilePath -> TreeEntry m -> m a) -> Tree m -> m ()
- hashContents :: BlobContents m -> m (BlobOid m)
- createBlob :: BlobContents m -> m (BlobOid m)
- createCommit :: [CommitOid m] -> TreeOid 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 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 ()
- data RepositoryOptions = RepositoryOptions {
- repoPath :: !FilePath
- repoIsBare :: !Bool
- repoAutoCreate :: !Bool
- 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 -> FilePath -> t m a -> m a
- withRepository' :: (Repository (t m), MonadTrans t, MonadBaseControl IO m, MonadIO m) => RepositoryFactory t m c -> RepositoryOptions -> t m a -> m a
- type MonadGit m = (Failure GitException m, Applicative m, MonadIO m, MonadBaseControl IO m)
- class (Eq o, Ord o, Show o) => IsOid o where
- renderOid :: o -> Text
- renderObjOid :: Tagged a o -> Text
- copyOid :: (Repository m, Repository n) => Oid m -> n (Oid n)
- data Object m
- data ObjectOid m
- = BlobObjOid !(BlobOid m)
- | TreeObjOid !(TreeOid m)
- | CommitObjOid !(CommitOid m)
- | TagObjOid !(TagOid m)
- objectOid :: Repository m => Object m -> Oid m
- loadObject :: Repository m => ObjectOid m -> m (Object m)
- objectToObjOid :: Repository m => Object m -> ObjectOid m
- untagObjOid :: Repository m => ObjectOid m -> Oid m
- newtype SHA = SHA ByteString
- textToSha :: Monad m => Text -> m SHA
- shaToText :: SHA -> Text
- data Blob m = Blob {
- blobOid :: !(BlobOid m)
- blobContents :: !(BlobContents m)
- type BlobOid m = Tagged (Blob m) (Oid m)
- data BlobContents m
- = BlobString !ByteString
- | BlobStream !(ByteSource m)
- | BlobSizedStream !(ByteSource m) !Int
- data BlobKind
- type ByteSource m = Producer m ByteString
- blobEntry :: Repository m => BlobOid m -> BlobKind -> TreeEntry m
- createBlobUtf8 :: Repository m => Text -> m (BlobOid m)
- catBlob :: Repository m => Text -> m ByteString
- catBlobUtf8 :: Repository m => Text -> m Text
- copyBlob :: (Repository m, Repository (t m), MonadTrans t) => BlobOid m -> HashSet Text -> t m (BlobOid (t m), HashSet Text)
- blobContentsToByteString :: Repository m => BlobContents m -> m ByteString
- blobToByteString :: Repository m => Blob m -> m ByteString
- data TreeT m a
- data TreeBuilder m = TreeBuilder {
- mtbBaseTreeOid :: Maybe (TreeOid m)
- mtbPendingUpdates :: HashMap Text (TreeBuilder m)
- mtbNewBuilder :: Maybe (Tree m) -> m (TreeBuilder m)
- mtbWriteContents :: TreeBuilder m -> m (ModifiedBuilder m, TreeOid m)
- mtbLookupEntry :: Text -> m (Maybe (TreeEntry m))
- mtbEntryCount :: m Int
- mtbPutEntry :: TreeBuilder m -> Text -> TreeEntry m -> m (ModifiedBuilder m)
- mtbDropEntry :: TreeBuilder m -> Text -> m (ModifiedBuilder m)
- data ModifiedBuilder m
- = ModifiedBuilder (TreeBuilder m)
- | BuilderUnchanged (TreeBuilder m)
- data TreeEntry m
- = BlobEntry {
- blobEntryOid :: !(BlobOid m)
- blobEntryKind :: !BlobKind
- | TreeEntry {
- treeEntryOid :: !(TreeOid m)
- | CommitEntry {
- commitEntryOid :: !(CommitOid m)
- = BlobEntry {
- type TreeOid m = Tagged (Tree m) (Oid m)
- createTree :: Repository m => TreeT m a -> m (TreeOid m)
- withNewTree :: Repository m => TreeT m a -> m (a, TreeOid m)
- mutateTree :: Repository m => Tree m -> TreeT m a -> m (TreeOid m)
- mutateTreeOid :: Repository m => TreeOid m -> TreeT m a -> m (TreeOid m)
- currentTree :: Repository m => TreeT m (Tree m)
- withTree :: Repository m => Tree m -> TreeT m a -> m (a, TreeOid m)
- withTreeOid :: Repository m => TreeOid m -> TreeT m a -> m (a, TreeOid m)
- dropEntry :: Repository m => FilePath -> TreeT m ()
- getEntry :: Repository m => FilePath -> TreeT m (Maybe (TreeEntry m))
- putBlob :: Repository m => FilePath -> BlobOid m -> TreeT m ()
- putBlob' :: Repository m => FilePath -> BlobOid m -> BlobKind -> TreeT m ()
- putCommit :: Repository m => FilePath -> CommitOid m -> TreeT m ()
- putEntry :: Repository m => FilePath -> TreeEntry m -> TreeT m ()
- putTree :: Repository m => FilePath -> TreeOid m -> TreeT m ()
- treeEntry :: Repository m => Tree m -> TreeEntry m
- getTreeEntryOid :: Repository m => TreeEntry m -> Oid m
- data ModifyTreeResult m
- fromModifyTreeResult :: ModifyTreeResult m -> Maybe (TreeEntry m)
- toModifyTreeResult :: (TreeEntry m -> ModifyTreeResult m) -> Maybe (TreeEntry m) -> ModifyTreeResult m
- emptyTreeId :: Text
- treeBlobEntries :: Repository m => Tree m -> m [(FilePath, TreeEntry m)]
- copyTreeEntry :: (Repository m, Repository (t m), MonadTrans t) => TreeEntry m -> HashSet Text -> t m (TreeEntry (t m), HashSet Text)
- copyTree :: (Repository m, Repository (t m), MonadTrans t) => TreeOid m -> HashSet Text -> t m (TreeOid (t m), HashSet Text)
- data Commit m = Commit {
- commitOid :: !(CommitOid m)
- commitParents :: ![CommitOid m]
- commitTree :: !(TreeOid m)
- commitAuthor :: !Signature
- commitCommitter :: !Signature
- commitLog :: !Text
- commitEncoding :: !Text
- type CommitOid m = Tagged (Commit m) (Oid m)
- data CommitName m
- = CommitObjectId !(CommitOid m)
- | CommitReferenceName !Text
- | CommitReference !(Reference m)
- data Signature = Signature {
- signatureName :: !Text
- signatureEmail :: !Text
- signatureWhen :: !ZonedTime
- commitEntry :: Repository m => Commit m -> TreeEntry m
- commitRefTarget :: Commit m -> RefTarget m
- getCommitParents :: Repository m => Commit m -> m [Commit m]
- copyCommitName :: (Repository m, MonadGit m, Repository n, MonadGit n) => CommitName m -> n (Maybe (CommitName n))
- copyCommitOid :: (Repository m, MonadGit m, Repository n, MonadGit n) => CommitOid m -> n (CommitOid n)
- nameOfCommit :: Commit m -> CommitName m
- commitNameToOid :: Repository m => CommitName m -> m (Maybe (CommitOid m))
- renderCommitName :: Repository m => CommitName m -> Text
- commitTreeEntry :: Repository m => Commit m -> FilePath -> m (Maybe (TreeEntry m))
- copyCommit :: (Repository m, Repository (t m), MonadTrans t) => CommitOid m -> Maybe Text -> HashSet Text -> t m (CommitOid (t m), HashSet Text)
- genericPushCommit :: (Repository m, Repository (t m), MonadTrans t) => CommitOid m -> Text -> t m (CommitOid (t m))
- data PinnedEntry m = PinnedEntry {
- pinnedOid :: Oid m
- pinnedCommit :: Commit m
- pinnedEntry :: TreeEntry m
- commitHistoryFirstParent :: Repository m => Commit m -> m [Commit m]
- commitEntryHistory :: Repository m => Commit m -> FilePath -> m [PinnedEntry m]
- identifyEntry :: Repository m => Commit m -> TreeEntry m -> m (PinnedEntry m)
- data Tag m = Tag {}
- type TagOid m = Tagged (Tag m) (Oid m)
- data RefTarget m
- = RefObj !(CommitOid m)
- | RefSymbolic !Text
- data Reference m = Reference {
- referenceName :: !Text
- referenceTarget :: !(RefTarget m)
- referenceToOid :: Repository m => Maybe Text -> Maybe (Reference m) -> m (Maybe (CommitOid m))
- resolveReferenceTree :: Repository m => Text -> m (Maybe (Tree 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
- data ModificationKind
- = Unchanged
- | Modified
- | Added
- | Deleted
- | TypeChanged
- data MergeStatus
- data MergeResult m
- = MergeSuccess {
- mergeCommit :: CommitOid m
- | MergeConflicted { }
- = MergeSuccess {
- mergeStatus :: ModificationKind -> ModificationKind -> MergeStatus
- copyConflict :: (Repository m, MonadGit m, Repository n, MonadGit n) => MergeResult m -> n (MergeResult n)
- allMissingObjects :: Repository m => [ObjectOid m] -> m [ObjectOid m]
- withNewRepository :: (Repository (t m), MonadGit (t m), MonadBaseControl IO m, MonadIO m, MonadTrans t) => RepositoryFactory t m c -> FilePath -> t m a -> m a
- withNewRepository' :: (Repository (t m), MonadGit (t m), MonadBaseControl IO m, MonadIO m, MonadTrans t) => RepositoryFactory t m c -> FilePath -> t m a -> m a
Documentation
class (Applicative m, Monad m, Failure GitException m, IsOid (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.
Methods
facts :: m RepositoryFactsSource
parseOid :: Text -> m (Oid m)Source
parseObjOid :: forall o. Text -> m (Tagged o (Oid m))Source
createReference :: Text -> RefTarget m -> m (Reference m)Source
createReference_ :: Text -> RefTarget m -> m ()Source
lookupReference :: Text -> m (Maybe (Reference m))Source
updateReference :: Text -> RefTarget m -> m (Reference m)Source
updateReference_ :: Text -> RefTarget m -> m ()Source
deleteReference :: Text -> m ()Source
allReferences :: m [Reference m]Source
allReferenceNames :: m [Text]Source
resolveReference :: Text -> m (Maybe (CommitOid 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
lookupObjectOid :: Text -> m (ObjectOid m)Source
existsObject :: Oid m -> m BoolSource
traverseObjects :: forall a. (Oid m -> m a) -> Maybe (CommitOid m) -> m [a]Source
traverseObjects_ :: (Oid m -> m ()) -> Maybe (CommitOid m) -> m ()Source
pushCommit :: (MonadTrans t, MonadGit m, MonadGit (t m), Repository m, Repository (t m)) => CommitOid m -> Maybe Text -> Text -> t m (CommitOid (t m))Source
traverseCommits :: forall a. (CommitOid m -> m a) -> CommitOid m -> m [a]Source
traverseCommits_ :: (CommitOid m -> m ()) -> CommitOid m -> m ()Source
Arguments
:: Maybe (CommitOid m) | A commit we may already have |
-> CommitOid m | The commit we need |
-> m [ObjectOid m] | All the objects in between |
newTreeBuilder :: Maybe (Tree m) -> m (TreeBuilder m)Source
treeOid :: Tree m -> TreeOid mSource
getTreeEntry :: Tree m -> FilePath -> m (Maybe (TreeEntry m))Source
traverseEntries :: (FilePath -> TreeEntry m -> m a) -> Tree m -> m [a]Source
traverseEntries_ :: (FilePath -> TreeEntry m -> m a) -> Tree m -> m ()Source
hashContents :: BlobContents m -> m (BlobOid m)Source
createBlob :: BlobContents m -> m (BlobOid m)Source
createCommit :: [CommitOid m] -> TreeOid 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 RepositoryFactory t m c Source
Constructors
RepositoryFactory | |
Fields
|
data RepositoryOptions Source
Constructors
RepositoryOptions | |
Fields
|
Instances
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 -> FilePath -> t m a -> m aSource
withRepository' :: (Repository (t m), MonadTrans t, MonadBaseControl IO m, MonadIO m) => RepositoryFactory t m c -> RepositoryOptions -> t m a -> m aSource
type MonadGit m = (Failure GitException m, Applicative m, MonadIO m, MonadBaseControl IO m)Source
copyOid :: (Repository m, Repository n) => Oid m -> n (Oid n)Source
Constructors
BlobObjOid !(BlobOid m) | |
TreeObjOid !(TreeOid m) | |
CommitObjOid !(CommitOid m) | |
TagObjOid !(TagOid m) |
objectOid :: Repository m => Object m -> Oid mSource
loadObject :: Repository m => ObjectOid m -> m (Object m)Source
objectToObjOid :: Repository m => Object m -> ObjectOid mSource
untagObjOid :: Repository m => ObjectOid m -> Oid mSource
Constructors
SHA ByteString |
Constructors
Blob | |
Fields
|
data BlobContents m Source
Constructors
BlobString !ByteString | |
BlobStream !(ByteSource m) | |
BlobSizedStream !(ByteSource m) !Int |
Instances
Eq (BlobContents m) |
Constructors
PlainBlob | |
ExecutableBlob | |
SymlinkBlob | |
UnknownBlob |
type ByteSource m = Producer m ByteStringSource
createBlobUtf8 :: Repository m => Text -> m (BlobOid m)Source
catBlob :: Repository m => Text -> m ByteStringSource
catBlobUtf8 :: Repository m => Text -> m TextSource
copyBlob :: (Repository m, Repository (t m), MonadTrans t) => BlobOid m -> HashSet Text -> t m (BlobOid (t m), HashSet Text)Source
blobContentsToByteString :: Repository m => BlobContents m -> m ByteStringSource
blobToByteString :: Repository m => Blob m -> m ByteStringSource
data TreeBuilder m Source
Constructors
TreeBuilder | |
Fields
|
Instances
Monad m => Monoid (TreeBuilder m) |
data ModifiedBuilder m Source
Constructors
ModifiedBuilder (TreeBuilder m) | |
BuilderUnchanged (TreeBuilder m) |
Instances
Constructors
BlobEntry | |
Fields
| |
TreeEntry | |
Fields
| |
CommitEntry | |
Fields
|
createTree :: Repository m => TreeT m a -> m (TreeOid m)Source
withNewTree :: Repository m => TreeT m a -> m (a, TreeOid m)Source
mutateTree :: Repository m => Tree m -> TreeT m a -> m (TreeOid m)Source
mutateTreeOid :: Repository m => TreeOid m -> TreeT m a -> m (TreeOid m)Source
currentTree :: Repository m => TreeT m (Tree m)Source
withTreeOid :: Repository m => TreeOid m -> TreeT m a -> m (a, TreeOid m)Source
dropEntry :: Repository m => FilePath -> TreeT m ()Source
treeEntry :: Repository m => Tree m -> TreeEntry mSource
getTreeEntryOid :: Repository m => TreeEntry m -> Oid mSource
data ModifyTreeResult m Source
Constructors
TreeEntryNotFound | |
TreeEntryDeleted | |
TreeEntryPersistent (TreeEntry m) | |
TreeEntryMutated (TreeEntry m) |
fromModifyTreeResult :: ModifyTreeResult m -> Maybe (TreeEntry m)Source
toModifyTreeResult :: (TreeEntry m -> ModifyTreeResult m) -> Maybe (TreeEntry m) -> ModifyTreeResult mSource
treeBlobEntries :: Repository m => Tree m -> m [(FilePath, TreeEntry m)]Source
copyTreeEntry :: (Repository m, Repository (t m), MonadTrans t) => TreeEntry m -> HashSet Text -> t m (TreeEntry (t m), HashSet Text)Source
copyTree :: (Repository m, Repository (t m), MonadTrans t) => TreeOid m -> HashSet Text -> t m (TreeOid (t m), HashSet Text)Source
Constructors
Commit | |
Fields
|
data CommitName m Source
Constructors
CommitObjectId !(CommitOid m) | |
CommitReferenceName !Text | |
CommitReference !(Reference m) |
Instances
Repository m => Show (CommitName m) |
Constructors
Signature | |
Fields
|
commitEntry :: Repository m => Commit m -> TreeEntry mSource
commitRefTarget :: Commit m -> RefTarget mSource
getCommitParents :: Repository m => Commit m -> m [Commit m]Source
copyCommitName :: (Repository m, MonadGit m, Repository n, MonadGit n) => CommitName m -> n (Maybe (CommitName n))Source
copyCommitOid :: (Repository m, MonadGit m, Repository n, MonadGit n) => CommitOid m -> n (CommitOid n)Source
nameOfCommit :: Commit m -> CommitName mSource
commitNameToOid :: Repository m => CommitName m -> m (Maybe (CommitOid m))Source
renderCommitName :: Repository m => CommitName m -> TextSource
commitTreeEntry :: Repository m => Commit m -> FilePath -> m (Maybe (TreeEntry m))Source
copyCommit :: (Repository m, Repository (t m), MonadTrans t) => CommitOid m -> Maybe Text -> HashSet Text -> t m (CommitOid (t m), HashSet Text)Source
genericPushCommit :: (Repository m, Repository (t m), MonadTrans t) => CommitOid m -> Text -> t m (CommitOid (t m))Source
Fast-forward push a reference between repositories using a recursive copy. This can be extremely slow, but always works.
data PinnedEntry m Source
Constructors
PinnedEntry | |
Fields
|
commitHistoryFirstParent :: Repository m => Commit m -> m [Commit m]Source
commitEntryHistory :: Repository m => Commit m -> FilePath -> m [PinnedEntry m]Source
identifyEntry :: Repository m => Commit m -> TreeEntry m -> m (PinnedEntry m)Source
Constructors
Reference | |
Fields
|
referenceToOid :: Repository m => Maybe Text -> Maybe (Reference m) -> m (Maybe (CommitOid m))Source
resolveReferenceTree :: Repository m => Text -> m (Maybe (Tree m))Source
data GitException Source
There is a separate GitException
for each possible failure when
interacting with the Git repository.
Constructors
data ModificationKind Source
Constructors
Unchanged | |
Modified | |
Added | |
Deleted | |
TypeChanged |
data MergeStatus Source
Constructors
Instances
data MergeResult m Source
Constructors
MergeSuccess | |
Fields
| |
MergeConflicted | |
Fields
|
Instances
Repository m => Show (MergeResult m) |
copyConflict :: (Repository m, MonadGit m, Repository n, MonadGit n) => MergeResult m -> n (MergeResult n)Source
allMissingObjects :: Repository m => [ObjectOid m] -> m [ObjectOid m]Source
Given a list of objects (commit and top-level trees) return by
missingObjects
, expand it to include all subtrees and blobs as well.
Ordering is preserved.
withNewRepository :: (Repository (t m), MonadGit (t m), MonadBaseControl IO m, MonadIO m, MonadTrans t) => RepositoryFactory t m c -> FilePath -> t m a -> m aSource
withNewRepository' :: (Repository (t m), MonadGit (t m), MonadBaseControl IO m, MonadIO m, MonadTrans t) => RepositoryFactory t m c -> FilePath -> t m a -> m aSource