Date: Thursday, October 6, 2022 @ 12:55:51 Author: felixonmars Revision: 1322131
remove old patch Deleted: haskell-knob/trunk/base4.15.patch ----------------+ base4.15.patch | 496 ------------------------------------------------------- 1 file changed, 496 deletions(-) Deleted: base4.15.patch =================================================================== --- base4.15.patch 2022-10-06 12:54:53 UTC (rev 1322130) +++ base4.15.patch 2022-10-06 12:55:51 UTC (rev 1322131) @@ -1,496 +0,0 @@ -From ded495e7815d398c33a2a901d146f73bde60b7a9 Mon Sep 17 00:00:00 2001 -From: Felix Yan <[email protected]> -Date: Fri, 18 Jun 2021 05:14:00 +0800 -Subject: [PATCH] Port tests to chell-0.3+ and make it a test-suite of knob - ---- - knob.cabal | 21 ++++++++++++- - tests/KnobTests.hs | 70 +++++++++++++++++++----------------------- - tests/knob-tests.cabal | 22 ------------- - 3 files changed, 52 insertions(+), 61 deletions(-) - delete mode 100644 tests/knob-tests.cabal - -diff --git a/knob.cabal b/knob.cabal -index 85d4e10..246b185 100644 ---- a/knob.cabal -+++ b/knob.cabal -@@ -5,7 +5,7 @@ license-file: license.txt - author: John Millikin <[email protected]> - maintainer: John Millikin <[email protected]> - build-type: Simple --cabal-version: >= 1.6 -+cabal-version: >= 1.8 - category: System - stability: experimental - homepage: https://john-millikin.com/software/knob/ -@@ -46,6 +46,10 @@ source-repository this - location: https://john-millikin.com/branches/knob/0.1/ - tag: knob_0.1.1 - -+flag coverage -+ default: False -+ manual: True -+ - library - hs-source-dirs: lib - ghc-options: -Wall -O2 -@@ -57,3 +61,18 @@ library - - exposed-modules: - Data.Knob -+ -+test-suite knob_tests -+ type: exitcode-stdio-1.0 -+ main-is: tests/KnobTests.hs -+ ghc-options: -Wall -+ -+ if flag(coverage) -+ ghc-options: -fhpc -+ -+ build-depends: -+ base >= 4.2 && < 5.0 -+ , bytestring >= 0.9 && < 0.11 -+ , chell >= 0.2 && < 0.6 -+ , transformers >= 0.2 && < 0.6 -+ , knob -diff --git a/tests/KnobTests.hs b/tests/KnobTests.hs -index f5a06d4..b8e4d61 100644 ---- a/tests/KnobTests.hs -+++ b/tests/KnobTests.hs -@@ -21,45 +21,42 @@ import Test.Chell - import Data.Knob - - main :: IO () --main = Test.Chell.defaultMain tests -+main = Test.Chell.defaultMain [tests] - --tests :: [Suite] --tests = [test_File, test_Duplex] -- --test_File :: Suite --test_File = suite "file" -- [ suite "read" -+tests :: Suite -+tests = suite "tests" $ -+ suiteTests (suite "read" - [ test_ReadFromStart - , test_ReadFromOffset - , test_ReadToEOF - , test_ReadPastEOF -- ] -- , suite "write" -+ ]) ++ -+ suiteTests (suite "write" - [ test_WriteFromStart - , test_WriteFromOffset - , test_WritePastEOF - , test_WriteAppended -- ] -- , suite "seek" -+ ]) ++ -+ suiteTests (suite "seek" - [ test_SeekAbsolute - , test_SeekRelative - , test_SeekFromEnd - , test_SeekBeyondMaxInt -- ] -- , suite "setSize" -+ ]) ++ -+ suiteTests (suite "setSize" - [ test_SetSize_Read - , test_SetSize_Write - , test_SetSize_ReadWrite - , test_SetSize_Append -- ] -+ ]) ++ - -- , test_Ready -+ [ test_Ready - , test_Close - , test_SetContents - , test_WithFileHandle - ] - --test_ReadFromStart :: Suite -+test_ReadFromStart :: Test - test_ReadFromStart = assertions "from-start" $ do - k <- newKnob "abcde" - h <- newFileHandle k "foo.txt" ReadMode -@@ -70,7 +67,7 @@ test_ReadFromStart = assertions "from-start" $ do - off <- liftIO $ hTell h - $expect (equal off 3) - --test_ReadFromOffset :: Suite -+test_ReadFromOffset :: Test - test_ReadFromOffset = assertions "from-offset" $ do - k <- newKnob "abcde" - h <- newFileHandle k "foo.txt" ReadMode -@@ -82,7 +79,7 @@ test_ReadFromOffset = assertions "from-offset" $ do - off <- liftIO $ hTell h - $expect (equal off 4) - --test_ReadToEOF :: Suite -+test_ReadToEOF :: Test - test_ReadToEOF = assertions "to-eof" $ do - k <- newKnob "abcde" - h <- newFileHandle k "foo.txt" ReadMode -@@ -93,7 +90,7 @@ test_ReadToEOF = assertions "to-eof" $ do - off <- liftIO $ hTell h - $expect (equal off 5) - --test_ReadPastEOF :: Suite -+test_ReadPastEOF :: Test - test_ReadPastEOF = assertions "past-eof" $ do - k <- newKnob "abcde" - h <- newFileHandle k "foo.txt" ReadMode -@@ -105,7 +102,7 @@ test_ReadPastEOF = assertions "past-eof" $ do - off <- liftIO $ hTell h - $expect (equal off 10) - --test_WriteFromStart :: Suite -+test_WriteFromStart :: Test - test_WriteFromStart = assertions "from-start" $ do - k <- newKnob "" - h <- newFileHandle k "foo.txt" WriteMode -@@ -115,7 +112,7 @@ test_WriteFromStart = assertions "from-start" $ do - bytes <- Data.Knob.getContents k - $expect (equal bytes "abcde") - --test_WriteFromOffset :: Suite -+test_WriteFromOffset :: Test - test_WriteFromOffset = assertions "from-offset" $ do - k <- newKnob "" - h <- newFileHandle k "foo.txt" WriteMode -@@ -128,7 +125,7 @@ test_WriteFromOffset = assertions "from-offset" $ do - bytes <- Data.Knob.getContents k - $expect (equal bytes "ababcde") - --test_WritePastEOF :: Suite -+test_WritePastEOF :: Test - test_WritePastEOF = assertions "past-eof" $ do - k <- newKnob "" - h <- newFileHandle k "foo.txt" WriteMode -@@ -139,7 +136,7 @@ test_WritePastEOF = assertions "past-eof" $ do - bytes <- Data.Knob.getContents k - $expect (equal bytes "\0\0abcde") - --test_WriteAppended :: Suite -+test_WriteAppended :: Test - test_WriteAppended = assertions "appended" $ do - k <- newKnob "foo" - h <- newFileHandle k "foo.txt" AppendMode -@@ -149,7 +146,7 @@ test_WriteAppended = assertions "appended" $ do - bytes <- Data.Knob.getContents k - $expect (equal bytes "foobar") - --test_SeekAbsolute :: Suite -+test_SeekAbsolute :: Test - test_SeekAbsolute = assertions "absolute" $ do - k <- newKnob "" - h <- newFileHandle k "foo.txt" ReadMode -@@ -161,7 +158,7 @@ test_SeekAbsolute = assertions "absolute" $ do - $expect (equal before 0) - $expect (equal after 2) - --test_SeekRelative :: Suite -+test_SeekRelative :: Test - test_SeekRelative = assertions "relative" $ do - k <- newKnob "" - h <- newFileHandle k "foo.txt" ReadMode -@@ -176,7 +173,7 @@ test_SeekRelative = assertions "relative" $ do - $expect (equal after1 2) - $expect (equal after2 4) - --test_SeekFromEnd :: Suite -+test_SeekFromEnd :: Test - test_SeekFromEnd = assertions "from-end" $ do - k <- newKnob "abcde" - h <- newFileHandle k "foo.txt" ReadMode -@@ -188,7 +185,7 @@ test_SeekFromEnd = assertions "from-end" $ do - $expect (equal before 0) - $expect (equal after 3) - --test_SeekBeyondMaxInt :: Suite -+test_SeekBeyondMaxInt :: Test - test_SeekBeyondMaxInt = assertions "beyond-max-int" $ do - k <- newKnob "abcde" - h <- newFileHandle k "foo.txt" ReadMode -@@ -212,7 +209,7 @@ test_SeekBeyondMaxInt = assertions "beyond-max-int" $ do - (GHC.IOError (Just h) GHC.InvalidArgument "hSeek" "offset > (maxBound :: Int)" Nothing (Just "foo.txt")) - (hSeek h SeekFromEnd 2) - --test_Ready :: Suite -+test_Ready :: Test - test_Ready = assertions "ready" $ do - k <- newKnob "abcde" - h <- newFileHandle k "foo.txt" ReadMode -@@ -225,7 +222,7 @@ test_Ready = assertions "ready" $ do - (GHC.IOError (Just h) GHC.EOF "hWaitForInput" "" Nothing (Just "foo.txt")) - (hReady h) - --test_Close :: Suite -+test_Close :: Test - test_Close = assertions "close" $ do - k <- newKnob "abcde" - h <- newFileHandle k "foo.txt" ReadMode -@@ -238,7 +235,7 @@ test_Close = assertions "close" $ do - (GHC.IOError (Just h) GHC.IllegalOperation "hWaitForInput" "handle is closed" Nothing (Just "foo.txt")) - (hReady h) - --test_SetSize_Read :: Suite -+test_SetSize_Read :: Test - test_SetSize_Read = assertions "ReadMode" $ do - k <- newKnob "abcde" - h <- newFileHandle k "foo.txt" ReadMode -@@ -252,7 +249,7 @@ test_SetSize_Read = assertions "ReadMode" $ do - (GHC.IOError (Just h) GHC.IllegalOperation "hSetFileSize" "handle in ReadMode" Nothing (Just "foo.txt")) - (hSetFileSize h 2) - --test_SetSize_Write :: Suite -+test_SetSize_Write :: Test - test_SetSize_Write = assertions "WriteMode" $ do - k <- newKnob "abcde" - h <- newFileHandle k "foo.txt" WriteMode -@@ -269,7 +266,7 @@ test_SetSize_Write = assertions "WriteMode" $ do - bytes <- Data.Knob.getContents k - $expect (equal bytes "\0\0\0\0") - --test_SetSize_ReadWrite :: Suite -+test_SetSize_ReadWrite :: Test - test_SetSize_ReadWrite = assertions "ReadWriteMode" $ do - k <- newKnob "abcde" - h <- newFileHandle k "foo.txt" ReadWriteMode -@@ -291,7 +288,7 @@ test_SetSize_ReadWrite = assertions "ReadWriteMode" $ do - bytes <- Data.Knob.getContents k - $expect (equal bytes "abcd\0\0") - --test_SetSize_Append :: Suite -+test_SetSize_Append :: Test - test_SetSize_Append = assertions "AppendMode" $ do - k <- newKnob "abcde" - h <- newFileHandle k "foo.txt" AppendMode -@@ -311,7 +308,7 @@ test_SetSize_Append = assertions "AppendMode" $ do - bytes <- Data.Knob.getContents k - $expect (equal bytes "abcd\0\0") - --test_SetContents :: Suite -+test_SetContents :: Test - test_SetContents = assertions "setContents" $ do - k <- newKnob "abcde" - before <- Data.Knob.getContents k -@@ -321,7 +318,7 @@ test_SetContents = assertions "setContents" $ do - $expect (equal before "abcde") - $expect (equal after "foo") - --test_WithFileHandle :: Suite -+test_WithFileHandle :: Test - test_WithFileHandle = assertions "withFileHandle" $ do - k <- newKnob "" - h <- withFileHandle k "test.txt" WriteMode $ \h -> do -@@ -333,6 +330,3 @@ test_WithFileHandle = assertions "withFileHandle" $ do - - closed <- liftIO $ hIsClosed h - $expect closed -- --test_Duplex :: Suite --test_Duplex = suite "duplex" [] -diff --git a/tests/knob-tests.cabal b/tests/knob-tests.cabal -deleted file mode 100644 -index 6530abe..0000000 ---- a/tests/knob-tests.cabal -+++ /dev/null -@@ -1,22 +0,0 @@ --name: knob-tests --version: 0 --build-type: Simple --cabal-version: >= 1.6 -- --flag coverage -- default: False -- manual: True -- --executable knob_tests -- main-is: KnobTests.hs -- ghc-options: -Wall -- hs-source-dirs: ../lib,. -- -- if flag(coverage) -- ghc-options: -fhpc -- -- build-depends: -- base >= 4.2 && < 5.0 -- , bytestring >= 0.9 && < 0.10 -- , chell >= 0.2 && < 0.3 -- , transformers >= 0.2 && < 0.3 --- -2.32.0 - - -From 70143ee43cc3654d28774a40aed6e5a9b72a2eff Mon Sep 17 00:00:00 2001 -From: Felix Yan <[email protected]> -Date: Fri, 18 Jun 2021 05:54:26 +0800 -Subject: [PATCH] Very basic attempt to fix build with base-4.15 - ---- - knob.cabal | 4 ++-- - lib/Data/Knob.hs | 16 +++++++++++----- - 2 files changed, 13 insertions(+), 7 deletions(-) - -diff --git a/knob.cabal b/knob.cabal -index 246b185..c76cf07 100644 ---- a/knob.cabal -+++ b/knob.cabal -@@ -55,7 +55,7 @@ library - ghc-options: -Wall -O2 - - build-depends: -- base >= 4.2 && < 5.0 -+ base >= 4.15 && < 5.0 - , bytestring >= 0.9 - , transformers >= 0.2 - -@@ -71,7 +71,7 @@ test-suite knob_tests - ghc-options: -fhpc - - build-depends: -- base >= 4.2 && < 5.0 -+ base >= 4.15 && < 5.0 - , bytestring >= 0.9 && < 0.11 - , chell >= 0.2 && < 0.6 - , transformers >= 0.2 && < 0.6 -diff --git a/lib/Data/Knob.hs b/lib/Data/Knob.hs -index fa87ad2..a699c5e 100644 ---- a/lib/Data/Knob.hs -+++ b/lib/Data/Knob.hs -@@ -60,6 +60,12 @@ newtype Knob = Knob (MVar.MVar ByteString) - data Device = Device IO.IOMode (MVar.MVar ByteString) (MVar.MVar Int) - deriving (Typeable) - -+instance IO.RawIO Device where -+ read _ _ _ _ = return 0 -+ readNonBlocking _ _ _ _ = return Nothing -+ write _ _ _ _ = return () -+ writeNonBlocking _ _ _ _ = return 0 -+ - instance IO.IODevice Device where - ready _ _ _ = return True - close _ = return () -@@ -68,20 +74,20 @@ instance IO.IODevice Device where - - seek (Device _ _ var) IO.AbsoluteSeek off = do - checkOffset off -- MVar.modifyMVar_ var (\_ -> return (fromInteger off)) -+ MVar.modifyMVar var (\_ -> return ((fromInteger off), off)) - - seek (Device _ _ var) IO.RelativeSeek off = do -- MVar.modifyMVar_ var (\old_off -> do -+ MVar.modifyMVar var (\old_off -> do - let new_off = toInteger old_off + off - checkOffset new_off -- return (fromInteger new_off)) -+ return ((fromInteger new_off), new_off)) - - seek dev@(Device _ _ off_var) IO.SeekFromEnd off = do -- MVar.modifyMVar_ off_var (\_ -> do -+ MVar.modifyMVar off_var (\_ -> do - size <- IO.getSize dev - let new_off = size + off - checkOffset new_off -- return (fromInteger new_off)) -+ return ((fromInteger new_off), new_off)) - - tell (Device _ _ var) = fmap toInteger (MVar.readMVar var) - getSize (Device _ var _) = do --- -2.32.0 - - -From e2ecfb3fc99abec39eff98f6dfe152a18a4bc35f Mon Sep 17 00:00:00 2001 -From: Liu Xiaoyi <[email protected]> -Date: Fri, 18 Jun 2021 06:22:09 +0800 -Subject: [PATCH] RawIO implmentation for the base-4.15 update - ---- - lib/Data/Knob.hs | 41 ++++++++++++++++++++++++++++++++--------- - 1 file changed, 32 insertions(+), 9 deletions(-) - -diff --git a/lib/Data/Knob.hs b/lib/Data/Knob.hs -index a699c5e..77009b2 100644 ---- a/lib/Data/Knob.hs -+++ b/lib/Data/Knob.hs -@@ -60,12 +60,6 @@ newtype Knob = Knob (MVar.MVar ByteString) - data Device = Device IO.IOMode (MVar.MVar ByteString) (MVar.MVar Int) - deriving (Typeable) - --instance IO.RawIO Device where -- read _ _ _ _ = return 0 -- readNonBlocking _ _ _ _ = return Nothing -- write _ _ _ _ = return () -- writeNonBlocking _ _ _ _ = return 0 -- - instance IO.IODevice Device where - ready _ _ _ = return True - close _ = return () -@@ -74,20 +68,20 @@ instance IO.IODevice Device where - - seek (Device _ _ var) IO.AbsoluteSeek off = do - checkOffset off -- MVar.modifyMVar var (\_ -> return ((fromInteger off), off)) -+ MVar.modifyMVar var (\_ -> return (fromInteger off, off)) - - seek (Device _ _ var) IO.RelativeSeek off = do - MVar.modifyMVar var (\old_off -> do - let new_off = toInteger old_off + off - checkOffset new_off -- return ((fromInteger new_off), new_off)) -+ return (fromInteger new_off, new_off)) - - seek dev@(Device _ _ off_var) IO.SeekFromEnd off = do - MVar.modifyMVar off_var (\_ -> do - size <- IO.getSize dev - let new_off = size + off - checkOffset new_off -- return ((fromInteger new_off), new_off)) -+ return (fromInteger new_off, new_off)) - - tell (Device _ _ var) = fmap toInteger (MVar.readMVar var) - getSize (Device _ var _) = do -@@ -118,6 +112,35 @@ setDeviceSize (Device mode bytes_var _) size = checkSize >> setBytes where - padLen | padLen > 0 -> Data.ByteString.append bytes (Data.ByteString.replicate padLen 0) - _ -> Data.ByteString.take intSize bytes - -+{- What about non-POSIX environment? -} -+instance IO.RawIO Device where -+ read (Device _ bytes_var pos_var) ptr _ bufSize = do -+ MVar.withMVar bytes_var $ \bytes -> do -+ MVar.modifyMVar pos_var $ \pos -> do -+ if pos >= Data.ByteString.length bytes -+ then return (pos, 0) -+ else do -+ let chunk = Data.ByteString.take bufSize (Data.ByteString.drop pos bytes) -+ unsafeUseAsCStringLen chunk $ \(chunkPtr, chunkLen) -> do -+ Foreign.copyArray ptr (Foreign.castPtr chunkPtr) chunkLen -+ return (pos + chunkLen, chunkLen) -+ -+ write (Device _ bytes_var pos_var) ptr _ bufSize = do -+ MVar.modifyMVar_ bytes_var $ \bytes -> do -+ MVar.modifyMVar pos_var $ \pos -> do -+ let (before, after) = Data.ByteString.splitAt pos bytes -+ let padding = Data.ByteString.replicate (pos - Data.ByteString.length before) 0 -+ -+ bufBytes <- Data.ByteString.packCStringLen (Foreign.castPtr ptr, bufSize) -+ let newBytes = Data.ByteString.concat [before, padding, bufBytes, Data.ByteString.drop bufSize after] -+ return (pos + bufSize, newBytes) -+ return () -+ -+ readNonBlocking dev buf off size = IO.read dev buf off size >>= \cnt -> if cnt == 0 -+ then return Nothing -+ else return $ Just cnt -+ writeNonBlocking dev buf off cnt = IO.write dev buf off cnt >> return cnt -+ - instance IO.BufferedIO Device where - newBuffer _ = IO.newByteBuffer 4096 - --- -2.32.0 -
