From 2659af383087666d499b73ac296d8447d7230308 Mon Sep 17 00:00:00 2001 From: Mike Pilgrem Date: Sun, 23 Feb 2025 19:18:53 +0000 Subject: [PATCH] Implement `extra-files` --- CHANGELOG.md | 1 + README.md | 1 + src/Hpack/Config.hs | 6 ++++++ src/Hpack/Render.hs | 1 + test/EndToEndSpec.hs | 14 ++++++++++++++ 5 files changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d61f5123..dc87e207 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ ## Unreleased + - Add support for `extra-files` (see #603) ## Changes in 0.38.0 - Generate `build-tool-depends` instead of `build-tools` starting with diff --git a/README.md b/README.md index 825c4cd4..2fd305bb 100644 --- a/README.md +++ b/README.md @@ -143,6 +143,7 @@ library: | `build-type` | · | `Simple`, or `Custom` if `custom-setup` exists | Must be `Simple`, `Configure`, `Make`, or `Custom` | | | | `extra-source-files` | · | | Accepts [glob patterns](#file-globbing) | | | | `extra-doc-files` | · | | Accepts [glob patterns](#file-globbing) | | `0.21.2` | +| `extra-files` | · | | Accepts [glob patterns](#file-globbing) | | UNRELEASED | | `data-files` | · | | Accepts [glob patterns](#file-globbing) | | | | `data-dir` | · | | | | | | `github` | `source-repository head` | | Accepts `owner/repo` or `owner/repo/subdir` | `github: foo/bar` | diff --git a/src/Hpack/Config.hs b/src/Hpack/Config.hs index 754c1e9a..8177e812 100644 --- a/src/Hpack/Config.hs +++ b/src/Hpack/Config.hs @@ -160,6 +160,7 @@ package name version = Package { , packageFlags = [] , packageExtraSourceFiles = [] , packageExtraDocFiles = [] + , packageExtraFiles = [] , packageDataFiles = [] , packageDataDir = Nothing , packageSourceRepository = Nothing @@ -602,6 +603,7 @@ data PackageConfig_ library executable = PackageConfig { , packageConfigFlags :: Maybe (Map String FlagSection) , packageConfigExtraSourceFiles :: Maybe (List FilePath) , packageConfigExtraDocFiles :: Maybe (List FilePath) +, packageConfigExtraFiles :: Maybe (List FilePath) , packageConfigDataFiles :: Maybe (List FilePath) , packageConfigDataDir :: Maybe FilePath , packageConfigGithub :: Maybe GitHub @@ -831,6 +833,7 @@ ensureRequiredCabalVersion inferredLicense pkg@Package{..} = pkg { makeVersion [2,2] <$ guard mustSPDX , makeVersion [1,24] <$ packageCustomSetup , makeVersion [1,18] <$ guard (not (null packageExtraDocFiles)) + , makeVersion [3,14] <$ guard (not (null packageExtraFiles)) , packageLibrary >>= libraryCabalVersion , internalLibsCabalVersion packageInternalLibraries , executablesCabalVersion packageExecutables @@ -1024,6 +1027,7 @@ data Package = Package { , packageFlags :: [Flag] , packageExtraSourceFiles :: [Path] , packageExtraDocFiles :: [Path] +, packageExtraFiles :: [Path] , packageDataFiles :: [Path] , packageDataDir :: Maybe FilePath , packageSourceRepository :: Maybe SourceRepository @@ -1272,6 +1276,7 @@ toPackage_ dir (Product g PackageConfig{..}) = do extraSourceFiles <- expandGlobs "extra-source-files" dir (fromMaybeList packageConfigExtraSourceFiles) extraDocFiles <- expandGlobs "extra-doc-files" dir (fromMaybeList packageConfigExtraDocFiles) + extraFiles <- expandGlobs "extra-files" dir (fromMaybeList packageConfigExtraFiles) let dataBaseDir = maybe dir (dir ) packageConfigDataDir @@ -1316,6 +1321,7 @@ toPackage_ dir (Product g PackageConfig{..}) = do , packageFlags = flags , packageExtraSourceFiles = extraSourceFiles , packageExtraDocFiles = extraDocFiles + , packageExtraFiles = extraFiles , packageDataFiles = dataFiles , packageDataDir = packageConfigDataDir , packageSourceRepository = sourceRepository diff --git a/src/Hpack/Render.hs b/src/Hpack/Render.hs index d0374a83..1cdae985 100644 --- a/src/Hpack/Render.hs +++ b/src/Hpack/Render.hs @@ -84,6 +84,7 @@ renderPackageWith settings headerFieldsAlignment existingFieldOrder sectionsFiel Field "tested-with" $ CommaSeparatedList packageTestedWith , Field "extra-source-files" (renderPaths packageExtraSourceFiles) , Field "extra-doc-files" (renderPaths packageExtraDocFiles) + , Field "extra-files" (renderPaths packageExtraFiles) , Field "data-files" (renderPaths packageDataFiles) ] ++ maybe [] (return . Field "data-dir" . Literal) packageDataDir diff --git a/test/EndToEndSpec.hs b/test/EndToEndSpec.hs index 33e694e1..e63058cb 100644 --- a/test/EndToEndSpec.hs +++ b/test/EndToEndSpec.hs @@ -638,6 +638,20 @@ spec = around_ (inTempDirectoryNamed "my-package") $ do - "*.markdown" |] `shouldWarn` ["Specified pattern \"*.markdown\" for extra-doc-files does not match any files"] + describe "extra-files" $ do + it "accepts a list of files" $ do + touch "CHANGES.markdown" + touch "README.markdown" + [i| + extra-files: + - CHANGES.markdown + - README.markdown + |] `shouldRenderTo` (package [i| + extra-files: + CHANGES.markdown + README.markdown + |]) {packageCabalVersion = "3.14"} + describe "build-tools" $ do context "with known build tools" $ do context "when cabal-version < 2" $ do