packages feed

gitlib-libgit2 2.0.0.0 → 2.0.1.0

raw patch · 2 files changed

+76/−81 lines, 2 filesdep ~gitlibdep ~gitlib-libgit2PVP ok

version bump matches the API change (PVP)

Dependency ranges changed: gitlib, gitlib-libgit2

API changes (from Hackage documentation)

+ Git.Libgit2: lgBuildPackFile :: MonadGit m => FilePath -> [Either (CommitOid m) (TreeOid m)] -> LgRepository m FilePath
+ Git.Libgit2: lgWrap :: (MonadIO m, MonadBaseControl IO m) => LgRepository m a -> LgRepository m a
+ Git.Libgit2: lgWritePackFile :: MonadGit m => FilePath -> LgRepository m ()

Files

Git/Libgit2.hs view
@@ -36,8 +36,11 @@        , lgGet        , lgExcTrap        , lgLoadPackFileInMemory+       , lgBuildPackFile        , lgReadFromPack        , lgWithPackFile+       , lgWritePackFile+       , lgWrap        , oidToSha        , shaToOid        , openLgRepository@@ -54,11 +57,13 @@ import           Control.Monad import           Control.Monad.IO.Class import           Control.Monad.Loops+import           Control.Monad.Trans.Class import           Control.Monad.Trans.Reader import           Control.Monad.Trans.Resource import           Data.Bits ((.|.)) import qualified Data.ByteString as B import qualified Data.ByteString.Unsafe as BU+import           Data.Conduit import           Data.IORef import           Data.List as L import           Data.Maybe@@ -83,7 +88,6 @@ import           Foreign.Ptr import           Foreign.Storable import qualified Git-import qualified Git.Commit.Push as Git import           Git.Libgit2.Internal import           Git.Libgit2.Types import           Prelude hiding (FilePath)@@ -93,8 +97,8 @@ import           Unsafe.Coerce  debug :: MonadIO m => String -> m ()---debug = liftIO . putStrLn-debug = const (return ())+debug = liftIO . putStrLn+--debug = const (return ())  type Oid = OidPtr @@ -161,36 +165,35 @@      parseOid = lgParseOid -    lookupReference = lgLookupRef-    createReference = lgUpdateRef-    updateReference = lgUpdateRef-    deleteReference = lgDeleteRef-    listReferences  = lgListRefs-    lookupCommit    = lgLookupCommit 40-    lookupTree      = lgLookupTree 40-    lookupBlob      = lgLookupBlob-    lookupTag       = error "Not implemented: LgRepository.lookupTag"-    lookupObject    = lgLookupObject-    existsObject    = lgExistsObject-    pushCommit      = \name _ rrefname -> Git.genericPushCommit name rrefname-    listObjects     = lgListObjects-    newTreeBuilder  = lgNewTreeBuilder-    treeEntry       = lgTreeEntry-    treeOid         = lgTreeOid-    listTreeEntries = lgListTreeEntries-    hashContents    = lgHashContents-    createBlob      = lgWrap . lgCreateBlob-    createTag       = error "Not implemented: LgRepository.createTag"+    lookupReference   = lgLookupRef+    createReference   = lgUpdateRef+    updateReference   = lgUpdateRef+    deleteReference   = lgDeleteRef+    listReferences    = lgListRefs+    lookupCommit      = lgLookupCommit 40+    lookupTree        = lgLookupTree 40+    lookupBlob        = lgLookupBlob+    lookupTag         = error "Not implemented: LgRepository.lookupTag"+    lookupObject      = lgLookupObject+    existsObject      = lgExistsObject+    sourceObjects     = lgSourceObjects+    newTreeBuilder    = lgNewTreeBuilder+    treeEntry         = lgTreeEntry+    treeOid           = lgTreeOid+    listTreeEntries   = lgListTreeEntries+    hashContents      = lgHashContents+    createBlob        = lgWrap . lgCreateBlob+    createTag         = error "Not implemented: LgRepository.createTag"      createCommit p t a c l r = lgWrap $ lgCreateCommit p t a c l r      deleteRepository = lgGet >>= liftIO . removeTree . repoPath -    buildPackFile   = lgBuildPackFile-    buildPackIndex  = lgBuildPackIndexWrapper-    writePackFile   = lgWrap . lgWritePackFile+    -- buildPackFile   = lgBuildPackFile+    -- buildPackIndex  = lgBuildPackIndexWrapper+    -- writePackFile   = lgWrap . lgWritePackFile -    remoteFetch     = lgRemoteFetch+    -- remoteFetch     = lgRemoteFetch  lgWrap :: (MonadIO m, MonadBaseControl IO m)        => LgRepository m a -> LgRepository m a@@ -224,7 +227,8 @@     repo <- lgGet     ptr  <- liftIO mallocForeignPtr     r    <- Git.blobContentsToByteString b-            >>= \bs -> liftIO $ createBlobFromByteString repo ptr bs+            >>= \bs -> liftIO $ evaluate+                       =<< createBlobFromByteString repo ptr bs     when (r < 0) $ failure Git.BlobCreateFailed     return (Tagged (mkOid ptr)) @@ -433,7 +437,7 @@             (mk'git_treebuilder_filter_cb (callback builder'))             freeHaskellFunPtr             (flip (c'git_treebuilder_filter builder) nullPtr)-        FC.newForeignPtr builder'(c'git_treebuilder_free builder')+        FC.newForeignPtr builder' (c'git_treebuilder_free builder')   where     callback builder te _ = do         cname <- c'git_tree_entry_name te@@ -606,56 +610,47 @@         freeHaskellFunPtr         (flip (c'git_odb_foreach odbPtr) payload) -lgListObjects :: Git.MonadGit m-              => Maybe (CommitOid m) -> CommitOid m -> Bool-              -> LgRepository m [ObjectOid m]-lgListObjects mhave need alsoTrees = do-    repo <- lgGet-    refs <- liftIO $ withForeignPtr (repoObj repo) $ \repoPtr ->-        alloca $ \pptr ->-            Exc.bracket-                (do r <- c'git_revwalk_new pptr repoPtr-                    when (r < 0) $-                        failure (Git.BackendError "Could not create revwalker")-                    peek pptr)-                c'git_revwalk_free-                (lgRevWalker need mhave)-    concat <$> mapM getCommitContents refs-  where-    getCommitContents cref-        | alsoTrees = do-            c <- lgLookupCommit 40 cref-            return [Git.CommitObjOid cref, Git.TreeObjOid (Git.commitTree c)]-        | otherwise = return [Git.CommitObjOid cref]+lgSourceObjects+    :: Git.MonadGit m+    => Maybe (CommitOid m) -> CommitOid m -> Bool+    -> Source (LgRepository m) (ObjectOid m)+lgSourceObjects mhave need alsoTrees = do+    repo   <- lift $ lgGet+    walker <- liftIO $ alloca $ \pptr -> do+        r <- withForeignPtr (repoObj repo) $ \repoPtr ->+                c'git_revwalk_new pptr repoPtr+        when (r < 0) $+            failure (Git.BackendError "Could not create revwalker")+        ptr <- peek pptr+        newForeignPtr p'git_revwalk_free ptr -    lgRevWalker coid moid walker = do-        pushOid (getOid (untag coid))-        case moid of-            Nothing -> return ()-            Just oid ->-                withForeignPtr (getOid (untag oid)) $ \coid -> do-                    r2 <- c'git_revwalk_hide walker coid-                    when (r2 < 0) $-                        failure (Git.BackendError-                                 "Could not hide commit on revwalker")-        alloca $ \coidPtr -> do-            c'git_revwalk_sorting walker-                (fromIntegral ((1 :: Int) .|. (4 :: Int)))-            whileM ((==) <$> pure 0-                         <*> c'git_revwalk_next coidPtr walker)-                (Tagged . mkOid <$> coidPtrToOid coidPtr)-      where-        pushOid oid =-            withForeignPtr oid $ \coid -> do-                r2 <- c'git_revwalk_push walker coid-                when (r2 < 0) $-                    failure (Git.BackendError "Could not push oid on revwalker")+    liftIO $ withForeignPtr (getOid (untag need)) $ \coid -> do+        r2 <- withForeignPtr walker $ flip c'git_revwalk_push coid+        when (r2 < 0) $+            failure (Git.BackendError "Could not push oid on revwalker") -        pushRef refName =-            withCString refName $ \namePtr -> do-                r2 <- c'git_revwalk_push_ref walker namePtr-                when (r2 < 0) $-                    failure (Git.BackendError "Could not push ref on revwalker")+    case mhave of+        Nothing   -> return ()+        Just have -> liftIO $ withForeignPtr (getOid (untag have)) $ \coid -> do+            r2 <- withForeignPtr walker $ flip c'git_revwalk_hide coid+            when (r2 < 0) $+                failure (Git.BackendError "Could not hide commit on revwalker")++    liftIO $ withForeignPtr walker $ flip c'git_revwalk_sorting+        (fromIntegral ((1 :: Int) .|. (4 :: Int)))++    coidPtr <- liftIO mallocForeignPtr+    whileM_ ((==) <$> pure 0+                  <*> liftIO (withForeignPtr walker $ \walker' ->+                              withForeignPtr coidPtr $ \coidPtr' ->+                                  c'git_revwalk_next coidPtr' walker')) $ do+        oidPtr <- liftIO $ withForeignPtr coidPtr coidPtrToOid+        do+            let coid = Tagged (mkOid oidPtr)+            yield $ Git.CommitObjOid coid+            when alsoTrees $ do+                c <- lift $ lgLookupCommit 40 coid+                yield $ Git.TreeObjOid (Git.commitTree c)  -- | Write out a commit to its repository.  If it has already been written, --   nothing will happen.
gitlib-libgit2.cabal view
@@ -1,5 +1,5 @@ Name:                gitlib-libgit2-Version:             2.0.0.0+Version:             2.0.1.0 Synopsis:            Libgit2 backend for gitlib License-file:        LICENSE License:             MIT@@ -23,9 +23,9 @@     Hs-source-dirs: test     Build-depends:            base >=3-        , gitlib             >= 2.0.0.0+        , gitlib             >= 2.0.1.0         , gitlib-test        >= 2.0.0.0-        , gitlib-libgit2     >= 2.0.0.0+        , gitlib-libgit2     >= 2.0.1.0         , HUnit              >= 1.2.5         , hspec              >= 1.4.4         , hspec-expectations >= 0.3@@ -36,7 +36,7 @@     ghc-options: -Wall     build-depends:           base                 >= 3 && < 5-        , gitlib               >= 2.0.0.0+        , gitlib               >= 2.0.1.0         , hlibgit2             >= 0.18.0.7         , attempt              >= 0.4.0         , binary               >= 0.5.1.0