From 8bfecbc98a0171b7d4bee43d37f7485fb4eed07d Mon Sep 17 00:00:00 2001 From: brandon s allbery kf8nh Date: Sat, 6 Sep 2025 17:35:53 -0400 Subject: [PATCH] support tar-0.7.0.0 Use the new functionality (which didn't make the changelog) when available; see #11131. This moves `createTarGzFile` to `Distribution.Client.Compat.Tar` with a re-export. --- Cabal-tests/Cabal-tests.cabal | 2 +- cabal-install/cabal-install.cabal | 2 +- .../src/Distribution/Client/Compat/Tar.hs | 18 ++++++++++++++++++ cabal-install/src/Distribution/Client/Tar.hs | 17 +---------------- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/Cabal-tests/Cabal-tests.cabal b/Cabal-tests/Cabal-tests.cabal index f8d06955d71..aadfbb9d684 100644 --- a/Cabal-tests/Cabal-tests.cabal +++ b/Cabal-tests/Cabal-tests.cabal @@ -155,7 +155,7 @@ test-suite hackage-tests , base-orphans >=0.6 && <0.10 , clock >=0.8 && <0.9 , optparse-applicative >=0.13.2.0 && <0.19 - , tar >=0.5.0.3 && <0.7 + , tar >=0.5.0.3 && <0.8 , tree-diff >=0.1 && <0.4 ghc-options: -Wall -rtsopts -threaded diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index b9fb2fb99e8..53eb8dbf294 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -250,7 +250,7 @@ library , process >= 1.2.3.0 && < 1.7 , random >= 1.2 && < 1.4 , stm >= 2.0 && < 2.6 - , tar >= 0.5.0.3 && < 0.7 + , tar >= 0.5.0.3 && < 0.8 , time >= 1.5.0.1 && < 1.16 , zlib >= 0.5.3 && < 0.8 , hackage-security >= 0.6.2.0 && < 0.7 diff --git a/cabal-install/src/Distribution/Client/Compat/Tar.hs b/cabal-install/src/Distribution/Client/Compat/Tar.hs index b2649bc2e2b..eb0eb96eeb2 100644 --- a/cabal-install/src/Distribution/Client/Compat/Tar.hs +++ b/cabal-install/src/Distribution/Client/Compat/Tar.hs @@ -4,6 +4,7 @@ {- FOURMOLU_DISABLE -} module Distribution.Client.Compat.Tar ( extractTarGzFile + , createTarGzFile #if MIN_VERSION_tar(0,6,0) , Tar.Entry , Tar.Entries @@ -27,6 +28,7 @@ import qualified Codec.Archive.Tar.Check as Tar #else import qualified Codec.Archive.Tar.Entry as Tar #endif +import qualified Codec.Compression.GZip as GZip import qualified Data.ByteString.Lazy as BS import qualified Distribution.Client.GZipUtils as GZipUtils @@ -65,4 +67,20 @@ extractTarGzFile dir expected tar = . Tar.read . GZipUtils.maybeDecompress =<< BS.readFile tar + +createTarGzFile + :: FilePath + -- ^ Full Tarball path + -> FilePath + -- ^ Base directory + -> FilePath + -- ^ Directory to archive, relative to base dir + -> IO () +createTarGzFile tar base dir = +#if MIN_VERSION_tar(0,7,0) + BS.writeFile tar . GZip.compress =<< Tar.write' =<< Tar.pack' base [dir] +#else + BS.writeFile tar . GZip.compress . Tar.write =<< Tar.pack base [dir] +#endif + {- FOURMOLU_ENABLE -} diff --git a/cabal-install/src/Distribution/Client/Tar.hs b/cabal-install/src/Distribution/Client/Tar.hs index 3772cc672e2..4cdb0726d11 100644 --- a/cabal-install/src/Distribution/Client/Tar.hs +++ b/cabal-install/src/Distribution/Client/Tar.hs @@ -17,7 +17,7 @@ -- Reading, writing and manipulating \"@.tar@\" archive files. module Distribution.Client.Tar ( -- * @tar.gz@ operations - createTarGzFile + TarComp.createTarGzFile , TarComp.extractTarGzFile -- * Other local utils @@ -34,8 +34,6 @@ import Prelude () import qualified Codec.Archive.Tar as Tar import qualified Codec.Archive.Tar.Entry as Tar -import qualified Codec.Compression.GZip as GZip -import qualified Data.ByteString.Lazy as BS import qualified Distribution.Client.Compat.Tar as TarComp -- for foldEntries... @@ -45,19 +43,6 @@ import Control.Exception (throw) -- * High level operations --- - -createTarGzFile - :: FilePath - -- ^ Full Tarball path - -> FilePath - -- ^ Base directory - -> FilePath - -- ^ Directory to archive, relative to base dir - -> IO () -createTarGzFile tar base dir = - BS.writeFile tar . GZip.compress . Tar.write =<< Tar.pack base [dir] - -- | Type code for the local build tree reference entry type. We don't use the -- symbolic link entry type because it allows only 100 ASCII characters for the -- path.