Skip to content

Commit

Permalink
Re #6372 Depend on tar-0.6.2.0
Browse files Browse the repository at this point in the history
tar-0.6.2.0 supports Unicode in file names (encoded as UTF-8).

Consequently, Stack no longer needs to UTF-8 encode file names.

Also adds test of `stack sdist .` with Unicode in file names.
  • Loading branch information
mpilgrem committed Apr 4, 2024
1 parent 7cba4de commit 1e9360c
Show file tree
Hide file tree
Showing 14 changed files with 94 additions and 197 deletions.
3 changes: 1 addition & 2 deletions package.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ dependencies:
- rio-prettyprint >= 0.1.8.0
- split
- stm
- tar >= 0.5.1.1 && < 0.6.0.0
- tar >= 0.6.2.0
- template-haskell
- text
- time
Expand Down Expand Up @@ -157,7 +157,6 @@ library:
- Build_stack
- Paths_stack
exposed-modules:
- Codec.Archive.Tar.Utf8
- Control.Concurrent.Execute
- Data.Attoparsec.Args
- Data.Attoparsec.Combinators
Expand Down
182 changes: 0 additions & 182 deletions src/Codec/Archive/Tar/Utf8.hs

This file was deleted.

9 changes: 2 additions & 7 deletions src/Stack/SDist.hs
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,14 @@ module Stack.SDist
, readLocalPackage
) where

import qualified Codec.Archive.Tar.Utf8 as Tar
import qualified Codec.Archive.Tar as Tar
import qualified Codec.Archive.Tar.Entry as Tar
import qualified Codec.Compression.GZip as GZip
import Conduit ( runConduitRes, sourceLazy, sinkFileCautious )
import Control.Concurrent.Execute
( ActionContext (..), Concurrency (..) )
import Control.Monad.Extra ( whenJust )
import qualified Data.ByteString as S
import qualified Data.ByteString.Char8 as S8
import qualified Data.ByteString.Lazy as L
import Data.Char ( toLower )
import Data.Data ( cast )
Expand Down Expand Up @@ -252,13 +251,9 @@ getSDistTarball mpvpBounds pkgDir = do
-- prone and more predictable to read everything in at once, so that's what
-- we're doing for now:
let tarPath isDir fp =
case Tar.toTarPath isDir (forceUtf8Enc (pkgIdName FP.</> fp)) of
case Tar.toTarPath isDir (pkgIdName FP.</> fp) of
Left e -> prettyThrowIO $ ToTarPathException e
Right tp -> pure tp
-- convert a String of proper characters to a String of bytes in UTF8
-- encoding masquerading as characters. This is necessary for tricking the
-- tar package into proper character encoding.
forceUtf8Enc = S8.unpack . T.encodeUtf8 . T.pack
packWith f isDir fp = liftIO $ f (pkgFp FP.</> fp) =<< tarPath isDir fp
packDir = packWith Tar.packDirectoryEntry True
packFile fp
Expand Down
7 changes: 7 additions & 0 deletions stack-ghc-9.8.2.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@

snapshot: nightly-2024-04-04 # GHC 9.8.2

extra-deps:
# Dependency of tar >= 0.6.2.0:
- os-string-2.0.2@sha256:32fa47f8345a2c0662fb602fc42e4b674e41ec48079b68bdecb4b6f68032c24e,3259
# nightly-2024-04-04 provides tar-0.5.1.1, which does not support Unicode
# filenames:
- tar-0.6.2.0@sha256:619828cae098a7b6deeb0316e12f55011101d88f756787ed024ceedb81cf1eba,4576

docker:
enable: false
repo: quay.io/benz0li/ghc-musl:9.8.1
Expand Down
16 changes: 15 additions & 1 deletion stack-ghc-9.8.2.yaml.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,21 @@
# For more information, please see the documentation at:
# https://docs.haskellstack.org/en/stable/lock_files

packages: []
packages:
- completed:
hackage: os-string-2.0.2@sha256:32fa47f8345a2c0662fb602fc42e4b674e41ec48079b68bdecb4b6f68032c24e,3259
pantry-tree:
sha256: 5b1dbaf1663005907462032997264b7942befb9fc108491c1fdd5e488ac0817e
size: 2217
original:
hackage: os-string-2.0.2@sha256:32fa47f8345a2c0662fb602fc42e4b674e41ec48079b68bdecb4b6f68032c24e,3259
- completed:
hackage: tar-0.6.2.0@sha256:619828cae098a7b6deeb0316e12f55011101d88f756787ed024ceedb81cf1eba,4576
pantry-tree:
sha256: 1dde50961e9d1a6e6f820d918c0edbbd9673c83afdd300e0aae40a691e8151df
size: 2168
original:
hackage: tar-0.6.2.0@sha256:619828cae098a7b6deeb0316e12f55011101d88f756787ed024ceedb81cf1eba,4576
snapshots:
- completed:
sha256: 31177dd01e2b7801b9347776d892d1e808396c21ab3b60f7f8c96856bdbe5f52
Expand Down
9 changes: 4 additions & 5 deletions stack.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,6 @@ flag supported-build

