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 +13/−13
- lib/Ribosome/Data/Ribosome.hs +2/−2
- proteome.cabal +2/−2
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