-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | API library for working with Git repositories -- @package gitlib @version 3.1.1 module Git.Utils -- | 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 module Git.Types type RawFilePath = ByteString data RepositoryFacts RepositoryFacts :: !Bool -> RepositoryFacts hasSymbolicReferences :: RepositoryFacts -> !Bool type RefName = Text type CommitAuthor = Text type CommitEmail = Text type CommitMessage = Text type TreeFilePath = RawFilePath -- | 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, MonadThrow m, IsOid (Oid r), Show (Oid r), Eq (Oid r), Ord (Oid r)) => MonadGit r m | m -> r where type family Oid r :: * data family Tree r :: * data family Options r :: * facts :: MonadGit r m => m RepositoryFacts parseOid :: MonadGit r m => Text -> m (Oid r) getRepository :: MonadGit r m => m r closeRepository :: MonadGit r m => m () deleteRepository :: MonadGit r m => m () createReference :: MonadGit r m => RefName -> RefTarget r -> m () lookupReference :: MonadGit r m => RefName -> m (Maybe (RefTarget r)) updateReference :: MonadGit r m => RefName -> RefTarget r -> m () deleteReference :: MonadGit r m => RefName -> m () sourceReferences :: MonadGit r m => Producer m RefName lookupObject :: MonadGit r m => Oid r -> m (Object r m) existsObject :: MonadGit r m => Oid r -> m Bool sourceObjects :: MonadGit r m => Maybe (CommitOid r) -> CommitOid r -> Bool -> Producer m (ObjectOid r) lookupCommit :: MonadGit r m => CommitOid r -> m (Commit r) lookupTree :: MonadGit r m => TreeOid r -> m (Tree r) lookupBlob :: MonadGit r m => BlobOid r -> m (Blob r m) lookupTag :: MonadGit r m => TagOid r -> m (Tag r) readIndex :: MonadGit r m => TreeT r m () writeIndex :: MonadGit r m => TreeT r m () newTreeBuilder :: MonadGit r m => Maybe (Tree r) -> m (TreeBuilder r m) treeOid :: MonadGit r m => Tree r -> m (TreeOid r) treeEntry :: MonadGit r m => Tree r -> TreeFilePath -> m (Maybe (TreeEntry r)) sourceTreeEntries :: MonadGit r m => Tree r -> Producer m (TreeFilePath, TreeEntry r) diffContentsWithTree :: MonadGit r m => Source m (Either TreeFilePath ByteString) -> Tree r -> Producer m ByteString hashContents :: MonadGit r m => BlobContents m -> m (BlobOid r) createBlob :: MonadGit r m => BlobContents m -> m (BlobOid r) createCommit :: MonadGit r m => [CommitOid r] -> TreeOid r -> Signature -> Signature -> CommitMessage -> Maybe RefName -> m (Commit r) createTag :: MonadGit r m => CommitOid r -> Signature -> CommitMessage -> Text -> m (Tag r) data RepositoryOptions RepositoryOptions :: !FilePath -> !(Maybe FilePath) -> !Bool -> !Bool -> RepositoryOptions repoPath :: RepositoryOptions -> !FilePath repoWorkingDir :: RepositoryOptions -> !(Maybe FilePath) repoIsBare :: RepositoryOptions -> !Bool repoAutoCreate :: RepositoryOptions -> !Bool defaultRepositoryOptions :: RepositoryOptions data RepositoryFactory n m r RepositoryFactory :: (RepositoryOptions -> m r) -> (forall a. r -> n a -> m a) -> RepositoryFactory n m r openRepository :: RepositoryFactory n m r -> RepositoryOptions -> m r runRepository :: RepositoryFactory n m r -> forall a. r -> n a -> m a class IsOid o where renderOid = renderObjOid . Tagged renderObjOid = renderOid . untag renderOid :: IsOid o => o -> Text renderObjOid :: IsOid o => Tagged a o -> Text type BlobOid r = Tagged r (Oid r) type TreeOid r = Tagged (Tree r) (Oid r) type CommitOid r = Tagged (Commit r) (Oid r) type TagOid r = Tagged (Tag r) (Oid r) data ObjectOid r BlobObjOid :: !(BlobOid r) -> ObjectOid r TreeObjOid :: !(TreeOid r) -> ObjectOid r CommitObjOid :: !(CommitOid r) -> ObjectOid r TagObjOid :: !(TagOid r) -> ObjectOid r parseObjOid :: MonadGit r m => forall o. Text -> m (Tagged o (Oid r)) copyOid :: (MonadGit r m, MonadGit s n) => Oid r -> n (Oid s) newtype SHA SHA :: ByteString -> SHA getSHA :: SHA -> ByteString shaToText :: SHA -> Text textToSha :: Monad m => Text -> m SHA data Blob r m Blob :: !(BlobOid r) -> !(BlobContents m) -> Blob r m blobOid :: Blob r m -> !(BlobOid r) blobContents :: Blob r m -> !(BlobContents m) type ByteSource m = Source m ByteString data BlobContents m BlobString :: !ByteString -> BlobContents m BlobStringLazy :: !ByteString -> BlobContents m BlobStream :: !(ByteSource m) -> BlobContents m BlobSizedStream :: !(ByteSource m) -> !Int -> BlobContents m data BlobKind PlainBlob :: BlobKind ExecutableBlob :: BlobKind SymlinkBlob :: BlobKind newtype TreeT r m a TreeT :: StateT (TreeBuilder r m) m a -> TreeT r m a runTreeT :: TreeT r m a -> StateT (TreeBuilder r m) m a data TreeEntry r BlobEntry :: !(BlobOid r) -> !BlobKind -> TreeEntry r blobEntryOid :: TreeEntry r -> !(BlobOid r) blobEntryKind :: TreeEntry r -> !BlobKind TreeEntry :: !(TreeOid r) -> TreeEntry r treeEntryOid :: TreeEntry r -> !(TreeOid r) CommitEntry :: !(CommitOid r) -> TreeEntry r commitEntryOid :: TreeEntry r -> !(CommitOid r) treeEntryToOid :: TreeEntry r -> Oid r data TreeBuilder r m TreeBuilder :: Maybe (TreeOid r) -> HashMap TreeFilePath (TreeBuilder r m) -> (Maybe (Tree r) -> m (TreeBuilder r m)) -> (TreeBuilder r m -> m (ModifiedBuilder r m, TreeOid r)) -> (TreeFilePath -> m (Maybe (TreeEntry r))) -> m Int -> (TreeBuilder r m -> TreeFilePath -> TreeEntry r -> m (ModifiedBuilder r m)) -> (TreeBuilder r m -> TreeFilePath -> m (ModifiedBuilder r m)) -> TreeBuilder r m mtbBaseTreeOid :: TreeBuilder r m -> Maybe (TreeOid r) mtbPendingUpdates :: TreeBuilder r m -> HashMap TreeFilePath (TreeBuilder r m) mtbNewBuilder :: TreeBuilder r m -> Maybe (Tree r) -> m (TreeBuilder r m) mtbWriteContents :: TreeBuilder r m -> TreeBuilder r m -> m (ModifiedBuilder r m, TreeOid r) mtbLookupEntry :: TreeBuilder r m -> TreeFilePath -> m (Maybe (TreeEntry r)) mtbEntryCount :: TreeBuilder r m -> m Int mtbPutEntry :: TreeBuilder r m -> TreeBuilder r m -> TreeFilePath -> TreeEntry r -> m (ModifiedBuilder r m) mtbDropEntry :: TreeBuilder r m -> TreeBuilder r m -> TreeFilePath -> m (ModifiedBuilder r m) data ModifiedBuilder r m ModifiedBuilder :: (TreeBuilder r m) -> ModifiedBuilder r m BuilderUnchanged :: (TreeBuilder r m) -> ModifiedBuilder r m fromBuilderMod :: ModifiedBuilder r m -> TreeBuilder r m data Commit r Commit :: !(CommitOid r) -> ![CommitOid r] -> !(TreeOid r) -> !Signature -> !Signature -> !CommitMessage -> !Text -> Commit r commitOid :: Commit r -> !(CommitOid r) commitParents :: Commit r -> ![CommitOid r] commitTree :: Commit r -> !(TreeOid r) commitAuthor :: Commit r -> !Signature commitCommitter :: Commit r -> !Signature commitLog :: Commit r -> !CommitMessage commitEncoding :: Commit r -> !Text sourceCommitParents :: MonadGit r m => Commit r -> Producer m (Commit r) lookupCommitParents :: MonadGit r m => Commit r -> m [Commit r] data Signature Signature :: !CommitAuthor -> !CommitEmail -> !ZonedTime -> Signature signatureName :: Signature -> !CommitAuthor signatureEmail :: Signature -> !CommitEmail signatureWhen :: Signature -> !ZonedTime defaultSignature :: Signature data Tag r Tag :: !(TagOid r) -> !(CommitOid r) -> Tag r tagOid :: Tag r -> !(TagOid r) tagCommit :: Tag r -> !(CommitOid r) data Object r m BlobObj :: !(Blob r m) -> Object r m TreeObj :: !(Tree r) -> Object r m CommitObj :: !(Commit r) -> Object r m TagObj :: !(Tag r) -> Object r m objectOid :: MonadGit r m => Object r m -> m (Oid r) loadObject :: MonadGit r m => ObjectOid r -> m (Object r m) objectToObjOid :: MonadGit r m => Object r m -> m (ObjectOid r) untagObjOid :: ObjectOid r -> Oid r data RefTarget (r :: *) RefObj :: !(Oid r) -> RefTarget RefSymbolic :: !RefName -> RefTarget commitRefTarget :: Commit r -> RefTarget r 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 mergeStatus :: ModificationKind -> ModificationKind -> MergeStatus data MergeResult r MergeSuccess :: CommitOid r -> MergeResult r mergeCommit :: MergeResult r -> CommitOid r MergeConflicted :: CommitOid r -> CommitOid r -> CommitOid r -> Map TreeFilePath (ModificationKind, ModificationKind) -> MergeResult r mergeCommit :: MergeResult r -> CommitOid r mergeHeadLeft :: MergeResult r -> CommitOid r mergeHeadRight :: MergeResult r -> CommitOid r mergeConflicts :: MergeResult r -> Map TreeFilePath (ModificationKind, ModificationKind) copyMergeResult :: (MonadGit r m, IsOid (Oid s)) => MergeResult s -> m (MergeResult r) -- | 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 :: Text -> GitException BlobEmptyCreateFailed :: GitException BlobEncodingUnknown :: Text -> GitException BlobLookupFailed :: GitException DiffBlobFailed :: Text -> GitException DiffPrintToPatchFailed :: Text -> GitException DiffTreeToIndexFailed :: Text -> GitException IndexAddFailed :: TreeFilePath -> Text -> GitException IndexCreateFailed :: Text -> GitException PathEncodingError :: Text -> GitException PushNotFastForward :: Text -> GitException TagLookupFailed :: Text -> GitException TranslationException :: Text -> GitException TreeCreateFailed :: Text -> GitException TreeBuilderCreateFailed :: GitException TreeBuilderInsertFailed :: TreeFilePath -> GitException TreeBuilderRemoveFailed :: TreeFilePath -> GitException TreeBuilderWriteFailed :: Text -> GitException TreeLookupFailed :: GitException TreeCannotTraverseBlob :: GitException TreeCannotTraverseCommit :: GitException TreeEntryLookupFailed :: TreeFilePath -> GitException TreeUpdateFailed :: GitException TreeWalkFailed :: Text -> GitException TreeEmptyCreateFailed :: GitException CommitCreateFailed :: GitException CommitLookupFailed :: Text -> GitException ReferenceCreateFailed :: RefName -> GitException ReferenceDeleteFailed :: RefName -> GitException RefCannotCreateFromPartialOid :: GitException ReferenceListingFailed :: Text -> GitException ReferenceLookupFailed :: RefName -> GitException ObjectLookupFailed :: Text -> Int -> GitException ObjectRefRequiresFullOid :: GitException OidCopyFailed :: GitException OidParseFailed :: Text -> GitException QuotaHardLimitExceeded :: Int -> Int -> GitException instance Typeable GitException instance Show RepositoryFacts instance Eq SHA instance Ord SHA instance Read SHA instance Show BlobKind instance Eq BlobKind instance Enum BlobKind 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 GitException instance Show GitException instance Exception GitException instance Monoid (ModifiedBuilder r m) instance Semigroup (ModifiedBuilder r m) instance Eq (BlobContents m) instance Hashable SHA instance Show SHA instance IsOid SHA module Git.Tree.Builder data TreeT r m a data TreeBuilder r m TreeBuilder :: Maybe (TreeOid r) -> HashMap TreeFilePath (TreeBuilder r m) -> (Maybe (Tree r) -> m (TreeBuilder r m)) -> (TreeBuilder r m -> m (ModifiedBuilder r m, TreeOid r)) -> (TreeFilePath -> m (Maybe (TreeEntry r))) -> m Int -> (TreeBuilder r m -> TreeFilePath -> TreeEntry r -> m (ModifiedBuilder r m)) -> (TreeBuilder r m -> TreeFilePath -> m (ModifiedBuilder r m)) -> TreeBuilder r m mtbBaseTreeOid :: TreeBuilder r m -> Maybe (TreeOid r) mtbPendingUpdates :: TreeBuilder r m -> HashMap TreeFilePath (TreeBuilder r m) mtbNewBuilder :: TreeBuilder r m -> Maybe (Tree r) -> m (TreeBuilder r m) mtbWriteContents :: TreeBuilder r m -> TreeBuilder r m -> m (ModifiedBuilder r m, TreeOid r) mtbLookupEntry :: TreeBuilder r m -> TreeFilePath -> m (Maybe (TreeEntry r)) mtbEntryCount :: TreeBuilder r m -> m Int mtbPutEntry :: TreeBuilder r m -> TreeBuilder r m -> TreeFilePath -> TreeEntry r -> m (ModifiedBuilder r m) mtbDropEntry :: TreeBuilder r m -> TreeBuilder r m -> TreeFilePath -> m (ModifiedBuilder r m) data ModifiedBuilder r m ModifiedBuilder :: (TreeBuilder r m) -> ModifiedBuilder r m BuilderUnchanged :: (TreeBuilder r m) -> ModifiedBuilder r m createTree :: MonadGit r m => TreeT r m a -> m (TreeOid r) withNewTree :: MonadGit r m => TreeT r m a -> m (a, TreeOid r) mutateTree :: MonadGit r m => Tree r -> TreeT r m a -> m (TreeOid r) mutateTreeOid :: MonadGit r m => TreeOid r -> TreeT r m a -> m (TreeOid r) currentTree :: MonadGit r m => TreeT r m (Tree r) currentTreeOid :: MonadGit r m => TreeT r m (TreeOid r) withTree :: MonadGit r m => Tree r -> TreeT r m a -> m (a, TreeOid r) withTreeOid :: MonadGit r m => TreeOid r -> TreeT r m a -> m (a, TreeOid r) dropEntry :: MonadGit r m => TreeFilePath -> TreeT r m () getEntry :: MonadGit r m => TreeFilePath -> TreeT r m (Maybe (TreeEntry r)) putBlob :: MonadGit r m => TreeFilePath -> BlobOid r -> TreeT r m () putBlob' :: MonadGit r m => TreeFilePath -> BlobOid r -> BlobKind -> TreeT r m () putCommit :: MonadGit r m => TreeFilePath -> CommitOid r -> TreeT r m () putEntry :: MonadGit r m => TreeFilePath -> TreeEntry r -> TreeT r m () putTree :: MonadGit r m => TreeFilePath -> TreeOid r -> TreeT r m () treeEntry :: MonadGit r m => Tree r -> TreeFilePath -> m (Maybe (TreeEntry r)) data ModifyTreeResult r TreeEntryNotFound :: ModifyTreeResult r TreeEntryDeleted :: ModifyTreeResult r TreeEntryPersistent :: (TreeEntry r) -> ModifyTreeResult r TreeEntryMutated :: (TreeEntry r) -> ModifyTreeResult r fromModifyTreeResult :: ModifyTreeResult r -> Maybe (TreeEntry r) toModifyTreeResult :: (TreeEntry r -> ModifyTreeResult r) -> Maybe (TreeEntry r) -> ModifyTreeResult r emptyTreeId :: Text instance Eq BuilderAction instance Show BuilderAction instance MonadIO m => MonadIO (TreeT r m) instance MonadTrans (TreeT r) instance MonadFix m => MonadFix (TreeT r m) instance MonadPlus m => MonadPlus (TreeT r m) instance (Functor m, MonadPlus m) => Alternative (TreeT r m) instance (Functor m, Monad m) => Applicative (TreeT r m) instance Monad m => Monad (TreeT r m) instance Functor m => Functor (TreeT r m) module Git.Repository withNewRepository :: (MonadGit r n, MonadBaseControl IO n, MonadIO m) => RepositoryFactory n m r -> FilePath -> n a -> m a withNewRepository' :: (MonadGit r n, MonadBaseControl IO n, MonadBaseControl IO m, MonadIO m) => RepositoryFactory n m r -> FilePath -> n a -> m a withRepository' :: (MonadGit r n, MonadBaseControl IO n, MonadIO m) => RepositoryFactory n m r -> RepositoryOptions -> n a -> m a withRepository :: (MonadGit r n, MonadBaseControl IO n, MonadIO m) => RepositoryFactory n m r -> FilePath -> n a -> m a module Git.Reference listReferences :: MonadGit r m => m [RefName] resolveReference :: MonadGit r m => RefName -> m (Maybe (Oid r)) referenceToOid :: MonadGit r m => RefTarget r -> m (Maybe (Oid r)) module Git.Object listObjects :: MonadGit r m => Maybe (CommitOid r) -> CommitOid r -> Bool -> m [ObjectOid r] traverseObjects :: MonadGit r m => (ObjectOid r -> m a) -> CommitOid r -> m [a] traverseObjects_ :: MonadGit r m => (ObjectOid r -> m ()) -> CommitOid r -> m () -- | Given a list of objects (commit and top-level trees) return by -- listObjects, expand it to include all subtrees and blobs as -- well. Ordering is preserved. expandTreeObjects :: MonadGit r m => Conduit (ObjectOid r) m (ObjectOid r) listAllObjects :: MonadGit r m => Maybe (CommitOid r) -> CommitOid r -> m [ObjectOid r] module Git.Blob createBlobUtf8 :: MonadGit r m => Text -> m (BlobOid r) catBlob :: MonadGit r m => BlobOid r -> m ByteString catBlobLazy :: MonadGit r m => BlobOid r -> m ByteString catBlobUtf8 :: MonadGit r m => BlobOid r -> m Text blobContentsToByteString :: MonadGit r m => BlobContents m -> m ByteString blobToByteString :: MonadGit r m => Blob r m -> m ByteString blobContentsToLazyByteString :: MonadGit r m => BlobContents m -> m ByteString blobToLazyByteString :: MonadGit r m => Blob r m -> m ByteString writeBlob :: (MonadGit r m, MonadIO m, MonadResource m) => FilePath -> BlobContents m -> m () treeBlobEntries :: MonadGit r m => Tree r -> m [(TreeFilePath, BlobOid r, BlobKind)] sourceTreeBlobEntries :: MonadGit r m => Tree r -> Producer m (TreeFilePath, BlobOid r, BlobKind) copyBlob :: (MonadGit r m, MonadGit s (t m), MonadTrans t) => BlobOid r -> HashSet Text -> t m (BlobOid s, HashSet Text) module Git.Tree listTreeEntries :: MonadGit r m => Tree r -> m [(TreeFilePath, TreeEntry r)] copyTreeEntry :: (MonadGit r m, MonadGit s (t m), MonadTrans t) => TreeEntry r -> HashSet Text -> t m (TreeEntry s, HashSet Text) copyTree :: (MonadGit r m, MonadGit s (t m), MonadTrans t) => TreeOid r -> HashSet Text -> t m (TreeOid s, HashSet Text) module Git.Commit commitTreeEntry :: MonadGit r m => Commit r -> TreeFilePath -> m (Maybe (TreeEntry r)) copyCommitOid :: (IsOid (Oid r), MonadGit s n) => CommitOid r -> n (CommitOid s) copyCommit :: (MonadGit r m, MonadGit s (t m), MonadTrans t) => CommitOid r -> Maybe RefName -> HashSet Text -> t m (CommitOid s, HashSet Text) listCommits :: MonadGit r m => Maybe (CommitOid r) -> CommitOid r -> m [CommitOid r] traverseCommits :: MonadGit r m => (CommitOid r -> m a) -> CommitOid r -> m [a] traverseCommits_ :: MonadGit r m => (CommitOid r -> m ()) -> CommitOid r -> m () module Git.Commit.Push -- | Fast-forward push a reference between repositories using a recursive -- copy. This can be extremely slow, but always works no matter which two -- backends are being used. It should be considered a matter of last -- resort, or for objects sets that are known to be small. pushCommit :: (MonadGit r m, MonadGit s (t m), MonadTrans t) => CommitOid r -> Text -> t m (CommitOid s) copyRepository :: (MonadGit r m, MonadIO m, MonadBaseControl IO m, MonadGit s (t m), MonadTrans t, MonadBaseControl IO (t m)) => RepositoryFactory (t m) m s -> Maybe (CommitOid r) -> Text -> FilePath -> Bool -> m () module Git.Working checkoutFiles :: (MonadGit r m, MonadBaseControl IO m, MonadIO m, MonadResource m) => FilePath -> Tree r -> (TreeFilePath -> Either String FilePath) -> Bool -> m () -- | Interface for working with Git repositories. module Git module Git.Tree.Builder.Pure type EntryHashMap r = HashMap TreeFilePath (TreeEntry r) -- | Create a new, empty tree. -- -- Since empty trees cannot exist in Git, attempting to write out an -- empty tree is a no-op. newPureTreeBuilder :: MonadGit r m => (Tree r -> m (EntryHashMap r)) -> (EntryHashMap r -> m (TreeOid r)) -> Maybe (Tree r) -> m (TreeBuilder r m) module Git.Tree.Working data FileEntry m FileEntry :: UTCTime -> BlobOid m -> BlobKind -> BlobOid m -> FileEntry m fileModTime :: FileEntry m -> UTCTime fileBlobOid :: FileEntry m -> BlobOid m fileBlobKind :: FileEntry m -> BlobKind fileChecksum :: FileEntry m -> BlobOid m type FileTree m = HashMap TreeFilePath (FileEntry m) readFileTree :: (MonadBaseControl IO m, MonadIO m, MonadGit r m) => RefName -> FilePath -> Bool -> m (FileTree r) readFileTree' :: (MonadBaseControl IO m, MonadIO m, MonadGit r m) => Tree r -> FilePath -> Bool -> m (FileTree r) readModTime :: (MonadIO m, MonadGit r m) => FilePath -> Bool -> FilePath -> BlobOid r -> BlobKind -> m (Maybe (FileEntry r))