-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | API library for working with Git repositories -- -- gitlib is a high-level, lazy and conduit-aware set of -- abstractions for programming with Git types. Several different -- backends are available, including one for the libgit2 C library -- (http://libgit2.github.com) (see gitlib-libgit2). The -- aim is both type-safety and convenience of use for Haskell users, -- combined with high performance and minimal memory footprint by taking -- advantage of Haskell's laziness and the conduit library's -- deterministic resource cleanup. -- -- For further information, as well as typical use cases, see -- Git.Tutorial. @package gitlib @version 1.3.1 -- | This module provides a brief introductory tutorial in the -- "Introduction" section followed by a lengthy discussion of the -- library's design and idioms. module Git.Tutorial -- | Interface for working with Git repositories. module Git data RepositoryFacts RepositoryFacts :: !Bool -> RepositoryFacts hasSymbolicReferences :: RepositoryFacts -> !Bool -- | Repository is the central point of contact between user code -- and Git data objects. Every object must belong to some repository. class (Applicative m, Monad m, Failure GitException m, IsOid (Oid m)) => Repository m where type family Oid m :: * data family Tree m :: * data family Options m :: * parseObjOid sha = Tagged <$> parseOid sha createReference_ = (void .) . createReference updateReference_ = (void .) . updateReference allReferences = catMaybes <$> (mapM lookupReference =<< allReferenceNames) allReferenceNames = map referenceName <$> allReferences resolveReference name = lookupReference name >>= referenceToRef (Just name) traverseObjects_ = (void .) . traverseObjects traverseCommits_ = (void .) . traverseCommits traverseEntries_ = (void .) . traverseEntries buildPackFile _ _ = failure (BackendError "Backend does not support building pack files") buildPackIndex _ _ = failure (BackendError "Backend does not support building pack indexes") writePackFile _ = failure (BackendError "Backend does not support writing pack files") facts :: Repository m => m RepositoryFacts parseOid :: Repository m => Text -> m (Oid m) parseObjOid :: Repository m => Text -> m (Tagged o (Oid m)) createReference :: Repository m => Text -> RefTarget m (Commit m) -> m (Reference m (Commit m)) createReference_ :: Repository m => Text -> RefTarget m (Commit m) -> m () lookupReference :: Repository m => Text -> m (Maybe (Reference m (Commit m))) updateReference :: Repository m => Text -> RefTarget m (Commit m) -> m (Reference m (Commit m)) updateReference_ :: Repository m => Text -> RefTarget m (Commit m) -> m () deleteReference :: Repository m => Text -> m () allReferences :: Repository m => m [Reference m (Commit m)] allReferenceNames :: Repository m => m [Text] resolveReference :: Repository m => Text -> m (Maybe (CommitRef m)) lookupCommit :: Repository m => CommitOid m -> m (Commit m) lookupTree :: Repository m => TreeOid m -> m (Tree m) lookupBlob :: Repository m => BlobOid m -> m (Blob m) lookupTag :: Repository m => TagOid m -> m (Tag m) lookupObject :: Repository m => Text -> m (Object m) existsObject :: Repository m => Oid m -> m Bool traverseObjects :: Repository m => (Object m -> m a) -> Maybe (CommitName m) -> m [a] traverseObjects_ :: Repository m => (Object m -> m ()) -> Maybe (CommitName m) -> m () pushCommit :: (Repository m, MonadTrans t, MonadGit m, MonadGit (t m), Repository m, Repository (t m)) => CommitName m -> Maybe Text -> Text -> t m (CommitRef (t m)) traverseCommits :: Repository m => (CommitRef m -> m a) -> CommitName m -> m [a] traverseCommits_ :: Repository m => (CommitRef m -> m ()) -> CommitName m -> m () missingObjects :: Repository m => Maybe (CommitName m) -> CommitName m -> m [Object m] newTreeBuilder :: Repository m => Maybe (Tree m) -> m (TreeBuilder m) treeOid :: Repository m => Tree m -> TreeOid m getTreeEntry :: Repository m => Tree m -> FilePath -> m (Maybe (TreeEntry m)) traverseEntries :: Repository m => (FilePath -> TreeEntry m -> m a) -> Tree m -> m [a] traverseEntries_ :: Repository m => (FilePath -> TreeEntry m -> m a) -> Tree m -> m () hashContents :: Repository m => BlobContents m -> m (BlobOid m) createBlob :: Repository m => BlobContents m -> m (BlobOid m) createCommit :: Repository m => [CommitRef m] -> TreeRef m -> Signature -> Signature -> Text -> Maybe Text -> m (Commit m) createTag :: Repository m => CommitOid m -> Signature -> Text -> Text -> m (Tag m) deleteRepository :: Repository m => m () buildPackFile :: Repository m => FilePath -> [Either (CommitOid m) (TreeOid m)] -> m FilePath buildPackIndex :: Repository m => FilePath -> ByteString -> m (Text, FilePath, FilePath) writePackFile :: Repository m => FilePath -> m () remoteFetch :: Repository m => Text -> Text -> m () data RepositoryFactory t m c RepositoryFactory :: (RepositoryOptions -> m c) -> (forall a. c -> t m a -> m a) -> (c -> m ()) -> t m c -> !RepositoryOptions -> m () -> m () -> RepositoryFactory t m c openRepository :: RepositoryFactory t m c -> RepositoryOptions -> m c runRepository :: RepositoryFactory t m c -> forall a. c -> t m a -> m a closeRepository :: RepositoryFactory t m c -> c -> m () getRepository :: RepositoryFactory t m c -> t m c defaultOptions :: RepositoryFactory t m c -> !RepositoryOptions startupBackend :: RepositoryFactory t m c -> m () shutdownBackend :: RepositoryFactory t m c -> m () data RepositoryOptions RepositoryOptions :: !FilePath -> !Bool -> !Bool -> RepositoryOptions repoPath :: RepositoryOptions -> !FilePath repoIsBare :: RepositoryOptions -> !Bool repoAutoCreate :: RepositoryOptions -> !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 = renderObjOid . Tagged renderObjOid = renderOid . untag renderOid :: IsOid o => o -> Text renderObjOid :: IsOid o => Tagged a o -> Text copyOid :: (Repository m, Repository n) => Oid m -> n (Oid n) data Object m BlobObj :: !(BlobRef m) -> Object m TreeObj :: !(TreeRef m) -> Object m CommitObj :: !(CommitRef m) -> Object m TagObj :: !(TagRef m) -> Object m data ObjRef m a ByOid :: !(Tagged a (Oid m)) -> ObjRef m a Known :: !a -> ObjRef m a objectOid :: Repository m => Object m -> m (Oid m) newtype SHA SHA :: ByteString -> SHA textToSha :: Monad m => Text -> m SHA shaToText :: SHA -> Text data Blob m Blob :: !(BlobOid m) -> !(BlobContents m) -> Blob m blobOid :: Blob m -> !(BlobOid m) blobContents :: Blob m -> !(BlobContents m) type BlobOid m = Tagged (Blob m) (Oid m) data BlobContents m BlobString :: !ByteString -> BlobContents m BlobStream :: !(ByteSource m) -> BlobContents m BlobSizedStream :: !(ByteSource m) -> !Int -> BlobContents m data BlobKind PlainBlob :: BlobKind ExecutableBlob :: BlobKind SymlinkBlob :: BlobKind UnknownBlob :: BlobKind type ByteSource m = Producer m ByteString type BlobRef m = ObjRef m (Blob m) blobEntry :: Repository m => BlobOid m -> BlobKind -> TreeEntry m blobRefOid :: Repository m => BlobRef m -> BlobOid m resolveBlobRef :: Repository m => BlobRef m -> m (Blob 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) => BlobRef 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 :: Maybe (TreeRef m) -> HashMap Text (TreeBuilder m) -> (Maybe (Tree m) -> m (TreeBuilder m)) -> (TreeBuilder m -> m (ModifiedBuilder m, TreeRef m)) -> (Text -> m (Maybe (TreeEntry m))) -> m Int -> (TreeBuilder m -> Text -> TreeEntry m -> m (ModifiedBuilder m)) -> (TreeBuilder m -> Text -> m (ModifiedBuilder m)) -> TreeBuilder m mtbBaseTreeRef :: TreeBuilder m -> Maybe (TreeRef m) mtbPendingUpdates :: TreeBuilder m -> HashMap Text (TreeBuilder m) mtbNewBuilder :: TreeBuilder m -> Maybe (Tree m) -> m (TreeBuilder m) mtbWriteContents :: TreeBuilder m -> TreeBuilder m -> m (ModifiedBuilder m, TreeRef m) mtbLookupEntry :: TreeBuilder m -> Text -> m (Maybe (TreeEntry m)) mtbEntryCount :: TreeBuilder m -> m Int mtbPutEntry :: TreeBuilder m -> TreeBuilder m -> Text -> TreeEntry m -> m (ModifiedBuilder m) mtbDropEntry :: TreeBuilder m -> TreeBuilder m -> Text -> m (ModifiedBuilder m) data ModifiedBuilder m ModifiedBuilder :: (TreeBuilder m) -> ModifiedBuilder m BuilderUnchanged :: (TreeBuilder m) -> ModifiedBuilder m data TreeEntry m BlobEntry :: !(BlobOid m) -> !BlobKind -> TreeEntry m blobEntryOid :: TreeEntry m -> !(BlobOid m) blobEntryKind :: TreeEntry m -> !BlobKind TreeEntry :: !(TreeOid m) -> TreeEntry m treeEntryOid :: TreeEntry m -> !(TreeOid m) CommitEntry :: !(CommitOid m) -> TreeEntry m commitEntryOid :: TreeEntry m -> !(CommitOid m) type TreeOid m = Tagged (Tree m) (Oid m) type TreeRef m = ObjRef m (Tree m) createTree :: Repository m => TreeT m a -> m (TreeRef m) withNewTree :: Repository m => TreeT m a -> m (a, TreeRef m) mutateTree :: Repository m => Tree m -> TreeT m a -> m (TreeRef m) mutateTreeRef :: Repository m => TreeRef m -> TreeT m a -> m (TreeRef m) currentTree :: Repository m => TreeT m (Tree m) currentTreeRef :: Repository m => TreeT m (TreeRef m) withTree :: Repository m => Tree m -> TreeT m a -> m (a, TreeRef m) withTreeRef :: Repository m => TreeRef m -> TreeT m a -> m (a, TreeRef 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 () resolveTreeRef :: Repository m => TreeRef m -> m (Tree m) treeEntry :: Repository m => Tree m -> TreeEntry m getTreeEntryOid :: Repository m => TreeEntry m -> Oid m -- | A Tree is anything that is treeish. treeRef :: Tree m -> TreeRef m treeRefOid :: Repository m => TreeRef m -> TreeOid m data ModifyTreeResult m TreeEntryNotFound :: ModifyTreeResult m TreeEntryDeleted :: ModifyTreeResult m TreeEntryPersistent :: (TreeEntry m) -> ModifyTreeResult m TreeEntryMutated :: (TreeEntry m) -> 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) => TreeRef m -> HashSet Text -> t m (TreeRef (t m), HashSet Text) data Commit m Commit :: !(CommitOid m) -> ![CommitRef m] -> !(TreeRef m) -> !Signature -> !Signature -> !Text -> !Text -> Commit m commitOid :: Commit m -> !(CommitOid m) commitParents :: Commit m -> ![CommitRef m] commitTree :: Commit m -> !(TreeRef m) commitAuthor :: Commit m -> !Signature commitCommitter :: Commit m -> !Signature commitLog :: Commit m -> !Text commitEncoding :: Commit m -> !Text type CommitOid m = Tagged (Commit m) (Oid m) data CommitName m CommitObjectId :: !(CommitOid m) -> CommitName m CommitRefName :: !Text -> CommitName m CommitReference :: !(Reference m (Commit m)) -> CommitName m type CommitRef m = ObjRef m (Commit m) data Signature Signature :: !Text -> !Text -> !ZonedTime -> Signature signatureName :: Signature -> !Text signatureEmail :: Signature -> !Text signatureWhen :: Signature -> !ZonedTime commitEntry :: Repository m => Commit m -> TreeEntry m commitNameToRef :: Repository m => CommitName m -> m (Maybe (CommitRef m)) commitRef :: Commit m -> CommitRef m commitRefOid :: Repository m => CommitRef m -> CommitOid m commitRefTarget :: Commit c -> RefTarget m (Commit c) 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 renderCommitName :: Repository m => CommitName m -> Text resolveCommitRef :: Repository m => CommitRef m -> m (Commit m) commitTreeEntry :: Repository m => Commit m -> FilePath -> m (Maybe (TreeEntry m)) copyCommit :: (Repository m, Repository (t m), MonadTrans t) => CommitRef m -> Maybe Text -> HashSet Text -> t m (CommitRef (t m), HashSet Text) -- | Fast-forward push a reference between repositories using a recursive -- copy. This can be extremely slow, but always works. genericPushCommit :: (Repository m, Repository (t m), MonadTrans t) => CommitName m -> Text -> t m (CommitRef (t m)) data PinnedEntry m PinnedEntry :: Oid m -> Commit m -> TreeEntry m -> PinnedEntry m pinnedOid :: PinnedEntry m -> Oid m pinnedCommit :: PinnedEntry m -> Commit m pinnedEntry :: PinnedEntry m -> 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 :: !(TagOid m) -> !(CommitRef m) -> Tag m tagOid :: Tag m -> !(TagOid m) tagCommit :: Tag m -> !(CommitRef m) type TagOid m = Tagged (Tag m) (Oid m) type TagRef m = ObjRef m (Tag m) tagRefOid :: Repository m => TagRef m -> TagOid m data RefTarget m a RefObj :: !(ObjRef m a) -> RefTarget m a RefSymbolic :: !Text -> RefTarget m a data Reference m a Reference :: !Text -> !(RefTarget m a) -> Reference m a referenceName :: Reference m a -> !Text referenceTarget :: Reference m a -> !(RefTarget m a) referenceToRef :: Repository m => Maybe Text -> Maybe (Reference m (Commit m)) -> m (Maybe (CommitRef m)) resolveReferenceTree :: Repository m => Text -> m (Maybe (Tree m)) -- | There is a separate GitException for each possible failure when -- interacting with the Git repository. data GitException BackendError :: Text -> GitException GitError :: Text -> GitException RepositoryNotExist :: GitException RepositoryInvalid :: GitException RepositoryCannotAccess :: Text -> GitException BlobCreateFailed :: GitException BlobEmptyCreateFailed :: GitException BlobEncodingUnknown :: Text -> GitException BlobLookupFailed :: GitException PushNotFastForward :: Text -> GitException TranslationException :: Text -> GitException TreeCreateFailed :: Text -> GitException TreeBuilderCreateFailed :: GitException TreeBuilderInsertFailed :: Text -> GitException TreeBuilderRemoveFailed :: Text -> GitException TreeBuilderWriteFailed :: Text -> GitException TreeLookupFailed :: GitException TreeCannotTraverseBlob :: GitException TreeCannotTraverseCommit :: GitException TreeEntryLookupFailed :: FilePath -> GitException TreeUpdateFailed :: GitException TreeWalkFailed :: GitException CommitCreateFailed :: GitException CommitLookupFailed :: Text -> GitException ReferenceCreateFailed :: GitException ReferenceDeleteFailed :: Text -> GitException RefCannotCreateFromPartialOid :: GitException ReferenceListingFailed :: GitException ReferenceLookupFailed :: Text -> GitException ObjectLookupFailed :: Text -> Int -> GitException ObjectRefRequiresFullOid :: GitException OidCopyFailed :: GitException OidParseFailed :: Text -> GitException QuotaHardLimitExceeded :: Int -> Int -> GitException data ModificationKind Unchanged :: ModificationKind Modified :: ModificationKind Added :: ModificationKind Deleted :: ModificationKind TypeChanged :: ModificationKind data MergeStatus NoConflict :: MergeStatus BothModified :: MergeStatus LeftModifiedRightDeleted :: MergeStatus LeftDeletedRightModified :: MergeStatus BothAdded :: MergeStatus LeftModifiedRightTypeChanged :: MergeStatus LeftTypeChangedRightModified :: MergeStatus LeftDeletedRightTypeChanged :: MergeStatus LeftTypeChangedRightDeleted :: MergeStatus BothTypeChanged :: MergeStatus data MergeResult m MergeSuccess :: CommitOid m -> MergeResult m mergeCommit :: MergeResult m -> CommitOid m MergeConflicted :: CommitOid m -> CommitOid m -> CommitOid m -> Map FilePath (ModificationKind, ModificationKind) -> MergeResult m mergeCommit :: MergeResult m -> CommitOid m mergeHeadLeft :: MergeResult m -> CommitOid m mergeHeadRight :: MergeResult m -> CommitOid m mergeConflicts :: MergeResult m -> Map FilePath (ModificationKind, ModificationKind) mergeStatus :: ModificationKind -> ModificationKind -> MergeStatus copyConflict :: (Repository m, MonadGit m, Repository n, MonadGit n) => MergeResult m -> n (MergeResult n) -- | 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. allMissingObjects :: Repository m => [Object m] -> m [Object 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 instance Typeable GitException instance Show RepositoryFacts instance Eq GitException instance Show GitException instance Show BlobKind instance Eq BlobKind instance Enum BlobKind instance Eq BuilderAction instance Show BuilderAction instance Show Signature instance Eq ModificationKind instance Ord ModificationKind instance Enum ModificationKind instance Show ModificationKind instance Read ModificationKind instance Eq MergeStatus instance Ord MergeStatus instance Enum MergeStatus instance Show MergeStatus instance Read MergeStatus instance Eq SHA instance Ord SHA instance Read SHA instance Default RepositoryOptions instance Monad m => Monoid (TreeBuilder m) instance Monoid (ModifiedBuilder m) instance IsOid SHA instance Hashable SHA instance Binary SHA instance Show SHA instance Repository m => Show (MergeResult m) instance Default Signature instance MonadIO m => MonadIO (TreeT m) instance MonadTrans TreeT instance MonadFix m => MonadFix (TreeT m) instance MonadPlus m => MonadPlus (TreeT m) instance (Functor m, MonadPlus m) => Alternative (TreeT m) instance (Functor m, Monad m) => Applicative (TreeT m) instance Monad m => Monad (TreeT m) instance Functor m => Functor (TreeT m) instance Eq (BlobContents m) instance Repository m => Show (CommitName m) instance Exception GitException