Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/d2e60eb23827b188a3a558db247d0096825f0f66

>---------------------------------------------------------------

commit d2e60eb23827b188a3a558db247d0096825f0f66
Author: Dmitry Astapov <[email protected]>
Date:   Tue Oct 26 20:23:43 2010 +0000

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

>---------------------------------------------------------------

 cabal-install/Distribution/Client/GZipUtils.hs |   38 ++++++++++++++++++++++++
 cabal-install/cabal-install.cabal              |    1 +
 2 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/cabal-install/Distribution/Client/GZipUtils.hs 
b/cabal-install/Distribution/Client/GZipUtils.hs
new file mode 100644
index 0000000..c969c11
--- /dev/null
+++ b/cabal-install/Distribution/Client/GZipUtils.hs
@@ -0,0 +1,38 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Distribution.Client.GZipUtils
+-- Copyright   :  (c) Dmitry Astapov 2010
+-- License     :  BSD-like
+--
+-- Maintainer  :  [email protected]
+-- 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
diff --git a/cabal-install/cabal-install.cabal 
b/cabal-install/cabal-install.cabal
index e085378..e07b372 100644
--- a/cabal-install/cabal-install.cabal
+++ b/cabal-install/cabal-install.cabal
@@ -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



_______________________________________________
Cvs-libraries mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-libraries

Reply via email to