Skip to content

Commit f07f350

Browse files
committed
Allow more general flag revisions
Allow changing manual flag defaults. Allow changing flags from manual to automatic.
1 parent 1594efc commit f07f350

File tree

3 files changed

+68
-25
lines changed

3 files changed

+68
-25
lines changed

src/Distribution/Server/Util/CabalRevisions.hs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -250,21 +250,6 @@ checkFlag flagOld flagNew = do
250250
checkSame "Cannot change ordering of flags"
251251
(flagName flagOld) (flagName flagNew)
252252

253-
-- Automatic flags' defaults may be changed as they don't make new
254-
-- configurations reachable by the solver that weren't before
255-
--
256-
-- Moreover, automatic flags may be converted into manual flags
257-
-- but not the other way round.
258-
--
259-
-- NB: We always allow to change the flag description as it has
260-
-- purely informational value
261-
when (flagManual flagOld) $ do
262-
checkSame "Cannot change the default of a manual flag"
263-
(flagDefault flagOld) (flagDefault flagNew)
264-
265-
checkSame "Cannot change a manual flag into an automatic flag"
266-
(flagManual flagOld) (flagManual flagNew)
267-
268253
let fname = unFlagName (flagName flagOld)
269254

270255
changesOk ("type of flag '" ++ fname ++ "'")

tests/HighLevelTest.hs

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ runPackageUploadTests = do
218218
(testpackageTarFilename, testpackageTarFileContent, _, _, _, _) =
219219
testpackage
220220
(testpackageTarFilenameVariant, testpackageTarFileContentVariant, _, _, _, _) =
221-
mkPackage "testPackage"
221+
mkPackage "testPackage" Nothing
222222
uploadTime = "Tue Oct 18 20:54:28 UTC 2010"
223223
uploadTimeISO = "2010-10-18T20:54:28Z"
224224
uploadTimeISO2 = "2020-10-18T20:54:28Z"
@@ -234,11 +234,66 @@ runRevisionTests = do
234234
xs <- getUrl NoAuth "/package/testpackage-1.0.0.0/revision/1.cabal"
235235
unless (xs == revisedCabalFileContent) $
236236
die "Bad revised cabal file content"
237+
do info "Uploading testpackage with flags"
238+
postFile isOk
239+
(Auth "HackageTestUser1" "testpass1")
240+
"/packages/" "package"
241+
(testpackageFlagsTarFilename, testpackageFlagsTarFileContent)
242+
do info "Revising default for automatic flag"
243+
post (Auth "HackageTestUser1" "testpass1") "/package/testpackageFlags-1.0.0.0/testpackageFlags.cabal/edit"
244+
[ ("cabalfile", revisedCabalFileContentDefaultAutomaticFlag)
245+
, ("publish", "Publish new revision")
246+
]
247+
do info "Checking automatic default flag revision exists"
248+
xs <- getUrl NoAuth "/package/testpackageFlags-1.0.0.0/revision/1.cabal"
249+
unless (xs == revisedCabalFileContentDefaultAutomaticFlag) $
250+
die "Bad revised cabal file content"
251+
do info "Revising flag to manual"
252+
post (Auth "HackageTestUser1" "testpass1") "/package/testpackageFlags-1.0.0.0/testpackageFlags.cabal/edit"
253+
[ ("cabalfile", revisedCabalFileContentToManualFlag)
254+
, ("publish", "Publish new revision")
255+
]
256+
do info "Checking automatic -> manual flag revision exists"
257+
xs <- getUrl NoAuth "/package/testpackageFlags-1.0.0.0/revision/2.cabal"
258+
unless (xs == revisedCabalFileContentToManualFlag) $
259+
die "Bad revised cabal file content"
260+
do info "Revising default for manual flag"
261+
post (Auth "HackageTestUser1" "testpass1") "/package/testpackageFlags-1.0.0.0/testpackageFlags.cabal/edit"
262+
[ ("cabalfile", revisedCabalFileContentDefaultManualFlag)
263+
, ("publish", "Publish new revision")
264+
]
265+
do info "Checking manual default flag revision exists"
266+
xs <- getUrl NoAuth "/package/testpackageFlags-1.0.0.0/revision/3.cabal"
267+
unless (xs == revisedCabalFileContentDefaultManualFlag) $
268+
die "Bad revised cabal file content"
269+
do info "Revising flag to automatic"
270+
post (Auth "HackageTestUser1" "testpass1") "/package/testpackageFlags-1.0.0.0/testpackageFlags.cabal/edit"
271+
[ ("cabalfile", revisedCabalFileContentToAutomaticFlag)
272+
, ("publish", "Publish new revision")
273+
]
274+
do info "Checking manual -> automatic flag revision exists"
275+
xs <- getUrl NoAuth "/package/testpackageFlags-1.0.0.0/revision/4.cabal"
276+
unless (xs == revisedCabalFileContentToAutomaticFlag) $
277+
die "Bad revised cabal file content"
237278
where
238279
(_, _, _, testpackageCabalFileContent, _, _) = testpackage
239280
revisedCabalFileContent =
240281
"x-revision: 1\ndescription: a description added by revision\n"
241282
++ testpackageCabalFileContent
283+
(testpackageFlagsTarFilename, testpackageFlagsTarFileContent, _, _, _, _) = mkPackage "testpackageFlags" $ Just $ flagDefaultManual False False
284+
revisedCabalFileContentDefaultAutomaticFlag = mkTestPackageRevisionFlagDefaultManual True False 1
285+
revisedCabalFileContentToManualFlag = mkTestPackageRevisionFlagDefaultManual True True 2
286+
revisedCabalFileContentDefaultManualFlag = mkTestPackageRevisionFlagDefaultManual False True 3
287+
revisedCabalFileContentToAutomaticFlag = mkTestPackageRevisionFlagDefaultManual False False 4
288+
flagDefaultManual flagDefault manual = unlines [
289+
"flag isTest",
290+
" default: " ++ show flagDefault,
291+
" manual: " ++ show manual]
292+
293+
mkTestPackageRevisionFlagDefaultManual :: Bool -> Bool -> Int -> String
294+
mkTestPackageRevisionFlagDefaultManual flagDefault manual revision =
295+
let (_, _, _, testpackageCabalFlagsFileContent, _, _) = mkPackage "testpackageFlags" $ Just $ flagDefaultManual flagDefault manual
296+
in "x-revision: " ++ show revision ++ "\n" ++ testpackageCabalFlagsFileContent
242297

