Skip to content

Commit ff9daa2

Browse files
tests: make UserConfig unit tests concurrency-safe with unique tempiles (#11759)
* tests: make UserConfig unit tests concurrency-safe with unique temp files (#26) tests: use unique temp files in UserConfig bracketTest Agent-Logs-Url: https://github.com/ulysses4ever/cabal/sessions/043e3696-3cda-43aa-aa50-e483ec531d13 Co-authored-by: ulysses4ever <6832600+ulysses4ever@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: ulysses4ever <6832600+ulysses4ever@users.noreply.github.com> * Use `writeFileAtomic` in `Distribution.Client.Config` Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: ulysses4ever <6832600+ulysses4ever@users.noreply.github.com> * Put renameFile back * Import replicateM in UserConfig.hs * Remove concurrentUpdateConfig test case * fixup! unused imports --------- Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: ulysses4ever <6832600+ulysses4ever@users.noreply.github.com>
1 parent f444d1b commit ff9daa2

2 files changed

Lines changed: 11 additions & 6 deletions

File tree

cabal-install/src/Distribution/Client/Config.hs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ import Distribution.Utils.NubList
114114
)
115115

116116
import qualified Data.ByteString as BS
117+
import qualified Data.ByteString.Lazy as LBS
117118
import qualified Data.Map as M
118119
import Distribution.Client.Errors
119120
import Distribution.Client.HttpUtils
@@ -208,6 +209,7 @@ import Distribution.Simple.Utils
208209
, notice
209210
, toUTF8BS
210211
, warn
212+
, writeFileAtomic
211213
)
212214
import Distribution.Solver.Types.ConstraintSource
213215
import Distribution.Utils.Path (getSymbolicPath, unsafeMakeSymbolicPath)
@@ -233,7 +235,6 @@ import System.Directory
233235
import System.FilePath
234236
( normalise
235237
, takeDirectory
236-
, (<.>)
237238
, (</>)
238239
)
239240
import System.IO.Error
@@ -1078,11 +1079,10 @@ createDefaultConfigFile verbosity extraLines filePath = do
10781079

10791080
writeConfigFile :: FilePath -> SavedConfig -> SavedConfig -> IO ()
10801081
writeConfigFile file comments vals = do
1081-
let tmpFile = file <.> "tmp"
10821082
createDirectoryIfMissing True (takeDirectory file)
1083-
writeFile tmpFile $
1084-
explanation ++ showConfigWithComments comments vals ++ "\n"
1085-
renameFile tmpFile file
1083+
writeFileAtomic file $
1084+
LBS.fromStrict . toUTF8BS $
1085+
explanation ++ showConfigWithComments comments vals ++ "\n"
10861086
where
10871087
explanation =
10881088
unlines

cabal-install/tests/UnitTests/Distribution/Client/UserConfig.hs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import System.Directory
1313
, getTemporaryDirectory
1414
)
1515
import System.FilePath ((</>))
16+
import System.IO (hClose, openTempFile)
1617

1718
import Test.Tasty
1819
import Test.Tasty.HUnit
@@ -99,7 +100,11 @@ bracketTest =
99100
bracket testSetup testTearDown
100101
where
101102
testSetup :: IO FilePath
102-
testSetup = fmap (</> "test-user-config") getCurrentDirectory
103+
testSetup = do
104+
cwd <- getCurrentDirectory
105+
(configFile, h) <- openTempFile cwd "test-user-config"
106+
hClose h
107+
pure configFile
103108

104109
testTearDown :: FilePath -> IO ()
105110
testTearDown configFile =

0 commit comments

Comments
 (0)