Commit e8de6708 authored by adept's avatar adept
Browse files

Added GZipUtils to handle .tar files with the same code as .tar.gz

parent cd6c5986
-----------------------------------------------------------------------------
-- |
-- Module : Distribution.Client.GZipUtils
-- Copyright : (c) Dmitry Astapov 2010
-- License : BSD-like
--
-- Maintainer : cabal-devel@gmail.com
-- Stability : provisional
-- Portability : portable
--
-- Provides a convenience functions for working with files that may or may not
-- be zipped.
-----------------------------------------------------------------------------
module Distribution.Client.GZipUtils (
maybeDecompress,
) where
import qualified Data.ByteString.Lazy.Internal as BS (ByteString(..))
import Data.ByteString.Lazy (ByteString)
import Codec.Compression.GZip
import Codec.Compression.Zlib.Internal
-- | Attempts to decompress the `bytes' under the assumption that
-- "data format" error at the very beginning of the stream means
-- that it is already decompressed. Caller should make sanity checks
-- to verify that it is not, in fact, garbage.
--
maybeDecompress :: ByteString -> ByteString
maybeDecompress bytes = foldStream $ decompressWithErrors gzipOrZlibFormat defaultDecompressParams bytes
where
-- DataError at the beginning of the stream probably means that stream is not compressed.
-- Returning it as-is.
foldStream (StreamError DataError _) = bytes
foldStream somethingElse = doFold somethingElse
doFold StreamEnd = BS.Empty
doFold (StreamChunk bs stream) = BS.Chunk bs (doFold stream)
doFold (StreamError _ msg) = error $ "Codec.Compression.Zlib: " ++ msg
......@@ -56,6 +56,7 @@ Executable cabal
Distribution.Client.Dependency.TopDown.Types
Distribution.Client.Dependency.Types
Distribution.Client.Fetch
Distribution.Client.GZipUtils
Distribution.Client.Haddock
Distribution.Client.HttpUtils
Distribution.Client.IndexUtils
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment