gitlib 2.1.0.0 → 2.2.0.0
raw patch · 6 files changed
+77/−76 lines, 6 filesdep −unix
Dependencies removed: unix
Files
- Git/Commit/Push.hs +2/−1
- Git/Reference.hs +2/−10
- Git/Repository.hs +10/−11
- Git/Tree/Builder.hs +0/−1
- Git/Types.hs +62/−51
- gitlib.cabal +1/−2
Git/Commit/Push.hs view
@@ -8,6 +8,7 @@ import Data.List import Data.Maybe import Data.Monoid+import Data.Tagged import Data.Text (Text) import Data.Traversable (for) import Git.Commit@@ -24,7 +25,7 @@ => CommitOid m -> Text -> t m (CommitOid (t m)) pushCommit coid remoteRefName = do commits <- mapM copyCommitOid =<< lift (listCommits Nothing coid)- mrref <- resolveReference remoteRefName+ mrref <- fmap Tagged `liftM` resolveReference remoteRefName mrref' <- for mrref $ \rref -> if rref `elem` commits then lift $ copyCommitOid rref
Git/Reference.hs view
@@ -1,20 +1,12 @@ module Git.Reference where -import Control.Applicative import Git.Types -resolveReference :: Repository m => RefName -> m (Maybe (CommitOid m))+resolveReference :: Repository m => RefName -> m (Maybe (Oid m)) resolveReference name = do mref <- lookupReference name maybe (return Nothing) referenceToOid mref -referenceToOid :: Repository m => RefTarget m -> m (Maybe (CommitOid m))+referenceToOid :: Repository m => RefTarget m -> m (Maybe (Oid m)) referenceToOid (RefObj oid) = return $ Just oid referenceToOid (RefSymbolic name) = resolveReference name--resolveReferenceTree :: Repository m => RefName -> m (Maybe (Tree m))-resolveReferenceTree refName = do- c <- resolveReference refName- case c of- Nothing -> return Nothing- Just c' -> Just <$> (lookupCommit c' >>= lookupTree . commitTree)
Git/Repository.hs view
@@ -3,16 +3,15 @@ import qualified Control.Exception.Lifted as Exc import Control.Monad import Control.Monad.IO.Class-import Control.Monad.Trans.Class import Data.Conduit import Git.Types import System.Directory import System.Mem -withNewRepository :: (Repository (t m), MonadGit (t m),- MonadBaseControl IO m, MonadIO m, MonadTrans t)+withNewRepository :: (Repository t, MonadGit t,+ MonadBaseControl IO m, MonadIO m) => RepositoryFactory t m c- -> FilePath -> t m a -> m a+ -> FilePath -> t a -> m a withNewRepository factory path action = do liftIO $ do exists <- doesDirectoryExist path@@ -31,9 +30,9 @@ return 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+withNewRepository' :: (Repository t, MonadGit t,+ MonadBaseControl IO m, MonadIO m)+ => RepositoryFactory t m c -> FilePath -> t a -> m a withNewRepository' factory path action = Exc.bracket_ recover recover $ withRepository' factory (defaultOptions factory)@@ -52,11 +51,11 @@ startupBackend fact Exc.finally f (liftIO performGC >> shutdownBackend fact) -withRepository' :: (Repository (t m), MonadTrans t,+withRepository' :: (Repository t, MonadBaseControl IO m, MonadIO m) => RepositoryFactory t m c -> RepositoryOptions- -> t m a+ -> t a -> m a withRepository' factory opts action = Exc.bracket@@ -64,11 +63,11 @@ (closeRepository factory) (flip (runRepository factory) action) -withRepository :: (Repository (t m), MonadTrans t,+withRepository :: (Repository t, MonadBaseControl IO m, MonadIO m) => RepositoryFactory t m c -> FilePath- -> t m a+ -> t a -> m a withRepository factory path = withRepository' factory
Git/Tree/Builder.hs view
@@ -38,7 +38,6 @@ import Data.Text (Text) import Data.Word import Git.Types-import System.Posix.ByteString.FilePath data ModifyTreeResult m = TreeEntryNotFound | TreeEntryDeleted
Git/Types.hs view
@@ -6,7 +6,6 @@ import Control.Monad.IO.Class import qualified Data.Binary as Bin import Data.ByteString (ByteString)-import qualified Data.ByteString as B import qualified Data.ByteString.Base16 as B16 import Data.Conduit import Data.Default@@ -20,8 +19,10 @@ import qualified Data.Text.Encoding as T import Data.Time import Data.Typeable-import System.Posix.ByteString.FilePath+--import System.Posix.ByteString.FilePath +type RawFilePath = ByteString+ data RepositoryFacts = RepositoryFacts { hasSymbolicReferences :: !Bool } deriving Show@@ -56,15 +57,15 @@ -- Object lookup lookupCommit :: CommitOid m -> m (Commit m)- lookupTree :: TreeOid m -> m (Tree m)- lookupBlob :: BlobOid m -> m (Blob m)- lookupTag :: TagOid m -> m (Tag m)- lookupObject :: Oid m -> m (Object m)- existsObject :: Oid m -> m Bool+ lookupTree :: TreeOid m -> m (Tree m)+ lookupBlob :: BlobOid m -> m (Blob m)+ lookupTag :: TagOid m -> m (Tag m)+ lookupObject :: Oid m -> m (Object m)+ existsObject :: Oid m -> m Bool sourceObjects :: Maybe (CommitOid m) -- ^ A commit we may already have -> CommitOid m -- ^ The commit we need -> Bool -- ^ Include commit trees also?- -> Source m (ObjectOid m) -- ^ All the objects in between+ -> Producer m (ObjectOid m) -- ^ All the objects in between -- Working with trees newTreeBuilder :: Maybe (Tree m) -> m (TreeBuilder m)@@ -73,6 +74,9 @@ treeEntry :: Tree m -> TreeFilePath -> m (Maybe (TreeEntry m)) listTreeEntries :: Tree m -> m [(TreeFilePath, TreeEntry m)] + diffContentsWithTree :: Source m (Either TreeFilePath ByteString)+ -> Tree m -> Producer m ByteString+ -- Creating other objects hashContents :: BlobContents m -> m (BlobOid m) createBlob :: BlobContents m -> m (BlobOid m)@@ -107,11 +111,12 @@ instance Default RepositoryOptions where def = RepositoryOptions "" True True -data RepositoryFactory t m c = RepositoryFactory+data RepositoryFactory t m c+ = RepositoryFactory { openRepository :: RepositoryOptions -> m c- , runRepository :: forall a. c -> t m a -> m a+ , runRepository :: forall a. c -> t a -> m a , closeRepository :: c -> m ()- , getRepository :: t m c+ , getRepository :: t c , defaultOptions :: !RepositoryOptions , startupBackend :: m () , shutdownBackend :: m ()@@ -140,7 +145,7 @@ copyOid :: (Repository m, Repository n) => Oid m -> n (Oid n) copyOid = parseOid . renderOid -newtype SHA = SHA B.ByteString deriving (Eq, Ord, Read)+newtype SHA = SHA { getSHA :: ByteString } deriving (Eq, Ord, Read) shaToText :: SHA -> Text shaToText (SHA bs) = T.decodeUtf8 (B16.encode bs)@@ -294,14 +299,14 @@ untagObjOid (TagObjOid oid) = untag oid {- $references -}-data RefTarget m = RefObj !(CommitOid m) | RefSymbolic !RefName+data RefTarget m = RefObj !(Oid m) | RefSymbolic !RefName instance Repository m => Show (RefTarget m) where- show (RefObj coid) = "RefObj#" ++ T.unpack (renderObjOid coid)+ show (RefObj oid) = "RefObj#" ++ T.unpack (renderOid oid) show (RefSymbolic name) = "RefSymbolic#" ++ T.unpack name commitRefTarget :: Commit m -> RefTarget m-commitRefTarget = RefObj . commitOid+commitRefTarget = RefObj . untag . commitOid {- $merges -} data ModificationKind = Unchanged | Modified | Added | Deleted | TypeChanged@@ -386,42 +391,48 @@ {- $exceptions -} -- | There is a separate 'GitException' for each possible failure when -- interacting with the Git repository.-data GitException = BackendError Text- | GitError Text- | RepositoryNotExist- | RepositoryInvalid- | RepositoryCannotAccess Text- | BlobCreateFailed- | BlobEmptyCreateFailed- | BlobEncodingUnknown Text- | BlobLookupFailed- | PushNotFastForward Text- | TranslationException Text- | TreeCreateFailed Text- | TreeBuilderCreateFailed- | TreeBuilderInsertFailed TreeFilePath- | TreeBuilderRemoveFailed TreeFilePath- | TreeBuilderWriteFailed Text- | TreeLookupFailed- | TreeCannotTraverseBlob- | TreeCannotTraverseCommit- | TreeEntryLookupFailed TreeFilePath- | TreeUpdateFailed- | TreeWalkFailed- | TreeEmptyCreateFailed- | CommitCreateFailed- | CommitLookupFailed Text- | ReferenceCreateFailed RefName- | ReferenceDeleteFailed RefName- | RefCannotCreateFromPartialOid- | ReferenceListingFailed- | ReferenceLookupFailed RefName- | ObjectLookupFailed Text Int- | ObjectRefRequiresFullOid- | OidCopyFailed- | OidParseFailed Text- | QuotaHardLimitExceeded Int Int- deriving (Eq, Show, Typeable)+data GitException+ = BackendError Text+ | GitError Text+ | RepositoryNotExist+ | RepositoryInvalid+ | RepositoryCannotAccess Text+ | BlobCreateFailed Text+ | BlobEmptyCreateFailed+ | BlobEncodingUnknown Text+ | BlobLookupFailed+ | DiffBlobFailed Text+ | DiffPrintToPatchFailed Text+ | DiffTreeToIndexFailed Text+ | IndexAddFailed TreeFilePath Text+ | IndexCreateFailed Text+ | PushNotFastForward Text+ | TranslationException Text+ | TreeCreateFailed Text+ | TreeBuilderCreateFailed+ | TreeBuilderInsertFailed TreeFilePath+ | TreeBuilderRemoveFailed TreeFilePath+ | TreeBuilderWriteFailed Text+ | TreeLookupFailed+ | TreeCannotTraverseBlob+ | TreeCannotTraverseCommit+ | TreeEntryLookupFailed TreeFilePath+ | TreeUpdateFailed+ | TreeWalkFailed+ | TreeEmptyCreateFailed+ | CommitCreateFailed+ | CommitLookupFailed Text+ | ReferenceCreateFailed RefName+ | ReferenceDeleteFailed RefName+ | RefCannotCreateFromPartialOid+ | ReferenceListingFailed+ | ReferenceLookupFailed RefName+ | ObjectLookupFailed Text Int+ | ObjectRefRequiresFullOid+ | OidCopyFailed+ | OidParseFailed Text+ | QuotaHardLimitExceeded Int Int+ deriving (Eq, Show, Typeable) -- jww (2013-02-11): Create a BackendException data constructor of forall -- e. Exception e => BackendException e, so that each can throw a derived
gitlib.cabal view
@@ -1,5 +1,5 @@ Name: gitlib-Version: 2.1.0.0+Version: 2.2.0.0 Synopsis: API library for working with Git repositories License-file: LICENSE License: MIT@@ -54,7 +54,6 @@ , text >= 0.11.2 , time >= 1.4 , transformers >= 0.3.0.0- , unix >= 2.5 , unordered-containers >= 0.2.3.0 exposed-modules: Git