library
exposed-modules:
Codec.Archive.Tar.Utf8
Control.Concurrent.Execute
Data.Attoparsec.Args
Data.Attoparsec.Combinators
Expand Down Expand Up @@ -409,7 +408,7 @@ library
, rio-prettyprint >=0.1.8.0
, split
, stm
, tar >=0.5.1.1 && <0.6.0.0
, tar >=0.6.2.0
, template-haskell
, text
, time
Expand Down Expand Up @@ -532,7 +531,7 @@ executable stack
, split
, stack
, stm
, tar >=0.5.1.1 && <0.6.0.0
, tar >=0.6.2.0
, template-haskell
, text
, time
Expand Down Expand Up @@ -634,7 +633,7 @@ executable stack-integration-test
, rio-prettyprint >=0.1.8.0
, split
, stm
, tar >=0.5.1.1 && <0.6.0.0
, tar >=0.6.2.0
, template-haskell
, text
, time
Expand Down Expand Up @@ -752,7 +751,7 @@ test-suite stack-unit-test
, split
, stack
, stm
, tar >=0.5.1.1 && <0.6.0.0
, tar >=0.6.2.0
, template-haskell
, text
, time
Expand Down
4 changes: 4 additions & 0 deletions stack.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,13 @@ extra-deps:
# Cabal is pruned because process is a GHC boot package, and has to be specified
# again.
- Cabal-3.10.1.0@sha256:6d11adf7847d9734e7b02785ff831b5a0d11536bfbcefd6634b2b08411c63c94,12316
# Dependency of tar >= 0.6.2.0:
- os-string-2.0.2@sha256:32fa47f8345a2c0662fb602fc42e4b674e41ec48079b68bdecb4b6f68032c24e,3259
- pantry-0.10.0@sha256:6f99ee8d7cfeeb0e2513638618acf80c72d018e7f10120048fa120a409b9dcd2,7864
# GHC 9.6.4 comes with process-1.6.17.0, which can segfault on macOS.
- process-1.6.18.0@sha256:cd0a3e0376b5a8525983d3131a31e52f9ffefc278ce635eec45a9d3987b8be3e,3025
# lts-22.7 provides tar-0.5.1.1, which does not support Unicode filenames:
- tar-0.6.2.0@sha256:619828cae098a7b6deeb0316e12f55011101d88f756787ed024ceedb81cf1eba,4576

docker:
enable: false
Expand Down
14 changes: 14 additions & 0 deletions stack.yaml.lock
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@ packages:
size: 9223
original:
hackage: Cabal-3.10.1.0@sha256:6d11adf7847d9734e7b02785ff831b5a0d11536bfbcefd6634b2b08411c63c94,12316
- completed:
hackage: os-string-2.0.2@sha256:32fa47f8345a2c0662fb602fc42e4b674e41ec48079b68bdecb4b6f68032c24e,3259
pantry-tree:
sha256: 5b1dbaf1663005907462032997264b7942befb9fc108491c1fdd5e488ac0817e
size: 2217
original:
hackage: os-string-2.0.2@sha256:32fa47f8345a2c0662fb602fc42e4b674e41ec48079b68bdecb4b6f68032c24e,3259
- completed:
hackage: pantry-0.10.0@sha256:6f99ee8d7cfeeb0e2513638618acf80c72d018e7f10120048fa120a409b9dcd2,7864
pantry-tree:
Expand All @@ -25,6 +32,13 @@ packages:
size: 1675
original:
hackage: process-1.6.18.0@sha256:cd0a3e0376b5a8525983d3131a31e52f9ffefc278ce635eec45a9d3987b8be3e,3025
- completed:
hackage: tar-0.6.2.0@sha256:619828cae098a7b6deeb0316e12f55011101d88f756787ed024ceedb81cf1eba,4576
pantry-tree:
sha256: 1dde50961e9d1a6e6f820d918c0edbbd9673c83afdd300e0aae40a691e8151df
size: 2168
original:
hackage: tar-0.6.2.0@sha256:619828cae098a7b6deeb0316e12f55011101d88f756787ed024ceedb81cf1eba,4576
snapshots:
- completed:
sha256: 7b975b104cb3dbf0c297dfd01f936a4d2ee523241dd0b1ae960522b833fe3027
Expand Down
1 change: 1 addition & 0 deletions tests/integration/tests/6372-sdist-unicode-test/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
stack.yaml.lock
7 changes: 7 additions & 0 deletions tests/integration/tests/6372-sdist-unicode-test/Main.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import StackTest

main :: IO ()
main = do
stack ["clean"]
stack ["build", "--dry-run"]
stack ["sdist", "."]
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
name: test١٢٣

Check failure on line 1 in tests/integration/tests/6372-sdist-unicode-test/files/package.yaml

View workflow job for this annotation

GitHub Actions / Linting

1:21 [colons] too many spaces after colon
version: 0.1.0.0

Check failure on line 2 in tests/integration/tests/6372-sdist-unicode-test/files/package.yaml

View workflow job for this annotation

GitHub Actions / Linting

2:21 [colons] too many spaces after colon
license: BSD-3-Clause

Check failure on line 3 in tests/integration/tests/6372-sdist-unicode-test/files/package.yaml

View workflow job for this annotation

GitHub Actions / Linting

3:21 [colons] too many spaces after colon
description: Test of Unicode characters in file names

Check failure on line 4 in tests/integration/tests/6372-sdist-unicode-test/files/package.yaml

View workflow job for this annotation

GitHub Actions / Linting

4:21 [colons] too many spaces after colon
dependencies:
- base < 5
library:
source-dirs: src
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module Libαβγ
( someFunc
) where

someFunc :: IO ()
someFunc = putStrLn "someFunc"
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
snapshot: lts-22.7
Loading

0 comments on commit 1e9360c

Please sign in to comment.