243298
runPackageTests :: IO ()
244299
runPackageTests = do
@@ -308,4 +363,4 @@ runPackageTests = do
308363
= testpackage
309364

310365
testpackage :: (FilePath, String, FilePath, String, FilePath, String)
311-
testpackage = mkPackage "testpackage"
366+
testpackage = mkPackage "testpackage" Nothing

tests/Package.hs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,16 @@ import qualified Data.ByteString.Lazy.Char8 as BS
88
import Data.Char
99
import System.FilePath
1010

11-
mkPackage :: String -> (FilePath, -- Tar filename
12-
String, -- Tar file content
13-
FilePath, -- Cabal filename in index
14-
String, -- Cabal file content
15-
FilePath, -- Haskell filename in source tree
16-
String) -- Haskell file content
17-
mkPackage name = (name ++ "-1.0.0.0.tar.gz", BS.unpack targz,
11+
mkPackage :: String -> -- Package name
12+
Maybe String -> -- Optional additional Cabal file contents
13+
(FilePath, -- Tar filename
14+
String, -- Tar file content
15+
FilePath, -- Cabal filename in index
16+
String, -- Cabal file content
17+
FilePath, -- Haskell filename in source tree
18+
String) -- Haskell file content
19+
mkPackage name additionalCabalFileContents =
20+
(name ++ "-1.0.0.0.tar.gz", BS.unpack targz,
1821
name ++ "/1.0.0.0/" ++ name ++ ".cabal", cabalFile,
1922
modName <.> "hs", modFile)
2023
where targz = compress tar
@@ -39,7 +42,7 @@ mkPackage name = (name ++ "-1.0.0.0.tar.gz", BS.unpack targz,
3942
"",
4043
"Library {",
4144
" exposed-modules: " ++ modName,
42-
"}"]
45+
"}"] ++ maybe "" ("\n" ++) additionalCabalFileContents
4346
modFile = unlines [
4447
"module " ++ modName ++ " where",
4548
"f" ++ name ++ " :: () -> ()",

0 commit comments

Comments
 (0)