packages feed

proteome 0.3.7.0 → 0.3.8.0

raw patch · 3 files changed

+17/−17 lines, 3 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Proteome.Data.Env: _errors :: HasEnv c_atwu => Lens' c_atwu Errors
+ Proteome.Data.Env: _errors :: HasEnv c_atAB => Lens' c_atAB Errors
- Proteome.Data.Env: _mainProject :: HasEnv c_atwu => Lens' c_atwu Project
+ Proteome.Data.Env: _mainProject :: HasEnv c_atAB => Lens' c_atAB Project
- Proteome.Data.Env: _projects :: HasEnv c_atwu => Lens' c_atwu [Project]
+ Proteome.Data.Env: _projects :: HasEnv c_atAB => Lens' c_atAB [Project]
- Proteome.Data.Project: _lang :: HasProject c_apVO => Lens' c_apVO (Maybe ProjectLang)
+ Proteome.Data.Project: _lang :: HasProject c_apZV => Lens' c_apZV (Maybe ProjectLang)
- Proteome.Data.Project: _meta :: HasProject c_apVO => Lens' c_apVO ProjectMetadata
+ Proteome.Data.Project: _meta :: HasProject c_apZV => Lens' c_apZV ProjectMetadata
- Ribosome.Data.Ribosome: _internal :: HasRibosome c_agvb e_aggE => Lens' c_agvb (TVar RibosomeInternal)
+ Ribosome.Data.Ribosome: _internal :: HasRibosome c_agwi e_aghQ => Lens' c_agwi (TVar RibosomeInternal)
- Ribosome.Data.Ribosome: _locks :: HasRibosomeInternal c_aggu => Lens' c_aggu Locks
+ Ribosome.Data.Ribosome: _locks :: HasRibosomeInternal c_aghG => Lens' c_aghG Locks
- Ribosome.Data.Ribosome: type Locks = Map String ()
+ Ribosome.Data.Ribosome: type Locks = Map String (TMVar ())

Files

lib/Ribosome/Data/Ribo.hs view
@@ -9,9 +9,9 @@  import Control.Concurrent.STM.TVar (modifyTVar) import qualified Control.Lens as Lens (view, over, at)-import qualified Data.Map.Strict as Map (insert, delete)+import qualified Data.Map.Strict as Map (insert) import UnliftIO (finally)-import UnliftIO.STM (TVar, atomically, readTVarIO)+import UnliftIO.STM (TVar, TMVar, atomically, readTVarIO, newTMVarIO, tryTakeTMVar, tryPutTMVar) import Neovim (Neovim, ask) import Ribosome.Data.Ribosome (Ribosome(Ribosome), Locks) import qualified Ribosome.Data.Ribosome as Ribosome (_locks, locks)@@ -50,20 +50,20 @@   Ribosome _ intTv _ <- ask   atomically $ modifyTVar intTv $ Lens.over Ribosome._locks f -unlock :: String -> Ribo e ()-unlock key =-  modifyLocks $ Map.delete key--lock :: String -> Ribo e Bool-lock key = do+getOrCreateLock :: String -> Ribo e (TMVar ())+getOrCreateLock key = do   currentLock <- inspectLocks $ Lens.view $ Lens.at key   case currentLock of-    Just _ -> return True+    Just tv -> return tv     Nothing -> do-      modifyLocks $ Map.insert key ()-      return False+      tv <- newTMVarIO ()+      modifyLocks $ Map.insert key tv+      getOrCreateLock key  lockOrSkip :: String -> Ribo e () -> Ribo e () lockOrSkip key thunk = do-  running <- lock key-  if running then return () else finally thunk $ unlock key+  currentLock <- getOrCreateLock key+  currentState <- atomically $ tryTakeTMVar currentLock+  case currentState of+    Just _ -> finally thunk $ atomically $ tryPutTMVar currentLock ()+    Nothing -> return ()
lib/Ribosome/Data/Ribosome.hs view
@@ -14,12 +14,12 @@ ) where  import Control.Lens (makeClassy_)-import UnliftIO.STM (TVar, newTVarIO)+import UnliftIO.STM (TVar, newTVarIO, TMVar) import Control.Monad.IO.Class (MonadIO) import Data.Map.Strict (Map) import qualified Data.Map.Strict as Map (empty) -type Locks = Map String ()+type Locks = Map String (TMVar ())  newtype RibosomeInternal =   RibosomeInternal {
proteome.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 3835aa8ef5ed7fc0653a8b4d5cf6e0200e154f66d9076b365a05f2318ad73f73+-- hash: 4a4fe5d2c7d0d545c6bd569a39b33f33bda07bc0c6c5e88da960f4fdda134ea6  name:           proteome-version:        0.3.7.0+version:        0.3.8.0 synopsis:       neovim project manager description:    Please see the README on GitHub at <https://github.com/tek/proteome-hs> category:       Neovim