-- 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.2.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 :: * type family TreeKind m :: * type family Tree m :: * -> * data family Options m parseObjOid sha = Tagged <$> parseOid sha createRef_ = (void .) . createRef updateRef_ = (void .) . updateRef allRefs = catMaybes <$> (mapM lookupRef =<< allRefNames) allRefNames = map refName <$> allRefs resolveRef name = lookupRef 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)) createRef :: Repository m => Text -> RefTarget m (Commit m) -> m (Reference m (Commit m)) createRef_ :: Repository m => Text -> RefTarget m (Commit m) -> m () lookupRef :: Repository m => Text -> m (Maybe (Reference m (Commit m))) updateRef :: Repository m => Text -> RefTarget m (Commit m) -> m (Reference m (Commit m)) updateRef_ :: Repository m => Text -> RefTarget m (Commit m) -> m () deleteRef :: Repository m => Text -> m () allRefs :: Repository m => m [Reference m (Commit m)] allRefNames :: Repository m => m [Text] resolveRef :: Repository m => Text -> m (Maybe (CommitRef m)) lookupCommit :: Repository m => CommitOid m -> m (Commit m) lookupTree :: Repository m => TreeOid m -> m (RepositoryTree 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] newTree :: Repository m => m (RepositoryTree m) cloneTree :: Repository m => RepositoryTree m -> m (RepositoryTree m) traverseEntries :: Repository m => (FilePath -> TreeEntry m -> m a) -> RepositoryTree m -> m [a] traverseEntries_ :: Repository m => (FilePath -> TreeEntry m -> m a) -> RepositoryTree m -> m () writeTree :: Repository m => RepositoryTree m -> m (TreeOid m) unsafeUpdateTree :: Repository m => RepositoryTree m -> FilePath -> Bool -> (Maybe (TreeEntry m) -> ModifyTreeResult m) -> m (RepositoryTree m, Maybe (TreeEntry 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 . unTagged renderOid :: IsOid o => o -> Text renderObjOid :: IsOid o => Tagged a o -> Text copyOid :: (Repository m, MonadGit m, Repository n, MonadGit 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) 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) data TreeT t m a type RepositoryTree m = Tree m (TreeKind m) type RepositoryTreeT m a = TreeT (RepositoryTree m) m a data MutableTree type MutableTreeT m a = TreeT (Tree m MutableTree) m a data PersistentTree type PersistentTreeT m a = TreeT (Tree m PersistentTree) m a data TreeEntry m BlobEntry :: !(BlobOid m) -> !BlobKind -> TreeEntry m blobEntryOid :: TreeEntry m -> !(BlobOid m) blobEntryKind :: TreeEntry m -> !BlobKind TreeEntry :: !(TreeRef m) -> TreeEntry m treeEntryRef :: TreeEntry m -> !(TreeRef m) CommitEntry :: !(CommitOid m) -> TreeEntry m commitEntryRef :: TreeEntry m -> !(CommitOid m) type TreeOid m = Tagged (RepositoryTree m) (Oid m) type TreeRef m = ObjRef m (RepositoryTree m) createTree :: Repository m => RepositoryTreeT m a -> m (RepositoryTree m) withNewTree :: Repository m => RepositoryTreeT m a -> m (a, RepositoryTree m) mutateTree :: Repository m => RepositoryTree m -> RepositoryTreeT m a -> m (RepositoryTree m) withTree :: Repository m => RepositoryTree m -> RepositoryTreeT m a -> m (a, RepositoryTree m) unsafeMutateTree :: Repository m => Tree m MutableTree -> MutableTreeT m a -> m (Tree m MutableTree) unsafeMutateTree_ :: Repository m => Tree m MutableTree -> MutableTreeT m a -> m () unsafeWithTree :: Repository m => Tree m MutableTree -> MutableTreeT m a -> m (a, Tree m MutableTree) unsafeGetTree :: Monad m => RepositoryTreeT m (RepositoryTree m) unsafePutTree :: Monad m => RepositoryTree m -> RepositoryTreeT m () dropEntry :: Repository m => FilePath -> RepositoryTreeT m () getEntry :: Repository m => FilePath -> RepositoryTreeT m (Maybe (TreeEntry m)) getTreeEntry :: Repository m => RepositoryTree m -> FilePath -> m (Maybe (TreeEntry m)) putBlob :: Repository m => FilePath -> BlobOid m -> RepositoryTreeT m () putBlob' :: Repository m => FilePath -> BlobOid m -> BlobKind -> RepositoryTreeT m () putCommit :: Repository m => FilePath -> CommitOid m -> RepositoryTreeT m () putEntry :: Repository m => FilePath -> TreeEntry m -> RepositoryTreeT m () putTree :: Repository m => FilePath -> TreeRef m -> RepositoryTreeT m () resolveTreeRef :: Repository m => TreeRef m -> m (RepositoryTree m) treeEntry :: Repository m => RepositoryTree m -> TreeEntry m treeEntryOid :: Repository m => TreeEntry m -> m (Oid m) -- | A Tree is anything that is treeish. treeRef :: RepositoryTree m -> TreeRef m treeRefOid :: Repository m => TreeRef m -> 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 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) 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) 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 refName :: Reference m a -> !Text refTarget :: Reference m a -> !(RefTarget m a) referenceToRef :: Repository m => Maybe Text -> Maybe (Reference m (Commit m)) -> m (Maybe (CommitRef 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) instance Typeable GitException instance Show RepositoryFacts instance Eq GitException instance Show GitException 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 Default RepositoryOptions instance Repository m => Show (MergeResult m) instance Default Signature instance MonadIO m => MonadIO (TreeT t m) instance MonadTrans (TreeT t) instance MonadFix m => MonadFix (TreeT t m) instance MonadPlus m => MonadPlus (TreeT t m) instance (Functor m, MonadPlus m) => Alternative (TreeT t m) instance (Functor m, Monad m) => Applicative (TreeT t m) instance Monad m => Monad (TreeT t m) instance Functor m => Functor (TreeT t m) instance Eq (BlobContents m) instance Repository m => Show (CommitName m) instance Exception GitException