@@ -9,6 +9,8 @@ module Stuff
99 , temp
1010 , findRoot
1111 , withRootLock
12+ , withRegistryLock
13+ , withPackageLock
1214 , PackageCache
1315 , getPackageCache
1416 , registry
@@ -123,7 +125,18 @@ withRootLock :: FilePath -> IO a -> IO a
123125withRootLock root work =
124126 do let dir = stuff root
125127 Dir.createDirectoryIfMissing True dir
126− Lock.withFileLock (dir </> "project.lock") Lock.Exclusive (\_ -> work)
128+ Lock.withFileLock (dir </> "lock") Lock.Exclusive (\_ -> work)
129+
130+
131+withRegistryLock :: (PackageCache -> IO a) -> IO a
132+withRegistryLock callback =
133+ do cache@(PackageCache dir) <- getPackageCache
134+ Lock.withFileLock (dir </> "lock") Lock.Exclusive (\_ -> callback cache)
135+
136+
137+withPackageLock :: PackageCache -> Pkg.Name -> V.Version -> IO a -> IO a
138+withPackageLock cache pkg vsn work =
139+ Lock.withFileLock (package cache pkg vsn </> "lock") Lock.Exclusive (\_ -> work)
127140
128141
129142