sak 0.1.2.3 → 0.1.2.4
raw patch · 6 files changed
+59/−14 lines, 6 filesdep +snappy-lazydep ~bz2
Dependencies added: snappy-lazy
Dependency ranges changed: bz2
Files
- CHANGELOG.md +4/−0
- README.md +6/−0
- man/sak.1 +2/−0
- sak.cabal +10/−1
- src/Compression.cpphs +34/−13
- src/Version.cpphs +3/−0
CHANGELOG.md view
@@ -1,5 +1,9 @@ # sak +## 0.1.2.4++ * Add snappy support+ ## 0.1.2.3 * Add `recompress` subcommand
README.md view
@@ -10,6 +10,12 @@ sak transcode sak-0.1.0.0.tar.gz sak-0.1.0.0.tar.lz ``` +To recompress a file:++```+sak recompress binary.tar.zst --best+```+ ### Bash Completions To get bash completions in your current shell session:
man/sak.1 view
@@ -65,6 +65,8 @@ deflate (0-9) .IP \[bu] 2 brotli (0-11)+.IP \[bu] 2+snappy .SH SHELL COMPLETIONS .PP To get shell completions in your current session:
sak.cabal view
@@ -1,6 +1,6 @@ cabal-version: 1.18 name: sak-version: 0.1.2.3+version: 0.1.2.4 license: BSD3 license-file: LICENSE copyright: Copyright: (c) 2020 Vanessa McHale@@ -25,6 +25,9 @@ description: Build with support for brotli encoding/decoding (disable this to statically link) +flag with-snappy+ description: Build with support for snappy encoding/decoding+ executable sak main-is: Main.hs build-tool-depends: cpphs:cpphs -any@@ -50,6 +53,12 @@ bytestring -any, directory >=1.3.1.0, parallel-io -any++ if flag(with-snappy)+ build-depends: snappy-lazy -any++ if flag(with-snappy)+ cpp-options: -DSNAPPY if flag(with-brotli) build-depends: brotli -any
src/Compression.cpphs view
@@ -13,19 +13,22 @@ ) where #ifdef BROTLI-import qualified Codec.Compression.Brotli as Br+import qualified Codec.Compression.Brotli as Br #endif-import qualified Codec.Compression.BZip as BZip-import qualified Codec.Compression.GZip as GZip-import qualified Codec.Compression.Lzma as Lzma-import qualified Codec.Compression.Zlib as Zlib-import qualified Codec.Compression.Zstd.Lazy as Zstd-import qualified Codec.Lz4 as Lz4-import qualified Codec.Lzip as Lzip-import qualified Data.ByteString.Lazy as BSL-import Data.List (isSuffixOf)-import System.FilePath (dropExtension, (-<.>))-import System.IO (IOMode (ReadMode), hFileSize, withFile)+import qualified Codec.Compression.BZip as BZip+import qualified Codec.Compression.GZip as GZip+import qualified Codec.Compression.Lzma as Lzma+#ifdef SNAPPY+import qualified Codec.Compression.Snappy.BSL as Snappy+#endif+import qualified Codec.Compression.Zlib as Zlib+import qualified Codec.Compression.Zstd.Lazy as Zstd+import qualified Codec.Lz4 as Lz4+import qualified Codec.Lzip as Lzip+import qualified Data.ByteString.Lazy as BSL+import Data.List (isSuffixOf)+import System.FilePath (dropExtension, (-<.>))+import System.IO (IOMode (ReadMode), hFileSize, withFile) data CompressionLevel = Best | Fastest@@ -40,6 +43,9 @@ #ifdef BROTLI | Brotli #endif+#ifdef SNAPPY+ | Snappy+#endif | Lz4 | Z | None@@ -56,6 +62,9 @@ #ifdef BROTLI ext Brotli = ".br" #endif+#ifdef SNAPPY+ext Snappy = ".sz"+#endif ext None = "" uncompressedExt :: FilePath -> FilePath@@ -69,7 +78,7 @@ | ".xcfbz2" `isSuffixOf` fp = fp -<.> ".xcf" | ".tbz2" `isSuffixOf` fp = fp -<.> "tar" | ".tbz" `isSuffixOf` fp = fp -<.> "tar"- | ".tbr" `isSuffixOf` fp = fp -<.> "tar"+ | ".tbr" `isSuffixOf` fp = fp -<.> "tar" | otherwise = dropExtension fp detectCompression :: FilePath -> Compression@@ -93,6 +102,9 @@ #ifdef BROTLI | ".br" `isSuffixOf` fp = Brotli #endif+#ifdef SNAPPY+ | ".sz" `isSuffixOf` fp = Snappy+#endif | otherwise = None -- error "Suffix not supported or invalid" toFileDecompressor :: Compression -> FilePath -> IO BSL.ByteString@@ -110,6 +122,9 @@ #ifdef BROTLI toDecompressor Brotli = Br.decompress #endif+#ifdef SNAPPY+toDecompressor Snappy = Snappy.decompress+#endif toDecompressor None = id check :: Compression -> BSL.ByteString -> IO ()@@ -139,6 +154,9 @@ #endif toInt :: Compression -> CompressionLevel -> Int+#ifdef SNAPPY+toInt Snappy _ = undefined+#endif #ifdef BROTLI toInt Brotli Fastest = fromEnum (minBound :: Br.CompressionLevel) toInt Brotli (Custom i) = levelGuard (0,11) i@@ -185,6 +203,9 @@ toCompressor Lz4 lvl _ = Lz4.compressSz (toInt Lz4 lvl) #ifdef BROTLI toCompressor Brotli lvl _ = Br.compressWith (brotliCompression $ toInt Brotli lvl)+#endif+#ifdef SNAPPY+toCompressor Snappy _ _ = Snappy.compress #endif toCompressor None _ _ = id
src/Version.cpphs view
@@ -22,3 +22,6 @@ #ifdef BROTLI ++ "\nbrotli-hs: " ++ VERSION_brotli #endif+#ifdef SNAPPY+ ++ "\nsnappy-lazy-hs " ++ VERSION_snappy_lazy+#endif