gitlib 3.1.1 → 3.1.2
raw patch · 12 files changed
+73/−80 lines, 12 filesdep +unix-compatdep +unliftiodep +unliftio-coredep −lifted-asyncdep −lifted-basedep −monad-controldep ~conduitdep ~conduit-combinatorsPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: unix-compat, unliftio, unliftio-core
Dependencies removed: lifted-async, lifted-base, monad-control
Dependency ranges changed: conduit, conduit-combinators
API changes (from Hackage documentation)
- Git.Tree.Builder: instance (Functor m, Monad m) => Applicative (TreeT r m)
- Git.Tree.Builder: instance (Functor m, MonadPlus m) => Alternative (TreeT r m)
- Git.Tree.Builder: instance Eq BuilderAction
- Git.Tree.Builder: instance Functor m => Functor (TreeT r m)
- Git.Tree.Builder: instance Monad m => Monad (TreeT r m)
- Git.Tree.Builder: instance MonadFix m => MonadFix (TreeT r m)
- Git.Tree.Builder: instance MonadIO m => MonadIO (TreeT r m)
- Git.Tree.Builder: instance MonadPlus m => MonadPlus (TreeT r m)
- Git.Tree.Builder: instance MonadTrans (TreeT r)
- Git.Tree.Builder: instance Show BuilderAction
- Git.Tree.Builder: mtbBaseTreeOid :: TreeBuilder r m -> Maybe (TreeOid r)
- Git.Tree.Builder: mtbDropEntry :: TreeBuilder r m -> TreeBuilder r m -> TreeFilePath -> m (ModifiedBuilder r m)
- Git.Tree.Builder: mtbEntryCount :: TreeBuilder r m -> m Int
- Git.Tree.Builder: mtbLookupEntry :: TreeBuilder r m -> TreeFilePath -> m (Maybe (TreeEntry r))
- Git.Tree.Builder: mtbNewBuilder :: TreeBuilder r m -> Maybe (Tree r) -> m (TreeBuilder r m)
- Git.Tree.Builder: mtbPendingUpdates :: TreeBuilder r m -> HashMap TreeFilePath (TreeBuilder r m)
- Git.Tree.Builder: mtbPutEntry :: TreeBuilder r m -> TreeBuilder r m -> TreeFilePath -> TreeEntry r -> m (ModifiedBuilder r m)
- Git.Tree.Builder: mtbWriteContents :: TreeBuilder r m -> TreeBuilder r m -> m (ModifiedBuilder r m, TreeOid r)
- Git.Tree.Working: fileBlobKind :: FileEntry m -> BlobKind
- Git.Tree.Working: fileBlobOid :: FileEntry m -> BlobOid m
- Git.Tree.Working: fileChecksum :: FileEntry m -> BlobOid m
- Git.Tree.Working: fileModTime :: FileEntry m -> UTCTime
- Git.Types: blobContents :: Blob r m -> !(BlobContents m)
- Git.Types: blobEntryKind :: TreeEntry r -> !BlobKind
- Git.Types: blobEntryOid :: TreeEntry r -> !(BlobOid r)
- Git.Types: blobOid :: Blob r m -> !(BlobOid r)
- Git.Types: commitAuthor :: Commit r -> !Signature
- Git.Types: commitCommitter :: Commit r -> !Signature
- Git.Types: commitEncoding :: Commit r -> !Text
- Git.Types: commitEntryOid :: TreeEntry r -> !(CommitOid r)
- Git.Types: commitLog :: Commit r -> !CommitMessage
- Git.Types: commitOid :: Commit r -> !(CommitOid r)
- Git.Types: commitParents :: Commit r -> ![CommitOid r]
- Git.Types: commitTree :: Commit r -> !(TreeOid r)
- Git.Types: getSHA :: SHA -> ByteString
- Git.Types: hasSymbolicReferences :: RepositoryFacts -> !Bool
- Git.Types: instance Enum BlobKind
- Git.Types: instance Enum MergeStatus
- Git.Types: instance Enum ModificationKind
- Git.Types: instance Eq (BlobContents m)
- Git.Types: instance Eq BlobKind
- Git.Types: instance Eq GitException
- Git.Types: instance Eq MergeStatus
- Git.Types: instance Eq ModificationKind
- Git.Types: instance Eq SHA
- Git.Types: instance Exception GitException
- Git.Types: instance Hashable SHA
- Git.Types: instance IsOid SHA
- Git.Types: instance Monoid (ModifiedBuilder r m)
- Git.Types: instance Ord MergeStatus
- Git.Types: instance Ord ModificationKind
- Git.Types: instance Ord SHA
- Git.Types: instance Read MergeStatus
- Git.Types: instance Read ModificationKind
- Git.Types: instance Read SHA
- Git.Types: instance Semigroup (ModifiedBuilder r m)
- Git.Types: instance Show BlobKind
- Git.Types: instance Show GitException
- Git.Types: instance Show MergeStatus
- Git.Types: instance Show ModificationKind
- Git.Types: instance Show RepositoryFacts
- Git.Types: instance Show SHA
- Git.Types: instance Show Signature
- Git.Types: instance Typeable GitException
- Git.Types: mergeCommit :: MergeResult r -> CommitOid r
- Git.Types: mergeConflicts :: MergeResult r -> Map TreeFilePath (ModificationKind, ModificationKind)
- Git.Types: mergeHeadLeft :: MergeResult r -> CommitOid r
- Git.Types: mergeHeadRight :: MergeResult r -> CommitOid r
- Git.Types: mtbBaseTreeOid :: TreeBuilder r m -> Maybe (TreeOid r)
- Git.Types: mtbDropEntry :: TreeBuilder r m -> TreeBuilder r m -> TreeFilePath -> m (ModifiedBuilder r m)
- Git.Types: mtbEntryCount :: TreeBuilder r m -> m Int
- Git.Types: mtbLookupEntry :: TreeBuilder r m -> TreeFilePath -> m (Maybe (TreeEntry r))
- Git.Types: mtbNewBuilder :: TreeBuilder r m -> Maybe (Tree r) -> m (TreeBuilder r m)
- Git.Types: mtbPendingUpdates :: TreeBuilder r m -> HashMap TreeFilePath (TreeBuilder r m)
- Git.Types: mtbPutEntry :: TreeBuilder r m -> TreeBuilder r m -> TreeFilePath -> TreeEntry r -> m (ModifiedBuilder r m)
- Git.Types: mtbWriteContents :: TreeBuilder r m -> TreeBuilder r m -> m (ModifiedBuilder r m, TreeOid r)
- Git.Types: openRepository :: RepositoryFactory n m r -> RepositoryOptions -> m r
- Git.Types: repoAutoCreate :: RepositoryOptions -> !Bool
- Git.Types: repoIsBare :: RepositoryOptions -> !Bool
- Git.Types: repoPath :: RepositoryOptions -> !FilePath
- Git.Types: repoWorkingDir :: RepositoryOptions -> !(Maybe FilePath)
- Git.Types: runRepository :: RepositoryFactory n m r -> forall a. r -> n a -> m a
- Git.Types: runTreeT :: TreeT r m a -> StateT (TreeBuilder r m) m a
- Git.Types: signatureEmail :: Signature -> !CommitEmail
- Git.Types: signatureName :: Signature -> !CommitAuthor
- Git.Types: signatureWhen :: Signature -> !ZonedTime
- Git.Types: tagCommit :: Tag r -> !(CommitOid r)
- Git.Types: tagOid :: Tag r -> !(TagOid r)
- Git.Types: treeEntryOid :: TreeEntry r -> !(TreeOid r)
+ Git.Tree.Builder: [mtbBaseTreeOid] :: TreeBuilder r m -> Maybe (TreeOid r)
+ Git.Tree.Builder: [mtbDropEntry] :: TreeBuilder r m -> TreeBuilder r m -> TreeFilePath -> m (ModifiedBuilder r m)
+ Git.Tree.Builder: [mtbEntryCount] :: TreeBuilder r m -> m Int
+ Git.Tree.Builder: [mtbLookupEntry] :: TreeBuilder r m -> TreeFilePath -> m (Maybe (TreeEntry r))
+ Git.Tree.Builder: [mtbNewBuilder] :: TreeBuilder r m -> Maybe (Tree r) -> m (TreeBuilder r m)
+ Git.Tree.Builder: [mtbPendingUpdates] :: TreeBuilder r m -> HashMap TreeFilePath (TreeBuilder r m)
+ Git.Tree.Builder: [mtbPutEntry] :: TreeBuilder r m -> TreeBuilder r m -> TreeFilePath -> TreeEntry r -> m (ModifiedBuilder r m)
+ Git.Tree.Builder: [mtbWriteContents] :: TreeBuilder r m -> TreeBuilder r m -> m (ModifiedBuilder r m, TreeOid r)
+ Git.Tree.Builder: instance (GHC.Base.Functor m, GHC.Base.Monad m) => GHC.Base.Applicative (Git.Types.TreeT r m)
+ Git.Tree.Builder: instance (GHC.Base.Functor m, GHC.Base.MonadPlus m) => GHC.Base.Alternative (Git.Types.TreeT r m)
+ Git.Tree.Builder: instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Git.Types.TreeT r m)
+ Git.Tree.Builder: instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Git.Types.TreeT r m)
+ Git.Tree.Builder: instance Control.Monad.Trans.Class.MonadTrans (Git.Types.TreeT r)
+ Git.Tree.Builder: instance GHC.Base.Functor m => GHC.Base.Functor (Git.Types.TreeT r m)
+ Git.Tree.Builder: instance GHC.Base.Monad m => GHC.Base.Monad (Git.Types.TreeT r m)
+ Git.Tree.Builder: instance GHC.Base.MonadPlus m => GHC.Base.MonadPlus (Git.Types.TreeT r m)
+ Git.Tree.Builder: instance GHC.Classes.Eq Git.Tree.Builder.BuilderAction
+ Git.Tree.Builder: instance GHC.Show.Show Git.Tree.Builder.BuilderAction
+ Git.Tree.Working: [fileBlobKind] :: FileEntry m -> BlobKind
+ Git.Tree.Working: [fileBlobOid] :: FileEntry m -> BlobOid m
+ Git.Tree.Working: [fileChecksum] :: FileEntry m -> BlobOid m
+ Git.Tree.Working: [fileModTime] :: FileEntry m -> UTCTime
+ Git.Types: [blobContents] :: Blob r m -> !(BlobContents m)
+ Git.Types: [blobEntryKind] :: TreeEntry r -> !BlobKind
+ Git.Types: [blobEntryOid] :: TreeEntry r -> !(BlobOid r)
+ Git.Types: [blobOid] :: Blob r m -> !(BlobOid r)
+ Git.Types: [commitAuthor] :: Commit r -> !Signature
+ Git.Types: [commitCommitter] :: Commit r -> !Signature
+ Git.Types: [commitEncoding] :: Commit r -> !Text
+ Git.Types: [commitEntryOid] :: TreeEntry r -> !(CommitOid r)
+ Git.Types: [commitLog] :: Commit r -> !CommitMessage
+ Git.Types: [commitOid] :: Commit r -> !(CommitOid r)
+ Git.Types: [commitParents] :: Commit r -> ![CommitOid r]
+ Git.Types: [commitTree] :: Commit r -> !(TreeOid r)
+ Git.Types: [getSHA] :: SHA -> ByteString
+ Git.Types: [hasSymbolicReferences] :: RepositoryFacts -> !Bool
+ Git.Types: [mergeCommit] :: MergeResult r -> CommitOid r
+ Git.Types: [mergeConflicts] :: MergeResult r -> Map TreeFilePath (ModificationKind, ModificationKind)
+ Git.Types: [mergeHeadLeft] :: MergeResult r -> CommitOid r
+ Git.Types: [mergeHeadRight] :: MergeResult r -> CommitOid r
+ Git.Types: [mtbBaseTreeOid] :: TreeBuilder r m -> Maybe (TreeOid r)
+ Git.Types: [mtbDropEntry] :: TreeBuilder r m -> TreeBuilder r m -> TreeFilePath -> m (ModifiedBuilder r m)
+ Git.Types: [mtbEntryCount] :: TreeBuilder r m -> m Int
+ Git.Types: [mtbLookupEntry] :: TreeBuilder r m -> TreeFilePath -> m (Maybe (TreeEntry r))
+ Git.Types: [mtbNewBuilder] :: TreeBuilder r m -> Maybe (Tree r) -> m (TreeBuilder r m)
+ Git.Types: [mtbPendingUpdates] :: TreeBuilder r m -> HashMap TreeFilePath (TreeBuilder r m)
+ Git.Types: [mtbPutEntry] :: TreeBuilder r m -> TreeBuilder r m -> TreeFilePath -> TreeEntry r -> m (ModifiedBuilder r m)
+ Git.Types: [mtbWriteContents] :: TreeBuilder r m -> TreeBuilder r m -> m (ModifiedBuilder r m, TreeOid r)
+ Git.Types: [openRepository] :: RepositoryFactory n m r -> RepositoryOptions -> m r
+ Git.Types: [repoAutoCreate] :: RepositoryOptions -> !Bool
+ Git.Types: [repoIsBare] :: RepositoryOptions -> !Bool
+ Git.Types: [repoPath] :: RepositoryOptions -> !FilePath
+ Git.Types: [repoWorkingDir] :: RepositoryOptions -> !(Maybe FilePath)
+ Git.Types: [runRepository] :: RepositoryFactory n m r -> forall a. r -> n a -> m a
+ Git.Types: [runTreeT] :: TreeT r m a -> StateT (TreeBuilder r m) m a
+ Git.Types: [signatureEmail] :: Signature -> !CommitEmail
+ Git.Types: [signatureName] :: Signature -> !CommitAuthor
+ Git.Types: [signatureWhen] :: Signature -> !ZonedTime
+ Git.Types: [tagCommit] :: Tag r -> !(CommitOid r)
+ Git.Types: [tagOid] :: Tag r -> !(TagOid r)
+ Git.Types: [treeEntryOid] :: TreeEntry r -> !(TreeOid r)
+ Git.Types: data family Options r :: *;
+ Git.Types: instance Data.Hashable.Class.Hashable Git.Types.SHA
+ Git.Types: instance Data.Semigroup.Semigroup (Git.Types.ModifiedBuilder r m)
+ Git.Types: instance GHC.Base.Monoid (Git.Types.ModifiedBuilder r m)
+ Git.Types: instance GHC.Classes.Eq (Git.Types.BlobContents m)
+ Git.Types: instance GHC.Classes.Eq Git.Types.BlobKind
+ Git.Types: instance GHC.Classes.Eq Git.Types.GitException
+ Git.Types: instance GHC.Classes.Eq Git.Types.MergeStatus
+ Git.Types: instance GHC.Classes.Eq Git.Types.ModificationKind
+ Git.Types: instance GHC.Classes.Eq Git.Types.SHA
+ Git.Types: instance GHC.Classes.Ord Git.Types.MergeStatus
+ Git.Types: instance GHC.Classes.Ord Git.Types.ModificationKind
+ Git.Types: instance GHC.Classes.Ord Git.Types.SHA
+ Git.Types: instance GHC.Enum.Enum Git.Types.BlobKind
+ Git.Types: instance GHC.Enum.Enum Git.Types.MergeStatus
+ Git.Types: instance GHC.Enum.Enum Git.Types.ModificationKind
+ Git.Types: instance GHC.Exception.Exception Git.Types.GitException
+ Git.Types: instance GHC.Read.Read Git.Types.MergeStatus
+ Git.Types: instance GHC.Read.Read Git.Types.ModificationKind
+ Git.Types: instance GHC.Read.Read Git.Types.SHA
+ Git.Types: instance GHC.Show.Show Git.Types.BlobKind
+ Git.Types: instance GHC.Show.Show Git.Types.GitException
+ Git.Types: instance GHC.Show.Show Git.Types.MergeStatus
+ Git.Types: instance GHC.Show.Show Git.Types.ModificationKind
+ Git.Types: instance GHC.Show.Show Git.Types.RepositoryFacts
+ Git.Types: instance GHC.Show.Show Git.Types.SHA
+ Git.Types: instance GHC.Show.Show Git.Types.Signature
+ Git.Types: instance Git.Types.IsOid Git.Types.SHA
+ Git.Types: type family Oid r :: *;
+ Git.Types: }
- Git.Blob: sourceTreeBlobEntries :: MonadGit r m => Tree r -> Producer m (TreeFilePath, BlobOid r, BlobKind)
+ Git.Blob: sourceTreeBlobEntries :: MonadGit r m => Tree r -> ConduitT i (TreeFilePath, BlobOid r, BlobKind) m ()
- Git.Commit.Push: 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 ()
+ Git.Commit.Push: copyRepository :: (MonadGit r m, MonadUnliftIO m, MonadGit s (t m), MonadTrans t, MonadUnliftIO (t m)) => RepositoryFactory (t m) m s -> Maybe (CommitOid r) -> Text -> FilePath -> Bool -> m ()
- Git.Object: expandTreeObjects :: MonadGit r m => Conduit (ObjectOid r) m (ObjectOid r)
+ Git.Object: expandTreeObjects :: MonadGit r m => ConduitT (ObjectOid r) (ObjectOid r) m ()
- Git.Repository: withNewRepository :: (MonadGit r n, MonadBaseControl IO n, MonadIO m) => RepositoryFactory n m r -> FilePath -> n a -> m a
+ Git.Repository: withNewRepository :: (MonadGit r n, MonadUnliftIO n, MonadUnliftIO m) => RepositoryFactory n m r -> FilePath -> n a -> m a
- Git.Repository: withNewRepository' :: (MonadGit r n, MonadBaseControl IO n, MonadBaseControl IO m, MonadIO m) => RepositoryFactory n m r -> FilePath -> n a -> m a
+ Git.Repository: withNewRepository' :: (MonadGit r n, MonadUnliftIO n, MonadUnliftIO m) => RepositoryFactory n m r -> FilePath -> n a -> m a
- Git.Repository: withRepository :: (MonadGit r n, MonadBaseControl IO n, MonadIO m) => RepositoryFactory n m r -> FilePath -> n a -> m a
+ Git.Repository: withRepository :: (MonadGit r n, MonadUnliftIO n, MonadUnliftIO m) => RepositoryFactory n m r -> FilePath -> n a -> m a
- Git.Repository: withRepository' :: (MonadGit r n, MonadBaseControl IO n, MonadIO m) => RepositoryFactory n m r -> RepositoryOptions -> n a -> m a
+ Git.Repository: withRepository' :: (MonadGit r n, MonadUnliftIO n, MonadUnliftIO m) => RepositoryFactory n m r -> RepositoryOptions -> n a -> m a
- Git.Tree.Working: readFileTree :: (MonadBaseControl IO m, MonadIO m, MonadGit r m) => RefName -> FilePath -> Bool -> m (FileTree r)
+ Git.Tree.Working: readFileTree :: (MonadGit r m, MonadUnliftIO m) => RefName -> FilePath -> Bool -> m (FileTree r)
- Git.Tree.Working: readFileTree' :: (MonadBaseControl IO m, MonadIO m, MonadGit r m) => Tree r -> FilePath -> Bool -> m (FileTree r)
+ Git.Tree.Working: readFileTree' :: (MonadGit r m, MonadUnliftIO m) => Tree r -> FilePath -> Bool -> m (FileTree r)
- Git.Types: class IsOid o where renderOid = renderObjOid . Tagged renderObjOid = renderOid . untag
+ Git.Types: class IsOid o
- Git.Types: 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 :: *
+ Git.Types: 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 {
- Git.Types: diffContentsWithTree :: MonadGit r m => Source m (Either TreeFilePath ByteString) -> Tree r -> Producer m ByteString
+ Git.Types: diffContentsWithTree :: MonadGit r m => ConduitT () (Either TreeFilePath ByteString) m () -> Tree r -> ConduitT i ByteString m ()
- Git.Types: sourceCommitParents :: MonadGit r m => Commit r -> Producer m (Commit r)
+ Git.Types: sourceCommitParents :: MonadGit r m => Commit r -> ConduitT i (Commit r) m ()
- Git.Types: sourceObjects :: MonadGit r m => Maybe (CommitOid r) -> CommitOid r -> Bool -> Producer m (ObjectOid r)
+ Git.Types: sourceObjects :: MonadGit r m => Maybe (CommitOid r) -> CommitOid r -> Bool -> ConduitT i (ObjectOid r) m ()
- Git.Types: sourceReferences :: MonadGit r m => Producer m RefName
+ Git.Types: sourceReferences :: MonadGit r m => ConduitT i RefName m ()
- Git.Types: sourceTreeEntries :: MonadGit r m => Tree r -> Producer m (TreeFilePath, TreeEntry r)
+ Git.Types: sourceTreeEntries :: MonadGit r m => Tree r -> ConduitT i (TreeFilePath, TreeEntry r) m ()
- Git.Types: type ByteSource m = Source m ByteString
+ Git.Types: type ByteSource m = ConduitT () ByteString m ()
- Git.Working: checkoutFiles :: (MonadGit r m, MonadBaseControl IO m, MonadIO m, MonadResource m) => FilePath -> Tree r -> (TreeFilePath -> Either String FilePath) -> Bool -> m ()
+ Git.Working: checkoutFiles :: (MonadGit r m, MonadResource m) => FilePath -> Tree r -> (TreeFilePath -> Either String FilePath) -> Bool -> m ()
Files
- Git/Blob.hs +10/−10
- Git/Commit.hs +3/−3
- Git/Commit/Push.hs +3/−3
- Git/Object.hs +4/−4
- Git/Reference.hs +1/−1
- Git/Repository.hs +6/−7
- Git/Tree.hs +1/−1
- Git/Tree/Builder.hs +2/−0
- Git/Tree/Working.hs +11/−4
- Git/Types.hs +10/−27
- Git/Working.hs +3/−4
- gitlib.cabal +19/−16
Git/Blob.hs view
@@ -29,9 +29,9 @@ blobContentsToByteString (BlobStringLazy bs) = return $ B.concat (BL.toChunks bs) blobContentsToByteString (BlobStream bs) =- B.concat . BL.toChunks <$> (bs $$ sinkLazy)+ B.concat . BL.toChunks <$> (runConduit $ bs .| sinkLazy) blobContentsToByteString (BlobSizedStream bs _) =- B.concat . BL.toChunks <$> (bs $$ sinkLazy)+ runConduit $ B.concat . BL.toChunks <$> (bs .| sinkLazy) blobToByteString :: MonadGit r m => Blob r m -> m ByteString blobToByteString (Blob _ contents) = blobContentsToByteString contents@@ -40,8 +40,8 @@ => BlobContents m -> m BL.ByteString blobContentsToLazyByteString (BlobString bs) = return $ BL.fromChunks [bs] blobContentsToLazyByteString (BlobStringLazy bs) = return bs-blobContentsToLazyByteString (BlobStream bs) = bs $$ sinkLazy-blobContentsToLazyByteString (BlobSizedStream bs _) = bs $$ sinkLazy+blobContentsToLazyByteString (BlobStream bs) = runConduit $ bs .| sinkLazy+blobContentsToLazyByteString (BlobSizedStream bs _) = runConduit $ bs .| sinkLazy blobToLazyByteString :: MonadGit r m => Blob r m -> m BL.ByteString blobToLazyByteString (Blob _ contents) = blobContentsToLazyByteString contents@@ -49,19 +49,19 @@ writeBlob :: (MonadGit r m, MonadIO m, MonadResource m) => FilePath -> BlobContents m -> m () writeBlob path (BlobString bs) = liftIO $ B.writeFile path bs-writeBlob path (BlobStringLazy bs) = sourceLazy bs $$ sinkFile path-writeBlob path (BlobStream str) = str $$ sinkFile path-writeBlob path (BlobSizedStream str _) = str $$ sinkFile path+writeBlob path (BlobStringLazy bs) = runConduit $ sourceLazy bs .| sinkFile path+writeBlob path (BlobStream str) = runConduit $ str .| sinkFile path+writeBlob path (BlobSizedStream str _) = runConduit $ str .| sinkFile path treeBlobEntries :: MonadGit r m => Tree r -> m [(TreeFilePath, BlobOid r, BlobKind)]-treeBlobEntries tree = sourceTreeBlobEntries tree $$ sinkList+treeBlobEntries tree = runConduit $ sourceTreeBlobEntries tree .| sinkList sourceTreeBlobEntries :: MonadGit r m- => Tree r -> Producer m (TreeFilePath, BlobOid r, BlobKind)+ => Tree r -> ConduitT i (TreeFilePath, BlobOid r, BlobKind) m () sourceTreeBlobEntries tree =- sourceTreeEntries tree =$= awaitForever go+ sourceTreeEntries tree .| awaitForever go where go (fp ,BlobEntry oid k) = yield (fp, oid, k) go _ = return ()
Git/Commit.hs view
@@ -67,9 +67,9 @@ -> CommitOid r -- ^ The commit we need -> m [CommitOid r] -- ^ All the objects in between listCommits mhave need =- sourceObjects mhave need False- $= mapMC (\(CommitObjOid c) -> return c)- $$ sinkList+ runConduit $ sourceObjects mhave need False+ .| mapMC (\(CommitObjOid c) -> return c)+ .| sinkList traverseCommits :: MonadGit r m => (CommitOid r -> m a) -> CommitOid r -> m [a] traverseCommits f need = mapM f =<< listCommits Nothing need
Git/Commit/Push.hs view
@@ -4,8 +4,8 @@ import Control.Monad import Control.Monad.Catch import Control.Monad.IO.Class+import Control.Monad.IO.Unlift import Control.Monad.Trans.Class-import Control.Monad.Trans.Control import Data.Function import qualified Data.HashSet as HashSet import Data.List@@ -46,8 +46,8 @@ -- updateReference_ remoteRefName (RefObj cref) return cref -copyRepository :: (MonadGit r m, MonadIO m, MonadBaseControl IO m,- MonadGit s (t m), MonadTrans t, MonadBaseControl IO (t m))+copyRepository :: (MonadGit r m, MonadUnliftIO m,+ MonadGit s (t m), MonadTrans t, MonadUnliftIO (t m)) => RepositoryFactory (t m) m s -> Maybe (CommitOid r) -> Text
Git/Object.hs view
@@ -13,7 +13,7 @@ -> Bool -- ^ Include commit trees also? -> m [ObjectOid r] -- ^ All the objects in between listObjects mhave need alsoTrees =- sourceObjects mhave need alsoTrees $$ sinkList+ runConduit $ sourceObjects mhave need alsoTrees .| sinkList traverseObjects :: MonadGit r m => (ObjectOid r -> m a) -> CommitOid r -> m [a] traverseObjects f need = mapM f =<< listObjects Nothing need False@@ -24,13 +24,13 @@ -- | 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)+expandTreeObjects :: MonadGit r m => ConduitT (ObjectOid r) (ObjectOid r) m () expandTreeObjects = awaitForever $ \obj -> case obj of TreeObjOid toid -> do yield $ TreeObjOid toid tr <- lift $ lookupTree toid sourceTreeEntries tr- =$= awaitForever (\ent -> case ent of+ .| awaitForever (\ent -> case ent of (_, BlobEntry oid _) -> yield $ BlobObjOid oid (_, TreeEntry oid) -> yield $ TreeObjOid oid _ -> return ())@@ -39,4 +39,4 @@ listAllObjects :: MonadGit r m => Maybe (CommitOid r) -> CommitOid r -> m [ObjectOid r] listAllObjects mhave need =- sourceObjects mhave need True $= expandTreeObjects $$ sinkList+ runConduit $ sourceObjects mhave need True .| expandTreeObjects .| sinkList
Git/Reference.hs view
@@ -4,7 +4,7 @@ import Git.Types listReferences :: MonadGit r m => m [RefName]-listReferences = sourceReferences $$ sinkList+listReferences = runConduit $ sourceReferences .| sinkList resolveReference :: MonadGit r m => RefName -> m (Maybe (Oid r)) resolveReference name = do
Git/Repository.hs view
@@ -1,13 +1,13 @@ module Git.Repository where -import Control.Exception.Lifted import Control.Monad import Control.Monad.IO.Class-import Control.Monad.Trans.Control+import Control.Monad.IO.Unlift import Git.Types import System.Directory+import UnliftIO.Exception -withNewRepository :: (MonadGit r n, MonadBaseControl IO n, MonadIO m)+withNewRepository :: (MonadGit r n, MonadUnliftIO n, MonadUnliftIO m) => RepositoryFactory n m r -> FilePath -> n a -> m a withNewRepository factory path action = do@@ -29,8 +29,7 @@ return a -withNewRepository' :: (MonadGit r n, MonadBaseControl IO n,- MonadBaseControl IO m, MonadIO m)+withNewRepository' :: (MonadGit r n, MonadUnliftIO n, MonadUnliftIO m) => RepositoryFactory n m r -> FilePath -> n a -> m a withNewRepository' factory path action = bracket_ recover recover $@@ -45,13 +44,13 @@ exists <- doesDirectoryExist path when exists $ removeDirectoryRecursive path -withRepository' :: (MonadGit r n, MonadBaseControl IO n, MonadIO m)+withRepository' :: (MonadGit r n, MonadUnliftIO n, MonadUnliftIO m) => RepositoryFactory n m r -> RepositoryOptions -> n a -> m a withRepository' factory opts action = do repo <- openRepository factory opts runRepository factory repo $ action `finally` closeRepository -withRepository :: (MonadGit r n, MonadBaseControl IO n, MonadIO m)+withRepository :: (MonadGit r n, MonadUnliftIO n, MonadUnliftIO m) => RepositoryFactory n m r -> FilePath -> n a -> m a withRepository factory path = withRepository' factory defaultRepositoryOptions { repoPath = path }
Git/Tree.hs view
@@ -12,7 +12,7 @@ import Git.Types listTreeEntries :: MonadGit r m => Tree r -> m [(TreeFilePath, TreeEntry r)]-listTreeEntries tree = sourceTreeEntries tree $$ sinkList+listTreeEntries tree = runConduit $ sourceTreeEntries tree .| sinkList copyTreeEntry :: (MonadGit r m, MonadGit s (t m), MonadTrans t) => TreeEntry r -> HashSet Text -> t m (TreeEntry s, HashSet Text)
Git/Tree/Builder.hs view
@@ -1,3 +1,5 @@+{-# OPTIONS_GHC -fno-warn-orphans #-}+ module Git.Tree.Builder ( TreeT , TreeBuilder(..)
Git/Tree/Working.hs view
@@ -1,11 +1,13 @@+{-# LANGUAGE CPP #-} module Git.Tree.Working where import Control.Applicative-import Control.Concurrent.Async.Lifted+-- import Control.Concurrent.Async.Lifted import Control.Exception import Control.Monad import Control.Monad.IO.Class (MonadIO(..))-import Control.Monad.Trans.Control+import Control.Monad.IO.Unlift+-- import Control.Monad.Trans.Control import qualified Data.ByteString as B (readFile) import qualified Data.ByteString.Char8 as B8 import Data.Foldable (foldl')@@ -17,8 +19,13 @@ import Data.Time.Clock.POSIX (posixSecondsToUTCTime) import Git hiding (Options) import Prelude hiding (log)+import UnliftIO.Async import System.FilePath.Posix+#ifndef mingw32_HOST_OS import System.Posix.Files+#else+import System.PosixCompat.Files+#endif data FileEntry m = FileEntry { fileModTime :: UTCTime@@ -29,7 +36,7 @@ type FileTree m = HashMap TreeFilePath (FileEntry m) -readFileTree :: (MonadBaseControl IO m, MonadIO m, MonadGit r m)+readFileTree :: (MonadGit r m, MonadUnliftIO m) => RefName -> FilePath -> Bool@@ -42,7 +49,7 @@ tr <- lookupTree . commitTree =<< lookupCommit (Tagged h') readFileTree' tr wdir getHash -readFileTree' :: (MonadBaseControl IO m, MonadIO m, MonadGit r m)+readFileTree' :: (MonadGit r m, MonadUnliftIO m) => Tree r -> FilePath -> Bool -> m (FileTree r) readFileTree' tr wdir getHash = do
Git/Types.hs view
@@ -7,7 +7,7 @@ import Conduit import Control.Applicative-import qualified Control.Exception.Lifted as Exc+import Control.Exception import Control.Monad import Control.Monad.Trans.State import Data.ByteString (ByteString)@@ -57,7 +57,7 @@ lookupReference :: RefName -> m (Maybe (RefTarget r)) updateReference :: RefName -> RefTarget r -> m () deleteReference :: RefName -> m ()- sourceReferences :: Producer m RefName+ sourceReferences :: ConduitT i RefName m () -- Object lookup lookupObject :: Oid r -> m (Object r m)@@ -65,7 +65,7 @@ sourceObjects :: Maybe (CommitOid r) -- ^ A commit we may already have -> CommitOid r -- ^ The commit we need -> Bool -- ^ Include commit trees also?- -> Producer m (ObjectOid r) -- ^ All the objects in between+ -> ConduitT i (ObjectOid r) m () -- ^ All the objects in between lookupCommit :: CommitOid r -> m (Commit r) lookupTree :: TreeOid r -> m (Tree r)@@ -80,10 +80,10 @@ treeOid :: Tree r -> m (TreeOid r) treeEntry :: Tree r -> TreeFilePath -> m (Maybe (TreeEntry r))- sourceTreeEntries :: Tree r -> Producer m (TreeFilePath, TreeEntry r)+ sourceTreeEntries :: Tree r -> ConduitT i (TreeFilePath, TreeEntry r) m () - diffContentsWithTree :: Source m (Either TreeFilePath ByteString)- -> Tree r -> Producer m ByteString+ diffContentsWithTree :: ConduitT () (Either TreeFilePath ByteString) m ()+ -> Tree r -> ConduitT i ByteString m () -- Creating other objects hashContents :: BlobContents m -> m (BlobOid r)@@ -93,23 +93,6 @@ -> m (Commit r) createTag :: CommitOid r -> Signature -> CommitMessage -> Text -> m (Tag r) - -- -- Pack files- -- buildPackFile :: FilePath -> [Either (CommitOid r) (TreeOid r)]- -- -> m FilePath- -- buildPackFile _ _ =- -- failure (BackendError "Backend does not support building pack files")-- -- buildPackIndex :: FilePath -> ByteString -> m (Text, FilePath, FilePath)- -- buildPackIndex _ _ =- -- failure (BackendError "Backend does not support building pack indexes")-- -- writePackFile :: FilePath -> m ()- -- writePackFile _ =- -- failure (BackendError "Backend does not support writing pack files")-- -- -- Git remotes- -- remoteFetch :: Text {- URI -} -> Text {- fetch spec -} -> m ()- data RepositoryOptions = RepositoryOptions { repoPath :: !FilePath , repoWorkingDir :: !(Maybe FilePath)@@ -175,7 +158,7 @@ , blobContents :: !(BlobContents m) } -type ByteSource m = Source m ByteString+type ByteSource m = ConduitT () ByteString m () data BlobContents m = BlobString !ByteString | BlobStringLazy !BL.ByteString@@ -248,12 +231,12 @@ , commitEncoding :: !Text } -sourceCommitParents :: MonadGit r m => Commit r -> Producer m (Commit r)+sourceCommitParents :: MonadGit r m => Commit r -> ConduitT i (Commit r) m () sourceCommitParents commit = forM_ (commitParents commit) $ yield <=< lift . lookupCommit lookupCommitParents :: MonadGit r m => Commit r -> m [Commit r]-lookupCommitParents commit = sourceCommitParents commit $$ sinkList+lookupCommitParents commit = runConduit $ sourceCommitParents commit .| sinkList data Signature = Signature { signatureName :: !CommitAuthor@@ -452,4 +435,4 @@ -- jww (2013-02-11): Create a BackendException data constructor of forall -- e. Exception e => BackendException e, so that each can throw a derived -- exception.-instance Exc.Exception GitException+instance Exception GitException
Git/Working.hs view
@@ -15,15 +15,14 @@ import System.Posix.Files #endif -checkoutFiles :: (MonadGit r m, MonadBaseControl IO m, MonadIO m,- MonadResource m)+checkoutFiles :: (MonadGit r m, MonadResource m) => FilePath -> Tree r -> (TreeFilePath -> Either String FilePath) -> Bool -> m () checkoutFiles destPath tree decode cloneSubmodules =- sourceTreeEntries tree $$ mapM_C $ \(path, entry) ->+ runConduit $ sourceTreeEntries tree .| (mapM_C $ \(path, entry) -> case (destPath </>) <$> decode path of Left e -> decodeError path e Right fullPath -> do@@ -34,7 +33,7 @@ CommitEntry oid -- jww (2013-12-26): Recursively clone submodules? | cloneSubmodules -> cloneSubmodule oid fullPath- | otherwise -> liftIO $ createDirectory fullPath+ | otherwise -> liftIO $ createDirectory fullPath) where decodeError path e = throwM $ PathEncodingError $ "Could not decode path " <> T.pack (show path) <> ":" <> T.pack e
gitlib.cabal view
@@ -1,13 +1,14 @@-Name: gitlib-Version: 3.1.1-Synopsis: API library for working with Git repositories-License-file: LICENSE-License: MIT-Author: John Wiegley-Maintainer: johnw@newartisans.com-Build-Type: Simple-Cabal-Version: >=1.10-Category: FFI+Name: gitlib+Version: 3.1.2+Synopsis: API library for working with Git repositories+License-file: LICENSE+License: MIT+Author: John Wiegley+Maintainer: johnw@newartisans.com+Build-Type: Simple+Cabal-Version: >=1.10+Category: FFI+Homepage: https://github.com/jwiegley/gitlib Description: @gitlib@ is a high-level, lazy and conduit-aware set of abstractions for programming with Git types. Several different backends are available,@@ -28,7 +29,7 @@ -- Type: exitcode-stdio-1.0 -- Main-is: Doctest.hs -- Hs-source-dirs: test--- Build-depends: +-- Build-depends: -- base -- , directory >= 1.0 -- , doctest >= 0.8@@ -42,16 +43,13 @@ base >= 3 && < 5 , base16-bytestring >= 0.1.1.5 , bytestring >= 0.9.2.1- , conduit >= 1.1.0+ , conduit >= 1.2.8 , conduit-combinators >= 1 , containers >= 0.4.2.1 , directory >= 1.1.0.2 , exceptions >= 0.5 , filepath >= 1.3 , hashable >= 1.1.2.5- , lifted-async >= 0.1.1- , lifted-base >= 0.2- , monad-control < 1.1 , mtl >= 2.1.2 , resourcet >= 1.1.0 , semigroups >= 0.11@@ -60,9 +58,14 @@ , time >= 1.4 , transformers >= 0.3.0.0 , unordered-containers >= 0.2.3.0+ , unliftio-core >= 0.1.1+ , unliftio if !os(mingw32) build-depends: unix >= 2.5.1.1+ else+ build-depends:+ unix-compat >= 0.4 exposed-modules: Git Git.Blob@@ -79,7 +82,7 @@ Git.Types Git.Utils Git.Working- default-extensions: + default-extensions: BangPatterns ConstraintKinds DeriveDataTypeable