Hello community, here is the log from the commit of package ghc-typed-process for openSUSE:Factory checked in at 2019-06-12 13:18:53 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ghc-typed-process (Old) and /work/SRC/openSUSE:Factory/.ghc-typed-process.new.4811 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-typed-process" Wed Jun 12 13:18:53 2019 rev:8 rq:709205 version:0.2.4.1 Changes: -------- --- /work/SRC/openSUSE:Factory/ghc-typed-process/ghc-typed-process.changes 2019-01-25 22:43:38.791207407 +0100 +++ /work/SRC/openSUSE:Factory/.ghc-typed-process.new.4811/ghc-typed-process.changes 2019-06-12 13:18:54.952562159 +0200 @@ -1,0 +2,8 @@ +Sat Jun 8 02:02:43 UTC 2019 - psim...@suse.com + +- Update typed-process to version 0.2.4.1. + ## 0.2.4.1 + + * Fix a `Handle` leak in `withProcessInterleave` and its derivatives. + +------------------------------------------------------------------- Old: ---- typed-process-0.2.4.0.tar.gz New: ---- typed-process-0.2.4.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ghc-typed-process.spec ++++++ --- /var/tmp/diff_new_pack.guWJZs/_old 2019-06-12 13:18:57.256561108 +0200 +++ /var/tmp/diff_new_pack.guWJZs/_new 2019-06-12 13:18:57.260561106 +0200 @@ -19,7 +19,7 @@ %global pkg_name typed-process %bcond_with tests Name: ghc-%{pkg_name} -Version: 0.2.4.0 +Version: 0.2.4.1 Release: 0 Summary: Run external processes, with strong typing of streams License: MIT ++++++ typed-process-0.2.4.0.tar.gz -> typed-process-0.2.4.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typed-process-0.2.4.0/ChangeLog.md new/typed-process-0.2.4.1/ChangeLog.md --- old/typed-process-0.2.4.0/ChangeLog.md 2019-01-16 13:42:37.000000000 +0100 +++ new/typed-process-0.2.4.1/ChangeLog.md 2019-06-05 18:52:45.000000000 +0200 @@ -1,3 +1,7 @@ +## 0.2.4.1 + +* Fix a `Handle` leak in `withProcessInterleave` and its derivatives. + ## 0.2.4.0 * Add `readProcessInterleaved` and `readProcessInterleaved_` to support diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typed-process-0.2.4.0/README.md new/typed-process-0.2.4.1/README.md --- old/typed-process-0.2.4.0/README.md 2018-08-14 11:32:26.000000000 +0200 +++ new/typed-process-0.2.4.1/README.md 2019-02-28 12:48:21.000000000 +0100 @@ -29,7 +29,7 @@ ```haskell #!/usr/bin/env stack --- stack --resolver lts-10.2 script +-- stack --resolver lts-12.21 script {-# LANGUAGE OverloadedStrings #-} import System.IO (hPutStr, hClose) import System.Process.Typed @@ -85,7 +85,7 @@ ```haskell #!/usr/bin/env stack --- stack --resolver lts-10.2 script +-- stack --resolver lts-12.21 script {-# LANGUAGE OverloadedStrings #-} import System.Process.Typed @@ -113,7 +113,7 @@ ```haskell #!/usr/bin/env stack --- stack --resolver lts-10.2 script +-- stack --resolver lts-12.21 script {-# LANGUAGE OverloadedStrings #-} import System.Process.Typed @@ -129,7 +129,7 @@ ```haskell #!/usr/bin/env stack --- stack --resolver lts-10.2 script +-- stack --resolver lts-12.21 script {-# LANGUAGE OverloadedStrings #-} import System.Process.Typed @@ -157,7 +157,7 @@ ```haskell #!/usr/bin/env stack --- stack --resolver lts-10.2 script +-- stack --resolver lts-12.21 script {-# LANGUAGE OverloadedStrings #-} import System.Process.Typed @@ -189,7 +189,7 @@ ```haskell #!/usr/bin/env stack --- stack --resolver lts-10.2 script +-- stack --resolver lts-12.21 script {-# LANGUAGE OverloadedStrings #-} import System.Process.Typed @@ -220,7 +220,7 @@ ```haskell #!/usr/bin/env stack --- stack --resolver lts-10.2 script +-- stack --resolver lts-12.21 script {-# LANGUAGE OverloadedStrings #-} import System.Process.Typed @@ -234,7 +234,7 @@ ```haskell #!/usr/bin/env stack --- stack --resolver lts-10.2 script +-- stack --resolver lts-12.21 script {-# LANGUAGE OverloadedStrings #-} import System.Process.Typed @@ -247,7 +247,7 @@ ```haskell #!/usr/bin/env stack --- stack --resolver lts-10.2 script +-- stack --resolver lts-12.21 script {-# LANGUAGE OverloadedStrings #-} import System.Process.Typed @@ -265,7 +265,7 @@ ```haskell #!/usr/bin/env stack --- stack --resolver lts-10.2 script +-- stack --resolver lts-12.21 script {-# LANGUAGE OverloadedStrings #-} import System.Process.Typed import System.Exit (ExitCode) @@ -291,7 +291,7 @@ ```haskell #!/usr/bin/env stack --- stack --resolver lts-10.2 script +-- stack --resolver lts-12.21 script {-# LANGUAGE OverloadedStrings #-} import System.Process.Typed import Data.ByteString.Lazy (ByteString) @@ -312,12 +312,12 @@ from a process to a file. This is superior to the memory approach as it does not have the risk of using large amounts of memory, though it is more inconvenient. Together with the -[`UnliftIO.Temporary`](https://www.stackage.org/haddock/lts-10.2/unliftio-0.2.2.0/UnliftIO-Temporary.html), we +[`UnliftIO.Temporary`](https://www.stackage.org/haddock/lts/unliftio/UnliftIO-Temporary.html), we can do some nice things: ```haskell #!/usr/bin/env stack --- stack --resolver lts-10.2 script +-- stack --resolver lts-12.21 script {-# LANGUAGE OverloadedStrings #-} import System.Process.Typed import UnliftIO.Temporary (withSystemTempFile) @@ -341,7 +341,7 @@ ```haskell #!/usr/bin/env stack --- stack --resolver lts-10.2 script +-- stack --resolver lts-12.21 script {-# LANGUAGE OverloadedStrings #-} import System.Process.Typed import System.IO (hClose) @@ -371,7 +371,7 @@ ```haskell #!/usr/bin/env stack --- stack --resolver lts-10.2 script +-- stack --resolver lts-12.21 script {-# LANGUAGE OverloadedStrings #-} import System.Process.Typed @@ -383,7 +383,7 @@ ```haskell #!/usr/bin/env stack --- stack --resolver lts-10.2 script +-- stack --resolver lts-12.21 script {-# LANGUAGE OverloadedStrings #-} import System.Process.Typed @@ -396,7 +396,7 @@ ```haskell #!/usr/bin/env stack --- stack --resolver lts-10.2 script +-- stack --resolver lts-12.21 script {-# LANGUAGE OverloadedStrings #-} import System.Process.Typed import System.IO @@ -422,7 +422,7 @@ ```haskell #!/usr/bin/env stack --- stack --resolver lts-10.2 script +-- stack --resolver lts-12.21 script {-# LANGUAGE OverloadedStrings #-} import System.Process.Typed import System.IO @@ -456,7 +456,7 @@ ```haskell #!/usr/bin/env stack --- stack --resolver lts-10.2 script +-- stack --resolver lts-12.21 script {-# LANGUAGE OverloadedStrings #-} import System.Process.Typed diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typed-process-0.2.4.0/src/System/Process/Typed.hs new/typed-process-0.2.4.1/src/System/Process/Typed.hs --- old/typed-process-0.2.4.0/src/System/Process/Typed.hs 2019-01-16 13:42:37.000000000 +0100 +++ new/typed-process-0.2.4.1/src/System/Process/Typed.hs 2019-06-05 18:52:45.000000000 +0200 @@ -3,7 +3,6 @@ {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE DataKinds #-} -{-# LANGUAGE KindSignatures #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE ScopedTypeVariables #-} -- | Please see the README.md file for examples of using this API. @@ -507,7 +506,7 @@ #if MIN_VERSION_process(1, 4, 0) closed = mkStreamSpec P.NoStream (\_ Nothing -> pure ((), return ())) #else -closed = mkStreamSpec P.CreatePipe (\_ (Just h) -> (((), return ()) <$ hClose h)) +closed = mkStreamSpec P.CreatePipe (\_ (Just h) -> ((), return ()) <$ hClose h) #endif -- | An input stream spec which sets the input to the given @@ -636,7 +635,7 @@ if multiThreadedRuntime then P.waitForProcess pHandle else do - switchTime <- (fromIntegral . (`div` 1000) . ctxtSwitchTime) + switchTime <- fromIntegral . (`div` 1000) . ctxtSwitchTime <$> getConcFlags let minDelay = 1 maxDelay = max minDelay switchTime @@ -849,21 +848,20 @@ :: ProcessConfig stdin stdoutIgnored stderrIgnored -> (Process stdin (STM L.ByteString) () -> IO a) -> IO a -withProcessInterleave pc inner = do +withProcessInterleave pc inner = -- Create a pipe to be shared for both stdout and stderr - (readEnd, writeEnd) <- P.createPipe - - -- Use the writer end of the pipe for both stdout and stderr. For - -- the stdout half, use byteStringFromHandle to read the data into - -- a lazy ByteString in memory. - let pc' = setStdout (mkStreamSpec (P.UseHandle writeEnd) (\pc'' Nothing -> byteStringFromHandle pc'' readEnd)) - $ setStderr (useHandleOpen writeEnd) - pc - withProcess pc' $ \p -> do - -- Now that the process is forked, close the writer end of this - -- pipe, otherwise the reader end will never give an EOF. - hClose writeEnd - inner p + bracket P.createPipe (\(r, w) -> hClose r >> hClose w) $ \(readEnd, writeEnd) -> do + -- Use the writer end of the pipe for both stdout and stderr. For + -- the stdout half, use byteStringFromHandle to read the data into + -- a lazy ByteString in memory. + let pc' = setStdout (mkStreamSpec (P.UseHandle writeEnd) (\pc'' Nothing -> byteStringFromHandle pc'' readEnd)) + $ setStderr (useHandleOpen writeEnd) + pc + withProcess pc' $ \p -> do + -- Now that the process is forked, close the writer end of this + -- pipe, otherwise the reader end will never give an EOF. + hClose writeEnd + inner p -- | Same as 'readProcess', but interleaves stderr with stdout. -- @@ -891,7 +889,7 @@ => ProcessConfig stdin stdoutIgnored stderrIgnored -> m L.ByteString readProcessInterleaved_ pc = - liftIO $ do + liftIO $ withProcessInterleave pc $ \p -> atomically $ do stdout' <- getStdout p checkExitCodeSTM p `catchSTM` \ece -> throwSTM ece diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/typed-process-0.2.4.0/typed-process.cabal new/typed-process-0.2.4.1/typed-process.cabal --- old/typed-process-0.2.4.0/typed-process.cabal 2019-01-16 13:42:41.000000000 +0100 +++ new/typed-process-0.2.4.1/typed-process.cabal 2019-06-07 12:37:33.000000000 +0200 @@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack -- --- hash: 11c70077cb1b56f53730fd5ab768dd6b89dd6c3850649afb4cae269796982aff +-- hash: 377b4644a4d63eb0b81f60f4e7ec4b477eae658e463f90a600c923053da58712 name: typed-process -version: 0.2.4.0 +version: 0.2.4.1 synopsis: Run external processes, with strong typing of streams description: Please see the tutorial at <https://haskell-lang.org/library/typed-process> category: System