zip 1.3.2 → 1.4.0
raw patch · 6 files changed
+77/−5 lines, 6 files
Files
- CHANGELOG.md +9/−0
- Codec/Archive/Zip.hs +4/−1
- Codec/Archive/Zip/Internal.hs +1/−1
- Codec/Archive/Zip/Unix.hs +42/−0
- tests/Main.hs +14/−2
- zip.cabal +7/−1
CHANGELOG.md view
@@ -1,3 +1,12 @@+## Zip 1.4.0++* The “version made by” info inside archive now correctly sets Unix as the+ OS that produced the archive when the library is compiled on Unix. This+ allows other utilities such as `unzip` to read and correctly restore file+ permissions. [Issue 62](https://github.com/mrkkrp/zip/issues/62).++* Added the `Codec.Archive.Zip.Unix` module.+ ## Zip 1.3.2 * Fix a bug where removing a temporary file failed in the prescence of
Codec/Archive/Zip.hs view
@@ -532,7 +532,10 @@ -> ZipArchive () deleteExtraField n s = addPending (I.DeleteExtraField n s) --- | Set external file attributes.+-- | Set external file attributes. This function can be used to set file+-- permissions.+--+-- See also: "Codec.Archive.Zip.Unix". -- -- @since 1.2.0
Codec/Archive/Zip/Internal.hs view
@@ -974,7 +974,7 @@ -- specification. fromVersion :: Version -> Word16-fromVersion v = fromIntegral (major * 10 + minor)+fromVersion v = fromIntegral ((ZIP_OS `shiftL` 8) .|. (major * 10 + minor)) where (major,minor) = case versionBranch v of v0:v1:_ -> (v0, v1)
+ Codec/Archive/Zip/Unix.hs view
@@ -0,0 +1,42 @@+-- |+-- Module : Codec.Archive.Zip.Unix+-- Copyright : © 2016–present Mark Karpov+-- License : BSD 3 clause+--+-- Maintainer : Mark Karpov <markkarpov92@gmail.com>+-- Stability : experimental+-- Portability : portable+--+-- Unix specific functionality of zip archives.+--+-- @since 1.4.0++module Codec.Archive.Zip.Unix+ ( toFileMode+ , fromFileMode )+where++import Data.Bits+import Data.Word+import System.Posix.Types (CMode (..))++-- | Convert external attributes to the file info.+--+-- >>> toFileMode 2179792896+-- 0o0755+--+-- @since 1.4.0++toFileMode :: Word32 -> CMode+toFileMode w = CMode $ (w `shiftR` 16) .&. 0x0fff++-- | Convert external attributes to the file info. The function assumes a+-- regular file and keeps DOS attributes untouched.+--+-- >>> fromFileMode 0o0755+-- 2179792896+--+-- @since 1.4.0++fromFileMode :: CMode -> Word32+fromFileMode (CMode c) = (0o100000 .|. c) `shiftL` 16
tests/Main.hs view
@@ -8,9 +8,10 @@ import Codec.Archive.Zip import Codec.Archive.Zip.CP437+import Codec.Archive.Zip.Unix import Control.Monad import Control.Monad.IO.Class-import Data.Bits (complement)+import Data.Bits import Data.ByteString (ByteString) import Data.List (intercalate) import Data.Map (Map, (!))@@ -18,13 +19,14 @@ import Data.Text (Text) import Data.Time import Data.Version+import Data.Word import System.Directory import System.FilePath ((</>)) import System.IO import System.IO.Error (isDoesNotExistError) import System.IO.Temp import Test.Hspec-import Test.QuickCheck+import Test.QuickCheck hiding ((.&.)) import qualified Data.ByteString as B import qualified Data.ByteString.Builder as LB import qualified Data.ByteString.Lazy as LB@@ -52,6 +54,7 @@ describe "unEntrySelector" unEntrySelectorSpec describe "getEntryName" getEntryNameSpec describe "decodeCP437" decodeCP437Spec+ describe "fromFileMode" fromFileModeSpec around withSandbox $ do describe "createArchive" createArchiveSpec describe "withArchive" withArchiveSpec@@ -249,6 +252,15 @@ c [0xa0..0xbf] "áíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐" c [0xc0..0xdf] "└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀" c [0xe0..0xff] "αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "++fromFileModeSpec :: Spec+fromFileModeSpec =+ context "UNIX helpers" $ do+ it "toFileMode . fromFileMode == id .&. 0x0fffff" . property $ \mode ->+ (toFileMode . fromFileMode) (fromIntegral mode)+ == fromIntegral (mode .&. (0x0fff :: Word16))+ it "toFileMode == toFileMode . fromFileMode . toFileMode" . property $ \mode ->+ toFileMode mode == (toFileMode.fromFileMode.toFileMode) mode ---------------------------------------------------------------------------- -- Primitive editing/querying actions
zip.cabal view
@@ -1,5 +1,5 @@ name: zip-version: 1.3.2+version: 1.4.0 cabal-version: 1.18 tested-with: GHC==8.4.4, GHC==8.6.5, GHC==8.8.3 license: BSD3@@ -49,6 +49,7 @@ build-depends: bzlib-conduit >= 0.3 && < 0.4 exposed-modules: Codec.Archive.Zip , Codec.Archive.Zip.CP437+ , Codec.Archive.Zip.Unix other-modules: Codec.Archive.Zip.Internal , Codec.Archive.Zip.Type if flag(dev)@@ -62,6 +63,11 @@ if !flag(disable-bzip2) cpp-options: -DENABLE_BZIP2 default-language: Haskell2010++ if os(windows)+ cpp-options: -DZIP_OS=0+ else+ cpp-options: -DZIP_OS=3 test-suite tests main-is: Main.hs