gitlib-cmdline 1.1.1 → 1.2.0
raw patch · 2 files changed
+16/−44 lines, 2 files
Files
- Git/CmdLine.hs +15/−43
- gitlib-cmdline.cabal +1/−1
Git/CmdLine.hs view
@@ -36,11 +36,7 @@ import Data.Text (Text) import qualified Data.Text as T import qualified Data.Text.Encoding as T-#if MIN_VERSION_shelly(1, 0, 0)-import qualified Data.Text as TL-#else import qualified Data.Text.Lazy as TL-#endif import Data.Time import Data.Tuple import qualified Filesystem as F@@ -60,18 +56,10 @@ import Text.Parsec.Token toStrict :: TL.Text -> T.Text-#if MIN_VERSION_shelly(1, 0, 0)-toStrict = id-#else toStrict = TL.toStrict-#endif fromStrict :: T.Text -> TL.Text-#if MIN_VERSION_shelly(1, 0, 0)-fromStrict = id-#else fromStrict = TL.fromStrict-#endif type BlobOid m = Git.BlobOid (CmdLineRepository m) type TreeOid m = Git.TreeOid (CmdLineRepository m)@@ -93,23 +81,16 @@ instance Git.MonadGit m => Git.Repository (CmdLineRepository m) where type Oid (CmdLineRepository m) =-#if MIN_VERSION_shelly(1, 0, 0)- Git.OidText-#else Git.OidTextL-#endif- type Tree (CmdLineRepository m) = MutableTree m+ type TreeKind (CmdLineRepository m) = Git.PersistentTree+ type Tree (CmdLineRepository m) = HashMapTree m data Options (CmdLineRepository m) = Options facts = return Git.RepositoryFacts { Git.hasSymbolicReferences = True } -#if MIN_VERSION_shelly(1, 0, 0)- parseOid = Git.parseOidText-#else parseOid = Git.parseOidTextL-#endif lookupRef = cliLookupRef createRef = cliUpdateRef@@ -340,15 +321,6 @@ (Just x, Just y) -> (x, y) (Nothing, Nothing) -> error "Both merge items cannot be Unchanged" -#if MIN_VERSION_shelly(1, 0, 0)-type Oid = Git.OidText--mkOid :: T.Text -> Git.OidText-mkOid = Git.OidText--getOid :: Git.OidText -> T.Text-getOid = Git.getOidT-#else type Oid = Git.OidTextL mkOid :: TL.Text -> Git.OidTextL@@ -356,7 +328,6 @@ getOid :: Git.OidTextL -> TL.Text getOid = Git.getOidTL-#endif cliLookupBlob :: Git.MonadGit m => BlobOid m -> CmdLineRepository m (Blob m)@@ -443,35 +414,35 @@ go x = failure (Git.BackendError $ "Unexpected output from git-log: " <> T.pack (show x)) -data MutableTree m = MutableTree+data HashMapTree m t = HashMapTree { cliTreeOid :: IORef (Maybe (TreeOid m)) , cliTreeContents :: IORef (HashMap Text (TreeEntry m)) } cliMakeTree :: IORef (Maybe (TreeOid m)) -> IORef (HashMap Text (TreeEntry m))- -> Tree m-cliMakeTree oid contents = MutableTree oid contents+ -> Tree m Git.PersistentTree+cliMakeTree oid contents = HashMapTree oid contents cliNewTree :: Git.MonadGit m- => CmdLineRepository m (Tree m)+ => CmdLineRepository m (Tree m Git.PersistentTree) cliNewTree = cliMakeTree <$> liftIO (newIORef Nothing) <*> liftIO (newIORef HashMap.empty) cliCloneTree :: Git.MonadGit m- => Tree m- -> CmdLineRepository m (Tree m)-cliCloneTree (MutableTree oid contents) =+ => Tree m Git.PersistentTree+ -> CmdLineRepository m (Tree m Git.PersistentTree)+cliCloneTree (HashMapTree oid contents) = cliMakeTree <$> liftIO (newIORef =<< readIORef oid) <*> liftIO (newIORef =<< readIORef contents) cliModifyTree :: Git.MonadGit m- => Tree m+ => Tree m Git.PersistentTree -> FilePath -> Bool -> (Maybe (TreeEntry m) -> Git.ModifyTreeResult (CmdLineRepository m))- -> CmdLineRepository m (Tree m, Maybe (TreeEntry m))+ -> CmdLineRepository m (Tree m Git.PersistentTree, Maybe (TreeEntry m)) cliModifyTree t path createIfNotExist f = fmap Git.fromModifyTreeResult <$> doModifyTree t (Git.splitPath path) createIfNotExist@@ -551,7 +522,8 @@ then HashMap.delete name else HashMap.insert name (Git.treeEntry st) -cliLookupTree :: Git.MonadGit m => TreeOid m -> CmdLineRepository m (Tree m)+cliLookupTree :: Git.MonadGit m+ => TreeOid m -> CmdLineRepository m (Tree m Git.PersistentTree) cliLookupTree oid@(Tagged (getOid -> sha)) = do contents <- runGit ["ls-tree", "-z", sha] oidRef <- liftIO $ newIORef (Just oid)@@ -577,7 +549,7 @@ _ -> error "This cannot happen") cliWriteTree :: Git.MonadGit m- => Tree m -> CmdLineRepository m (TreeOid m)+ => Tree m Git.PersistentTree -> CmdLineRepository m (TreeOid m) cliWriteTree tree = do contents <- liftIO $ readIORef (cliTreeContents tree) rendered <- mapM renderLine (HashMap.toList contents)@@ -605,7 +577,7 @@ cliTraverseEntries :: Git.MonadGit m => (FilePath -> TreeEntry m -> CmdLineRepository m b)- -> Tree m+ -> Tree m Git.PersistentTree -> CmdLineRepository m [b] cliTraverseEntries f tree = do Tagged (getOid -> sha) <- Git.writeTree tree
gitlib-cmdline.cabal view
@@ -1,5 +1,5 @@ Name: gitlib-cmdline-Version: 1.1.1+Version: 1.2.0 Synopsis: Gitlib repository backend that uses the git command-line tool. Description: Gitlib repository backend that uses the git command-line tool. License-file: LICENSE