@@ -69,8 +69,8 @@ cmdBuild
6969 getSourceMeta <- addOracle $ \ (GetSourceMeta PackageId {pkgName, pkgVersion}) ->
7070 readSourceMeta' $ inputDir </> pkgName </> pkgVersion </> " meta.toml"
7171
72- getSourceDir <- addOracle $ \ (GetSourceDir pkgId@ PackageId {pkgName, pkgVersion} ) -> do
73- SourceMeta {sourceUrl, sourceSubdir} <- getSourceMeta (GetSourceMeta pkgId)
72+ getSourceDir <- addOracle $ \ (GetSourceDir pkgId) -> do
73+ SourceMeta {sourceUrl, sourceSubdir, sourceForceVersion } <- getSourceMeta (GetSourceMeta pkgId)
7474 let urlDir = " _cache" </> urlToFileName sourceUrl
7575
7676 need [urlDir </> " .downloaded" ]
@@ -86,15 +86,10 @@ cmdBuild
8686 Just s -> urlDir </> s
8787 Nothing -> urlDir
8888
89- let patchesDir = inputDir </> pkgName </> pkgVersion </> " patches "
90- hasPatches <- doesDirectoryExist patchesDir
89+ when sourceForceVersion $
90+ forcePackageVersion srcDir pkgId
9191
92- when hasPatches $ do
93- patches <- getDirectoryFiles (inputDir </> pkgName </> pkgVersion </> " patches" ) [" *.patch" ]
94- for_ patches $ \ patch -> do
95- let patchfile = inputDir </> pkgName </> pkgVersion </> " patches" </> patch
96- putInfo $ " Applying patch: " <> patch
97- cmd_ Shell (Cwd srcDir) (FileStdin patchfile) " patch --backup -p1"
92+ applyPatches inputDir srcDir pkgId
9893
9994 return srcDir
10095
@@ -421,3 +416,33 @@ mkTarEntry filePath indexPath timestamp = do
421416 Tar. groupId = 0
422417 }
423418 }
419+
420+ applyPatches :: FilePath -> FilePath -> PackageId -> Action ()
421+ applyPatches inputDir srcDir PackageId {pkgName, pkgVersion} = do
422+ let patchesDir = inputDir </> pkgName </> pkgVersion </> " patches"
423+ hasPatches <- doesDirectoryExist patchesDir
424+
425+ when hasPatches $ do
426+ patches <- getDirectoryFiles (inputDir </> pkgName </> pkgVersion </> " patches" ) [" *.patch" ]
427+ for_ patches $ \ patch -> do
428+ let patchfile = inputDir </> pkgName </> pkgVersion </> " patches" </> patch
429+ putInfo $ " Applying patch: " <> patch
430+ cmd_ Shell (Cwd srcDir) (FileStdin patchfile) " patch --backup -p1"
431+
432+ forcePackageVersion :: FilePath -> PackageId -> Action ()
433+ forcePackageVersion srcDir PackageId {pkgName, pkgVersion} = do
434+ let cabalFilePath = srcDir </> pkgName <.> " cabal"
435+ cabalFile <- readFile' cabalFilePath
436+ writeFile' cabalFilePath (replaceVersion pkgVersion cabalFile)
437+
438+ replaceVersion :: String -> String -> String
439+ replaceVersion version = unlines . map f . lines
440+ where
441+ f line
442+ | " version" `isPrefixOf` line =
443+ unlines
444+ [ " -- version field replaced by foliage" ,
445+ " --" <> line,
446+ " version:\t " ++ version
447+ ]
448+ f line = line
0 commit comments