[darcs-devel] darcs patch: Start converting FastPackedString into a Data.ByteString wrapper.

Eric Y. Kow eric.kow at gmail.com
Sun Feb 3 23:57:00 UTC 2008


Again me pretending to be darcs send.

WARNING: This is still broken!

Note: I just went in a replaced things willy-nilly.  Tests still fail,
but I'm hoping this could be the start of something useful.  Hoping
that Data.ByteString performs better than our FastPackedString for
darcs needs.

-- 
Eric Kow <http://www.nltg.brighton.ac.uk/home/Eric.Kow>
PGP Key ID: 08AC04F9
-------------- next part --------------
This doesn't work yet, but maybe you can do something with it?

Sun Feb  3 23:51:11 GMT 2008  Eric Kow <E.Y.Kow at brighton.ac.uk>
  * Start converting FastPackedString into a Data.ByteString wrapper.


New patches:

[Start converting FastPackedString into a Data.ByteString wrapper.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080203235111] {
hunk ./src/FastPackedString.hs 110
-import System.IO ( Handle, hClose, hFileSize, IOMode(ReadMode,WriteMode),
+import System.IO ( Handle, hClose, hFileSize, IOMode(ReadMode),
hunk ./src/FastPackedString.hs 112
-import Control.Exception( bracket )
-
+import Data.Maybe ( fromMaybe )
hunk ./src/FastPackedString.hs 116
-import Foreign.Storable ( peekElemOff, peek, poke )
+import Foreign.Storable ( peekElemOff, peek )
hunk ./src/FastPackedString.hs 118
-import Foreign.Marshal.Array ( pokeArray, mallocArray, reallocArray,
+import Foreign.Marshal.Array ( pokeArray, mallocArray,
hunk ./src/FastPackedString.hs 122
-import Foreign.C.Types ( CLong, CInt, CSize, )
+import Foreign.C.Types ( CLong, CInt, )
hunk ./src/FastPackedString.hs 130
-import System.IO ( hPutBuf, hGetBuf )
+import System.IO ( hGetBuf )
hunk ./src/FastPackedString.hs 134
-import Foreign.Ptr ( nullPtr, plusPtr, minusPtr, Ptr, castPtr )
+import Foreign.Ptr ( nullPtr, plusPtr, minusPtr, Ptr )
hunk ./src/FastPackedString.hs 136
-                           newForeignPtr )
+                         )
hunk ./src/FastPackedString.hs 145
-import Foreign.Ptr ( FunPtr )
+import qualified Data.ByteString.Char8 as B
+import qualified Data.ByteString.Internal as BI
hunk ./src/FastPackedString.hs 162
-foreign import ccall unsafe "static stdio.h &free" c_free
-    :: FunPtr (Ptr Word8 -> IO ())
hunk ./src/FastPackedString.hs 176
-                         return $ PS fp 0 l
+                         return $ BI.fromForeignPtr fp 0 l
hunk ./src/FastPackedString.hs 183
-data PackedString = PS !(ForeignPtr Word8) !Int !Int
+type PackedString = B.ByteString
hunk ./src/FastPackedString.hs 191
-unsafeWithInternals (PS fp s l) f
- = withForeignPtr fp $ \p -> f (p `plusPtr` s) l
+unsafeWithInternals ps f
+ = let (fp,s,l) = BI.toForeignPtr ps in withForeignPtr fp $ \p -> f (p `plusPtr` s) l
hunk ./src/FastPackedString.hs 197
-                       return $ PS fp 0 l
+                       return $ BI.fromForeignPtr fp 0 l
hunk ./src/FastPackedString.hs 201
-(PS x s _l) ! i
-    = unsafePerformIO $ withForeignPtr x $ \p -> peekElemOff p (s+i)
-  -- | i < 0 = error "Can't access negative element in PackedString."
-  -- | i >= l = error "Out of range element in PackedString."
-  -- | otherwise = unsafePerformIO $ withForeignPtr x $ \p -> peekElemOff p (s+i)
+b ! i = BI.c2w $ B.index b i
hunk ./src/FastPackedString.hs 211
-generatePS i f
- = do p <- mallocArray i
-      i' <- f p
-      p' <- reallocArray p i'
-      fp <- newForeignPtr c_free p'
-      return $ PS fp 0 i'
-
-instance Eq PackedString where
-   (==) = eqPS
-
-foreign import ccall unsafe "static string.h memcmp" c_memcmp
-    :: Ptr Word8 -> Ptr Word8 -> CSize -> IO CInt
-
-{-# INLINE eqPS #-}
-eqPS :: PackedString -> PackedString -> Bool
-eqPS a b = (comparePS a b) == EQ
-
-instance Ord PackedString where
-    compare = comparePS
-
--- | 'comparePS' provides an 'Ordering' for 'PackedStrings' supporting slices.
-comparePS :: PackedString -> PackedString -> Ordering
-comparePS (PS _ _ 0) (PS _ _ 0) = EQ    -- short cut for empty strings
-comparePS (PS x1 s1 l1) (PS x2 s2 l2) = unsafePerformIO $ 
-    withForeignPtr x1 $ \p1 -> 
-        withForeignPtr x2 $ \p2 -> do 
-            i <- c_memcmp (p1 `plusPtr` s1) (p2 `plusPtr` s2)
-                 (fromIntegral $ min l1 l2)
-            return $ case i `compare` 0 of
-                EQ  -> l1 `compare` l2
-                x   -> x
-
---instance Read PackedString: ToDo
-
-instance Show PackedString where
-    showsPrec d ps = showParen (d > app_prec) $ showString "packString " .
-                     showsPrec (app_prec + 1) (unpackPS ps)
-      where app_prec = 10
+generatePS = BI.createAndTrim
hunk ./src/FastPackedString.hs 217
-nilPS = unsafePerformIO $ do fp <- mallocForeignPtr 1
-                             debugForeignPtr fp "nilPS"
-                             return $ PS fp 0 0
+nilPS = B.empty
hunk ./src/FastPackedString.hs 220
-consPS c cs = packString (c : (unpackPS cs)) -- ToDo:better
+consPS c cs = B.cons c cs
hunk ./src/FastPackedString.hs 224
-packString str = createPS (length str) $ \p -> pokeArray p $ map c2w str
+packString = B.pack
hunk ./src/FastPackedString.hs 228
-{-# INLINE w2c #-}
-w2c :: Word8 -> Char
-w2c = chr . fromIntegral
-{-# INLINE c2w #-}
-c2w :: Char -> Word8
-c2w = fromIntegral . ord
-
-foreign import ccall unsafe "static string.h strlen" c_strlen
-    :: CString -> IO CInt
-foreign import ccall unsafe "static stdlib.h malloc" c_malloc
-    :: CInt -> IO (Ptr Word8)
-foreign import ccall unsafe "static stdlib.h free" free_cstring
-    :: CString -> IO ()
-
-
hunk ./src/FastPackedString.hs 229
-mallocedCString2PS cs = do fp <- newForeignPtr c_free (castPtr cs)
-                           l <- c_strlen cs
-                           return $ PS fp 0 (fromIntegral l)
+mallocedCString2PS = B.packCString
hunk ./src/FastPackedString.hs 232
-withCStringPS (PS ps s l) = bracket alloc free_cstring
-    where alloc = withForeignPtr ps $ \p ->
-                  do buf <- c_malloc (fromIntegral l+1)
-                     c_memcpy (castPtr buf) (castPtr p `plusPtr` s)
-                                  (fromIntegral l)
-                     poke (buf `plusPtr` l) (0::Word8)
-                     return $ castPtr buf
+withCStringPS = B.useAsCString
hunk ./src/FastPackedString.hs 239
-unpackPS (PS ps s l)
- = map w2c $ unsafePerformIO
-           $ withForeignPtr ps $ \p -> peekArray l (p `plusPtr` s)
-{-
-unpackPS :: PackedString -> String
-unpackPS theps@(PS ps s l)
- | l >= 1024 = map w2c (unsafePerformIO (withForeignPtr ps $
-                                        \p -> peekArray 1024 (p `plusPtr` s)))
-            ++ unpackPS (PS ps (s + 1024) (l - 1024))
- | l >= 128 = map w2c (unsafePerformIO (withForeignPtr ps $
-                                       \p -> peekArray 128 (p `plusPtr` s)))
-           ++ unpackPS (PS ps (s + 128) (l - 128))
- | l > 0 = unsafeHeadPS theps : unpackPS (unsafeTailPS theps)
- | otherwise = ""
--}
-{-
-unpackPS :: PackedString -> String
-unpackPS theps = if nullPS theps then []
-                 else unsafeHeadPS theps : unpackPS (unsafeTailPS theps)
--}
+unpackPS = B.unpack
+
hunk ./src/FastPackedString.hs 242
-unpackWords ps@(PS x s _) =
-    if nullPS ps then []
-    else (unsafePerformIO $ withForeignPtr x $ \p -> peekElemOff p s)
-             : unpackWords (unsafeTailPS ps)
+unpackWords = map BI.c2w . B.unpack
hunk ./src/FastPackedString.hs 245
-unpackPSfromUTF8 (PS _ _ 0) = ""
-unpackPSfromUTF8 (PS x s l) =
+unpackPSfromUTF8 ps =
+ case BI.toForeignPtr ps of
+   (_,_, 0) -> ""
+   (x,s,l)  ->
hunk ./src/FastPackedString.hs 266
-lengthPS (PS _ _ l) = l
+lengthPS = B.length
hunk ./src/FastPackedString.hs 270
-indexPSW theps i | i < 0 = error "Negative index in indexPS"
-                 | i >= lengthPS theps = error "Out of bounds in indexPS"
-                 | otherwise = theps ! i
+indexPSW ps i = BI.c2w $ B.index ps i
hunk ./src/FastPackedString.hs 274
-indexPS theps i | i < 0 = error "Negative index in indexPS"
-                | i >= lengthPS theps = error "Out of bounds in indexPS"
-                | otherwise = w2c $ theps ! i
+indexPS p i = B.index p i
hunk ./src/FastPackedString.hs 278
-lastPS ps@(PS x s l) -- ps ! 0 is inlined manually to eliminate a (+0)
-  | nullPS ps = error "FastPackedString.lastPS: last []"
-  | otherwise  = w2c $ unsafePerformIO $ withForeignPtr x $
-                 \p -> peekElemOff p (s+l-1)
+lastPS = B.last
hunk ./src/FastPackedString.hs 282
-ifHeadThenTail w (PS x s l) =
+ifHeadThenTail w ps =
+    let (x,s,l) = BI.toForeignPtr ps in
hunk ./src/FastPackedString.hs 285
-    then Just $ PS x (s+1) (l-1)
+    then Just $ BI.fromForeignPtr x (s+1) (l-1)
hunk ./src/FastPackedString.hs 290
-headPS ps@(PS x s _) -- ps ! 0 is inlined manually to eliminate a (+0)
-  | nullPS ps = error "FastPackedString.headPS: head []"
-  | otherwise  = w2c $ unsafePerformIO $ withForeignPtr x $ \p -> peekElemOff p s
-
-{-# INLINE unsafeHeadPS #-}
-unsafeHeadPS :: PackedString -> Char
-unsafeHeadPS (PS x s _) -- ps ! 0 is inlined manually to eliminate a (+0)
-  = w2c $ unsafePerformIO $ withForeignPtr x $ \p -> peekElemOff p s
+headPS = B.head
hunk ./src/FastPackedString.hs 295
-tailPS (PS p s l) 
-    | l <= 0    = error ("FastPackedString.tailPS: empty list")
-    | l == 1    = nilPS                                                                    
-    | otherwise = PS p (s+1) (l-1)
+tailPS = B.tail
hunk ./src/FastPackedString.hs 301
-initPS (PS p s l) 
-    | l <= 0    = error ("FastPackedString.initPS: empty list")
-    | l == 1    = nilPS                                                                    
-    | otherwise = PS p s (l-1)                                                          
-
-{-# INLINE unsafeTailPS #-}
-unsafeTailPS :: PackedString -> PackedString
-unsafeTailPS (PS ps s l)
-  | l == 1 = nilPS
-  | otherwise  = PS ps (s+1) (l-1)
+initPS = B.init
hunk ./src/FastPackedString.hs 305
-nullPS (PS _ _ l) = l == 0
+nullPS = B.null
hunk ./src/FastPackedString.hs 308
-appendPS xs ys
-  | nullPS xs = ys
-  | nullPS ys = xs
-  | otherwise  = concatPS [xs,ys]
+appendPS = B.append
hunk ./src/FastPackedString.hs 311
-mapPS func (PS ps s l) = createPS l $ \p-> withForeignPtr ps $
-                         \f-> mint (f `plusPtr` s) p l
-    where mint :: Ptr Word8 -> Ptr Word8 -> Int -> IO ()
-          mint _ _ 0 = return ()
-          mint f t len = do val <- peek f
-                            poke t $ c2w $ func $ w2c val
-                            mint (f `plusPtr` 1) (t `plusPtr` 1) (len - 1)
-
---filterPS :: (Char -> Bool) -> PackedString -> PackedString {-or String?-}
---filterPS pred ps = packString (filter pred (unpackPS ps))
+mapPS = B.map
hunk ./src/FastPackedString.hs 314
-foldlPS f b ps = foldl f b (unpackPS ps)
+foldlPS = B.foldl
hunk ./src/FastPackedString.hs 317
-foldrPS f v ps = foldr f v (unpackPS ps)
+foldrPS = B.foldr
hunk ./src/FastPackedString.hs 321
-takePS n ps@(PS x s _) = if n >= lengthPS ps then ps
-                         else PS x s n -- substrPS ps 0 (n - 1)
+takePS = B.take
hunk ./src/FastPackedString.hs 325
-dropPS n ps@(PS x s l)
-    | n >= lengthPS ps = nilPS
-    | otherwise = PS x (s+n) (l-n) -- substrPS ps n (lengthPS ps - 1)
+dropPS = B.drop
hunk ./src/FastPackedString.hs 329
-splitAtPS  n ps  = (takePS n ps, dropPS n ps)
+splitAtPS  = B.splitAt
hunk ./src/FastPackedString.hs 333
-anyPS f (PS x s l) =
-    unsafePerformIO $ withForeignPtr x $ \ptr ->
-        lookat (ptr `plusPtr` s) (ptr `plusPtr` (s+l))
-    where lookat :: Ptr Word8 -> Ptr Word8 -> IO Bool
-          lookat p st | p == st = return False
-                      | otherwise = do w <- peek p
-                                       if f $ w2c w
-                                          then return True
-                                          else lookat (p `plusPtr` 1) st
+anyPS = B.any
hunk ./src/FastPackedString.hs 336
-findWhenPS f ps = seq f $
-    if nullPS ps then 0
-    else if f $ unsafeHeadPS ps then 0
-         else 1 + findWhenPS f (unsafeTailPS ps)
+findWhenPS f ps = fromMaybe 0 $ B.findIndex f ps
hunk ./src/FastPackedString.hs 339
-findFromEndUntilPS f ps@(PS x s l) = seq f $
+findFromEndUntilPS f ps = let (x,s,l) = BI.toForeignPtr ps in seq f $
hunk ./src/FastPackedString.hs 342
-         else findFromEndUntilPS f (PS x s (l-1))
+         else findFromEndUntilPS f (BI.fromForeignPtr x s (l-1))
hunk ./src/FastPackedString.hs 346
-takeWhilePS f ps = seq f $ takePS (findWhenPS (not . f) ps) ps
+takeWhilePS = B.takeWhile
hunk ./src/FastPackedString.hs 350
-dropWhilePS f ps = seq f $ dropPS (findWhenPS (not . f) ps) ps
+dropWhilePS = B.dropWhile
hunk ./src/FastPackedString.hs 354
-dropWhitePS (PS x s l) =
+dropWhitePS ps =
+    let (x,s,l) = BI.toForeignPtr ps in
hunk ./src/FastPackedString.hs 360
-                else PS x (s+i) (l-i)
+                else BI.fromForeignPtr x (s+i) (l-i)
hunk ./src/FastPackedString.hs 369
-is_funky (PS x s l) =
+is_funky ps = let (x,s,l) = BI.toForeignPtr ps in
hunk ./src/FastPackedString.hs 378
-elemPS c ps = c `elem` unpackPS ps
+elemPS c = B.elem c
hunk ./src/FastPackedString.hs 381
-spanPS  p ps = breakPS (not . p) ps
+spanPS =  B.span
+
hunk ./src/FastPackedString.hs 399
-hashPS (PS x s l) =
+hashPS ps =
+    let (x,s,l) = BI.toForeignPtr ps in
hunk ./src/FastPackedString.hs 425
-breakWhitePS (PS x s l) =
+breakWhitePS ps =
+    let (x,s,l) = BI.toForeignPtr ps in
hunk ./src/FastPackedString.hs 429
-       if i == 0 then return (nilPS, PS x s l)
+       if i == 0 then return (nilPS, BI.fromForeignPtr x s l)
hunk ./src/FastPackedString.hs 431
-                      then return (PS x s l, nilPS)
-                      else return (PS x s i, PS x (s+i) (l-i))
+                      then return (BI.fromForeignPtr x s l, nilPS)
+                      else return (BI.fromForeignPtr x s i, BI.fromForeignPtr x (s+i) (l-i))
hunk ./src/FastPackedString.hs 449
-    let w1 = c2w c1
-        w2 = c2w c2
+    let w1 = BI.c2w c1
+        w2 = BI.c2w c2
hunk ./src/FastPackedString.hs 458
-linesPS ps = case wfindPS (c2w '\n') ps of
-             Nothing -> [ps]
-             Just n -> takePS n ps : linesPS (dropPS (n+1) ps)
+linesPS = B.lines
hunk ./src/FastPackedString.hs 461
-unlinesPS ss = concatPS $ intersperse_newlines ss
-    where intersperse_newlines (a:b:s) = a:newline: intersperse_newlines (b:s)
-          intersperse_newlines s = s
-          newline = packString "\n"
+unlinesPS = B.unlines
hunk ./src/FastPackedString.hs 464
-wordsPS ps = splitWithPS isSpace ps
+wordsPS = B.words
hunk ./src/FastPackedString.hs 467
-reversePS ps = packString (reverse (unpackPS ps))
-
-foreign import ccall unsafe "static string.h memcpy" c_memcpy
-    :: Ptr Word8 -> Ptr Word8 -> CSize -> IO ()
+reversePS = B.reverse
hunk ./src/FastPackedString.hs 470
-concatPS [] = nilPS
-concatPS [ps] = ps
-concatPS xs
- = unsafePerformIO $
-   do let start_size = 1024
-      p <- mallocArray start_size
-      f p 0 1024 xs
-    where f ptr len _ [] = do ptr' <- reallocArray ptr len
-                              fp <- newForeignPtr c_free ptr'
-                              return $ PS fp 0 len
-          f ptr len to_go pss@(PS p s l:pss')
-           | l <= to_go = do withForeignPtr p $ \pf ->
-                                 c_memcpy (ptr `advancePtr` len)
-                                          (pf `advancePtr` s) (fromIntegral l)
-                             f ptr (len + l) (to_go - l) pss'
-           | otherwise = do let new_total = ((len + to_go) * 2) `max` (len + l)
-                            ptr' <- reallocArray ptr new_total
-                            f ptr' len (new_total - len) pss
+concatPS = B.concat
hunk ./src/FastPackedString.hs 479
-concatLenPS n [] = n `seq` nilPS
-concatLenPS _ [ps] = ps
-concatLenPS total_length pss = createPS total_length $ \p-> cpPSs p pss
-    where cpPSs :: Ptr Word8 -> [PackedString] -> IO ()
-          cpPSs p (PS x s l:rest) =
-              do withForeignPtr x $ \pf ->
-                     c_memcpy p (pf `plusPtr` s) (fromIntegral l)
-                 cpPSs (p `plusPtr` l) rest
-          cpPSs _ [] = return ()
+concatLenPS _ = B.concat
hunk ./src/FastPackedString.hs 483
-findPS c ps = wfindPS (c2w c) ps
-
-{-# INLINE wfindPS #-}
-wfindPS :: Word8 -> PackedString -> Maybe Int
-wfindPS c (PS x s l) =
-    unsafePerformIO $ withForeignPtr x $ \p->
-    do let p' = p `plusPtr` s
-       q <- memchr p' (fromIntegral c) (fromIntegral l)
-       return $ if q == nullPtr then Nothing
-                                else Just (q `minusPtr` p')
-
-foreign import ccall unsafe "string.h memchr" memchr
-    :: Ptr Word8 -> CInt -> CSize -> IO (Ptr Word8)
+findPS = B.elemIndex
hunk ./src/FastPackedString.hs 487
-findLastPS c ps = wfindLastPS (c2w c) ps
+findLastPS c ps = wfindLastPS (BI.c2w c) ps
hunk ./src/FastPackedString.hs 491
-wfindLastPS c (PS x s l) =
+wfindLastPS c ps =
hunk ./src/FastPackedString.hs 494
-    where findit h p i = if i >= l
+    where (x,s,l) = BI.toForeignPtr ps
+          findit h p i = if i >= l
hunk ./src/FastPackedString.hs 508
-splitPS c = wsplitPS (c2w c)
-{-# INLINE wsplitPS #-}
-wsplitPS :: Word8 -> PackedString -> [PackedString]
-wsplitPS c ps = case wfindPS c ps of
-                Nothing -> if nullPS ps then [] else [ps]
-                Just n -> takePS n ps : wsplitPS c (dropPS (n+1) ps)
+splitPS = B.split
hunk ./src/FastPackedString.hs 511
-splitWithPS f ps =
-    case [ m | m <- [0..lengthPS ps-1], f (w2c (ps ! m)) ] of
-    [] -> if nullPS ps then [] else [ps]
-    (n:_) -> takePS n ps : splitWithPS f (dropPS (n+1) ps)
-
--- -----------------------------------------------------------------------------
--- Local utility functions
-
-{-
--- The definition of @_substrPS@ is essentially:
--- @take (end - begin + 1) (drop begin str)@.
-
-substrPS :: PackedString -> Int -> Int -> PackedString
-substrPS (PS ps s _) begin end = PS ps (s+begin) (1+end-begin)
---substrPS (PS ps s l) begin end
---    | end <= l && begin <= end && begin >= 0 = PS ps (s+begin) (1+end-begin)
---    | otherwise = bug "substrPS out of bounds"
--}
+splitWithPS = B.splitWith
hunk ./src/FastPackedString.hs 522
-hPutPS _ (PS _ _ 0) = return ()
-hPutPS h (PS ps 0 l) = withForeignPtr ps $ \p-> hPutBuf h p l
-hPutPS h (PS ps s l) = withForeignPtr ps $ \p-> hPutBuf h (p `plusPtr` s) l
+hPutPS = B.hPut
hunk ./src/FastPackedString.hs 534
-hGetPS _ 0 = return nilPS
-hGetPS h i = do fp <- mallocForeignPtr i
-                debugForeignPtr fp $ "hGetPS "++show h
-                l <- withForeignPtr fp $ \p-> hGetBuf h p i
-                return $ PS fp 0 l
+hGetPS = B.hGet
hunk ./src/FastPackedString.hs 545
-hGetContentsPS h
- = do let start_size = 1024
-      p <- mallocArray start_size
-      i <- hGetBuf h p start_size
-      if i < start_size
-       then do p' <- reallocArray p i
-               fp <- newForeignPtr c_free p'
-               return $ PS fp 0 i
-       else f p start_size
-    where f p s = do let s' = 2 * s
-                     p' <- reallocArray p s'
-                     i <- hGetBuf h (p' `plusPtr` s) s
-                     if i < s then do let i' = s + i
-                                      p'' <- reallocArray p' i'
-                                      fp <- newForeignPtr c_free p''
-                                      return $ PS fp 0 i'
-                              else f p' s'
+hGetContentsPS = B.hGetContents
hunk ./src/FastPackedString.hs 559
-readFilePS f = do h <- openBinaryFile f ReadMode
-                  l <- hFileSize h
-                  s <- hGetPS h $ fromIntegral l
-                  hClose h
-                  return s
+readFilePS = B.readFile
hunk ./src/FastPackedString.hs 567
-writeFilePS f ps = do h <- openBinaryFile f WriteMode
-                      hPutPS h ps
-                      hClose h
+writeFilePS = B.writeFile
hunk ./src/FastPackedString.hs 604
-                 return $ PS fp 0 len
+                 return $ BI.fromForeignPtr fp 0 len
hunk ./src/FastPackedString.hs 631
-                                                   return [PS fp 0 l]
+                                                   return [BI.fromForeignPtr fp 0 l]
hunk ./src/FastPackedString.hs 633
-                                   return (PS fp 0 l:rest)
+                                   return (BI.fromForeignPtr fp 0 l:rest)
hunk ./src/FastPackedString.hs 664
-                          return (PS fp 0 l:rest)
+                          return $ (BI.fromForeignPtr fp 0 l) : rest
hunk ./src/FastPackedString.hs 689
-gzWriteToGzf gzf (PS x s l) = do
+gzWriteToGzf gzf ps = do
+    let (x, s, l) = BI.toForeignPtr ps
hunk ./src/FastPackedString.hs 712
-                       return $ PS fp 0 l
+                       return $ BI.fromForeignPtr fp 0 l
hunk ./src/FastPackedString.hs 777
-readIntPS (PS x s l) =
+readIntPS ps =
+    let (x,s,l) = BI.toForeignPtr ps in
hunk ./src/FastPackedString.hs 785
-                              PS x (s+skipped) (l-skipped))
+                              BI.fromForeignPtr x (s+skipped) (l-skipped))
hunk ./src/FastPackedString.hs 794
-fromPS2Hex (PS x s l) = createPS (2*l) $ \p -> withForeignPtr x $ \f ->
+fromPS2Hex ps = let (x,s,l) = BI.toForeignPtr ps in
+           createPS (2*l) $ \p -> withForeignPtr x $ \f ->
hunk ./src/FastPackedString.hs 805
-fromHex2PS (PS x s l) = createPS (l `div` 2) $ \p -> withForeignPtr x $ \f ->
+fromHex2PS ps = let (x,s,l) = BI.toForeignPtr ps in
+           createPS (l `div` 2) $ \p -> withForeignPtr x $ \f ->
hunk ./src/FastPackedString.hs 819
-       (_, _:rest@(PS ps1 s1 _:_)) ->
+       (_, _:rest@(bs1:_)) ->
+           let (ps1,s1,_) = BI.toForeignPtr bs1 in
hunk ./src/FastPackedString.hs 822
-               (_, PS _ s2 _:_) -> Just $ PS ps1 s1 (s2 - s1)
+               (_, bs2:_) -> let (_,s2,_) = BI.toForeignPtr bs2 in Just $ BI.fromForeignPtr ps1 s1 (s2 - s1)
hunk ./src/FastPackedString.hs 832
-break_after_nth_newline n the_ps@(PS fp the_s l)
- = unsafePerformIO $ withForeignPtr fp $ \p ->
+break_after_nth_newline n the_ps
+ = let (fp,the_s,l) = BI.toForeignPtr the_ps in
+   unsafePerformIO $ withForeignPtr fp $ \p ->
hunk ./src/FastPackedString.hs 838
-                       in return $ Just (PS fp the_s left_l,
-                                         PS fp s (l - left_l))
+                       in return $ Just (BI.fromForeignPtr fp the_s left_l,
+                                         BI.fromForeignPtr fp s (l - left_l))
hunk ./src/FastPackedString.hs 843
-          nl = c2w '\n'
+          nl = BI.c2w '\n'
hunk ./src/FastPackedString.hs 853
-break_before_nth_newline n the_ps@(PS fp the_s l)
- = unsafePerformIO $ withForeignPtr fp $ \p ->
+break_before_nth_newline n the_ps
+ = let (fp,the_s,l) = BI.toForeignPtr the_ps in
+   unsafePerformIO $ withForeignPtr fp $ \p ->
hunk ./src/FastPackedString.hs 861
-                                      in return (PS fp the_s left_l,
-                                                 PS fp s (l - left_l))
+                                      in return (BI.fromForeignPtr fp the_s left_l,
+                                                 BI.fromForeignPtr fp s (l - left_l))
hunk ./src/FastPackedString.hs 865
-          nl = c2w '\n'
+          nl = BI.c2w '\n'
}

Context:

[move failing issue458 test to bugs/
David Roundy <droundy at darcs.net>**20080202202810] 
[issue496: move failing test to ./bugs
Mark Stosberg <mark at summersault.com>**20080202162828] 
[Don't use the builtin !; it has the wrong semantics.
Trent W. Buck <twb at cyber.com.au>**20080202103848] 
[Add functional sh test for issue496.
Trent W. Buck <twb at cyber.com.au>**20080202103816] 
[Add functional sh test for issue458.
Trent W. Buck <twb at cyber.com.au>**20080202095122] 
[Typo.
Trent W. Buck <twb at cyber.com.au>**20080202083642] 
[Typo.
Trent W. Buck <twb at cyber.com.au>**20080202083347] 
[clean up files we only speculatively downloaded.
David Roundy <droundy at darcs.net>**20080202164906] 
[provide nicer output when identifying repository.
David Roundy <droundy at darcs.net>**20080202164843] 
[print progress reports less frequently.
David Roundy <droundy at darcs.net>**20080202161901
 On my laptop this provides a noticeable performance improvement.  And to
 me, having less rapid jumping on the screen is also a bonus.
] 
[improved test for binaries: We now have both a positive and negative test
Mark Stosberg <mark at summersault.com>**20080202150109] 
[issue469: test that _darcs/prefs/binaries matches against full path
Mark Stosberg <mark at summersault.com>**20080202024805] 
[simplify speculation on patch contents.
David Roundy <droundy at darcs.net>**20080202142649] 
[use faster queue type in URL.hs.
David Roundy <droundy at darcs.net>**20080202142619] 
[refactor speculate a bit.
David Roundy <droundy at darcs.net>**20080201202752] 
[try to make speculation and pipelining help us.
David Roundy <droundy at darcs.net>**20080201181524] 
[avoid parsing all patches in darcs get.
David Roundy <droundy at darcs.net>**20080201214747] 
[add friendly interface for speculative pipelining of downloads.
David Roundy <droundy at darcs.net>**20080201154000] 
[Fix --no-ephemeral.
nicolas.pouillard at gmail.com**20080201153821] 
[rename segregate{F,R}L into partition{F,R}L.
nicolas.pouillard at gmail.com**20080201153557] 
[Fix darcs get --lazy (Partial was used instead of Lazy).
nicolas.pouillard at gmail.com**20080201153107] 
[match absolute paths on binaries regexps.
David Roundy <droundy at darcs.net>**20080201152320] 
[avoid needless locking of hashed repositories.
David Roundy <droundy at darcs.net>**20080201150941] 
[don't display "progress" when running --list-options.  (issue635)
David Roundy <droundy at darcs.net>**20080201144458] 
[give feedback after successful push or put.
David Roundy <droundy at darcs.net>**20080131230525] 
[use System.Process when calling darcs apply
David Roundy <droundy at darcs.net>**20080131230305
 This allows us to get immediate feedback as to how the remote apply is
 proceeding.
] 
[use System.Process for running ssh and other commands.
David Roundy <droundy at darcs.net>**20080131223831] 
[fix issue 257 by not ignoring exit code of apply.
David Roundy <droundy at darcs.net>**20080131220054] 
[fix bug in whatsnew when replace is used.
David Roundy <droundy at darcs.net>**20080131201648] 
[Show a replace+whatsnew -s bug.
nicolas.pouillard at gmail.com**20080130142001] 
[define segregateFL and segregateRL utility functions.
David Roundy <droundy at darcs.net>**20080131200620] 
[Fix an error message, in case of using subcommands.
nicolas.pouillard at gmail.com**20080131184422] 
[default to get copying all patches.
David Roundy <droundy at darcs.net>**20080131195151
 You can use --lazy (or ^C) to get a lazy repository.
] 
[add test (failing) for issue257 (from vmiklos, thanks!)
David Roundy <droundy at darcs.net>**20080131195118] 
[fix bug in unrevert.  (issue366)
David Roundy <droundy at darcs.net>**20080131192202] 
[give progress report on initial checking of repository validity.
David Roundy <droundy at darcs.net>**20080131181249
 I'm not sure how much good this will do, since the downloading function
 probably blocks progress output.
] 
[clean up in unrevert_cancel.sh
David Roundy <droundy at darcs.net>**20080131175149] 
[issue366: test when unrevert reports a bug
Mark Stosberg <mark at summersault.com>**20080131042313] 
[make bunchFL compile with type witnesses by adding a signature.
David Roundy <droundy at darcs.net>**20080131155718] 
[refactor convert.
David Roundy <droundy at darcs.net>**20080131155547
 This also makes convert slightly more efficient in cases where there is a
 large first patch.
] 
[make darcs get --hashed safe on case-insensitive filesystems.
David Roundy <droundy at darcs.net>**20080131155112] 
[define handy bunchFL function for grouping patches into batches.
David Roundy <droundy at darcs.net>**20080131154631] 
[fix conflict-doppleganger test to work with change in flags get accepts.
David Roundy <droundy at darcs.net>**20080131153250] 
[oops, the build of the manual broke when I hid convert...
David Roundy <droundy at darcs.net>**20080130230705
 
 rolling back:
 
 Wed Jan 30 16:39:45 EST 2008  David Roundy <droundy at darcs.net>
   * hide convert.
   Since this is a command that *must* be performed only once per group of
   related repositories, I think making it only visible in the documentation
   should reduce errors.
 
     M ./src/Darcs/TheCommands.lhs -1 +1
] 
[roll back foolish file modification time hack.
David Roundy <droundy at darcs.net>**20080130224322
 
  As it turns out, I didn't understand what "ctime" means, thinking that it
  was actually a "creation" time.  But alas, ctime changes whenver mtime
  changes, so we can't use their equality to check if the mtime has been
  set.  Ugh.  I feel silly.
 
 rolling back:
 
 Wed Jan 30 12:12:32 EST 2008  David Roundy <droundy at darcs.net>
   * employ new hack to avoid need to wait for clock to tick.
   The new hack is that if the creation time and modification time of a file
   in the pristine cache are identical, then we don't believe it's meaningful
   if the modification time happens to match that of the file in the working
   directory.
 
     M ./src/Darcs/Lock.lhs -1 +4
     M ./src/Darcs/Repository/Prefs.lhs -4 +8
     M ./src/Darcs/SlurpDirectory.lhs -12 +9
] 
[refactor readPatchInfo using Maybe monad.
David Roundy <droundy at darcs.net>**20080130220306] 
[fix issue46, parsing problem caused by wrong use of error.
David Roundy <droundy at darcs.net>**20080130220129] 
[hide convert.
David Roundy <droundy at darcs.net>**20080130213945
 Since this is a command that *must* be performed only once per group of
 related repositories, I think making it only visible in the documentation
 should reduce errors.
] 
[remove --darcs-2 from get options (issue606)
David Roundy <droundy at darcs.net>**20080130213712] 
[fix imports for win32.
David Roundy <droundy at darcs.net>**20080130212629] 
[make rollback default to a long comment indicating what was rolled back.
David Roundy <droundy at darcs.net>**20080130200814] 
[employ new hack to avoid need to wait for clock to tick.
David Roundy <droundy at darcs.net>**20080130171232
 The new hack is that if the creation time and modification time of a file
 in the pristine cache are identical, then we don't believe it's meaningful
 if the modification time happens to match that of the file in the working
 directory.
] 
[fix build failure under win32 (hopefully).  Sorry!
David Roundy <droundy at darcs.net>**20080130170953] 
[refactor issue154 test to match Eric Kow's echo_to_darcs() refactor. The test should pass.
Mark Stosberg <mark at summersault.com>**20080129004921] 
[Update docs for echo_to_darcs() to match Eric Kow's code refactor
Mark Stosberg <mark at summersault.com>**20080129004448] 
[Adding Test/Builder/Module.pm to the tree, unmodified.
Mark Stosberg <mark at summersault.com>**20080129003230
     Thanks to Kevin Quick for noticing this was missing.
] 
[Test Suite: make sure to move outside of tmp repo, so it can get cleaned-up properly
Mark Stosberg <mark at summersault.com>**20080126171642] 
[Update add_in_subdir.pl to work with updated init_tmp_repo()
Mark Stosberg <mark at summersault.com>**20080126164158] 
[Test Suite: Improve init_tmp_repo():
Mark Stosberg <mark at summersault.com>**20080126160916
     - Quit including random chars in the directory name (David's suggestion)
     - Allow DARCS_KEEP_TMPDIR to control whether we keep the tmp repos for inspection (default: false)
     - More reliably clean-up after ourselves then the "File::Temp" method did. 
     ***END OF DESCRIPTION***
 
 Place the long patch description above the ***END OF DESCRIPTION*** marker.
 The first line of this file will be the patch name.
 
 
 This patch contains the following changes:
 
 M ./tests/lib/perl/Test/Darcs.pm -3 +17
] 
[remove clean-up, which should now happen automatically
Mark Stosberg <mark at summersault.com>**20080126025241] 
[Shave several minutes off test suite runs by pre-building large repos
Mark Stosberg <mark at summersault.com>**20080126184048] 
[make sure we are outside of the tempdir so the auto-cleanup can happen.
Mark Stosberg <mark at summersault.com>**20080124044245] 
[improved tempdir handling-- include the script name in the directory name, and better auto-cleanup
Mark Stosberg <mark at summersault.com>**20080124044137] 
[issue154: regression test for pull with a directory removal conflict
Mark Stosberg <mark at summersault.com>**20080127053811] 
[rollback features that apparently are needed.
David Roundy <droundy at darcs.net>**20080129203711
 These seem to be needed (at least some of them) to do
 
 darcs get http://darcs.net/repos/unstable
] 
[[issue558] Singular 'do you want to revert this change?'
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080129163633] 
[Refactor SelectChanges English.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080129163619] 
[Add some simple English morphology.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080129163613] 
[fix ssh connection business to work if one darcs command accesses two distinct repos on same server.
David Roundy <droundy at darcs.net>**20080129162911] 
[Remove features not used in parsing patch dates.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080129092401] 
[[issue625] Non-recursive --repodir.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080128193459] 
[Do not announce recipients in send -O.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080128151812] 
[Test for issue625.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080128150059] 
[[issue457] Check match syntax early.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080128144840] 
[ratify use of hGetContents.
David Roundy <droundy at darcs.net>**20080129150247] 
[Fix curl version check for pipelining.
Dmitry Kurochkin <dmitry.kurochkin at gmail.com>**20080128223731] 
[issue612: regression test demonstrates that hashed and darcs-2 formats resist a certain kind of corruption.
Mark Stosberg <mark at summersault.com>**20080126031445
    (but the old fashioned repo format does not).  
] 
[Extract external-merge from {apply,pull} conflict options.
nicolas.pouillard at gmail.com**20080128221810] 
[Don't emit \r when the handle is a terminal.
nicolas.pouillard at gmail.com**20080128221705] 
[Replace unpull by obliterate as much as possible.
nicolas.pouillard at gmail.com**20080117152443] 
[Move rollback to another section of TheCommands.
nicolas.pouillard at gmail.com**20080117125340] 
[give progress output when getting over ssh.
David Roundy <droundy at darcs.net>**20080128222133] 
[remove progress output that seems too often to be unhelpful.
David Roundy <droundy at darcs.net>**20080128221922] 
[nicer error message in ssh connection code.
David Roundy <droundy at darcs.net>**20080128221229] 
[use new ssh connection for copySSHs as well (speed my test up by 20% from the sftp code).
David Roundy <droundy at darcs.net>**20080128220858] 
[fix bug introduced by rewrite of IsoDate module.
David Roundy <droundy at darcs.net>**20080128220647
 The problem was that this module served two functions.  One was to allow
 nice date matching, and the other was to allow parsing of old patches,
 created before we moved to the simple 20080127... format.  I've split the
 latter function into a separate "frozen" module, so that we can safely
 develop more friendly date-parsing code.
] 
[Test infrastructure improvement: Add debug mode to Perl test scripts.
Mark Stosberg <mark at summersault.com>**20080126154444
   Set this to see the output of every 'darcs' call made through this script:
   DARCS_DEBUG=1 ./bin/prove -v add.pl pull.pl
] 
[reuse ssh connection using transfer-mode.
David Roundy <droundy at darcs.net>**20080128201613] 
[try using darcs transfer-mode if available.
David Roundy <droundy at darcs.net>**20080128194406
 Note that this doesn't yet gain us any performance, it's just a step
 towards a faster connection-sharing approach.
] 
[issue227: regression test for get --context with an absolute path
Mark Stosberg <mark at summersault.com>**20080126021139] 
[flush output in transfer-mode.
David Roundy <droundy at darcs.net>**20080128193910] 
[add transfer-mode for faster ssh access.
David Roundy <droundy at darcs.net>**20080128165256] 
[refactor SSH code into own module.
David Roundy <droundy at darcs.net>**20080128172658] 
[remove unneeded export from URL.
David Roundy <droundy at darcs.net>**20080128172534] 
[Fix optimize_relink for POSIX environment (no cp -a or du -l support; now needs perl)
Kevin Quick <quick at sparq.org>**20080125220119] 
[Test Fix: make test pass when there is a space in the darcs repo path
Mark Stosberg <mark at summersault.com>**20080126170531] 
[Test Fix: replace system calls with quoted function calls
Mark Stosberg <mark at summersault.com>**20080126170253] 
[Test fix: work when darcs repo root has a space in it
Mark Stosberg <mark at summersault.com>**20080126165818] 
[replace system call with Perl for better portability
Mark Stosberg <mark at summersault.com>**20080124013552] 
[Remove more unneeded "--author" flags in the Perl test scripts, because the harness takes care of them
Mark Stosberg <mark at summersault.com>**20080120010553] 
[remove now-unused perl_harness
Mark Stosberg <mark at summersault.com>**20080120005850] 
[Merge Curl and Libwww to URL module.
Dmitry Kurochkin <dmitry.kurochkin at gmail.com>**20080127182001] 
[Fix darcs version in libwww user agent.
Dmitry Kurochkin <dmitry.kurochkin at gmail.com>**20080127181548] 
[Cleanup libwww module, better error handling, follow redirects (closes issue621).
Dmitry Kurochkin <dmitry.kurochkin at gmail.com>**20080127152710] 
[Rework libcurl module: use multi interface, support pipelining.
Dmitry Kurochkin <dmitry.kurochkin at gmail.com>**20080127151756] 
[Remove TimeDiff experiment.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080128115307] 
[Simplify date matcher and fix tz-related bug.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080128115214
 
 When matching partial dates, we should not trust the ctYear, etc on the
 CalendarTime because it may vary by timezone.  This also leads to a
 simplification in the tentative date matching.
 
 Note: subtle change in matching.  Now all matching is done
 within a range, excluding the latter date.  We check
            date <  end
 instead of date <= end
] 
[Add ability to see skipped/included patches when verbose flag present.
Kevin Quick <quick at sparq.org>**20080127190546] 
[Update patch selection feedback for messages more appropriate to the job being performed.
Kevin Quick <quick at sparq.org>**20080126035000] 
[Add a comment for Real patches.
nicolas.pouillard at gmail.com**20080128085313] 
[beautify remove_subsequenceFL.
David Roundy <droundy at darcs.net>**20080125225637] 
[beautify remove_subsequenceRL.
David Roundy <droundy at darcs.net>**20080125225440] 
[we removed --modernize-patches, so remove the test case.
David Roundy <droundy at darcs.net>**20080125225423] 
[eliminate --modernize-patches and make --uncompress work (issue620)
David Roundy <droundy at darcs.net>**20080125220624] 
[make hashed repositories respect --dont-compress.
David Roundy <droundy at darcs.net>**20080125210529] 
[More aggressive testing of date parser.
Eric Kow <eric.kow at loria.fr>**20080127164254
 
 Using record --pipe to set patch dates.
] 
[Support more interactive use of echo_to_darcs in test harness.
Eric Kow <eric.kow at loria.fr>**20080127164241] 
[Overhaul date parsing code.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080127163040
 
 - Add the ability to match on partial ISO 8601 dates, for example,
   treating 2008-08 as matching the whole month and not just the
   first day of that month
 - Fix some bugs in the parsing of fancy English dates
 - Fix bugs in the interpretation of English dates (for example,
   the interpretation of '3 days before last week' was for all
   patches since that date, and not for all patches *on* that
   date)
 - Treat user input as being in the local timezone
 - Make the matching code a bit more compact
] 
[Make documentation on dates more explicit.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080127162931] 
[resolve conflict with Eric on controlMasterPath.
David Roundy <droundy at darcs.net>**20080125203903] 
[Refactor y/n prompts.
Eric Kow <eric.kow at gmail.com>**20071019213307] 
[issue578: steve and monica test for rolling back a rollback
Mark Stosberg <mark at summersault.com>**20080118031606] 
[eliminate lazy parsing of patches, which gives bad error messages (issue364)
David Roundy <droundy at darcs.net>**20080125191836] 
[[issue492] Check that context file actually exists in darcs get.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080125183741] 
[[issue227] Platform-independent absolute paths in get --context
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080125181702] 
[make uniqueoptions.sh test give friendlier output.
David Roundy <droundy at darcs.net>**20080125183430] 
[fix code to avoid duplicate --verbose in --help (so tests will pass).
David Roundy <droundy at darcs.net>**20080125183420] 
[Make verbosity flags advanced options universally.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080125181005] 
[adding File::Temp 0.20 to tree for more consistent test results. It is GPL-licensed.
Mark Stosberg <mark at summersault.com>**20080124033049] 
[update restrictive perms test to run a temporary directory and clean up after itself.
Mark Stosberg <mark at summersault.com>**20080123000417
     Running in a tru temporary directory allows the potential to run tests in parallel.
] 
[update some ChangeLog entries to also credit those who contributed through bug reporting, test writing or feedback. 
Mark Stosberg <mark at summersault.com>**20080122235435] 
[ issue602: part 1: Always prefer our private copy of Test::More over the system-wide one for more consistent results
Mark Stosberg <mark at summersault.com>**20080124005407] 
[ issue602, part 2: freshen our versions of Test::More and Test::Builder
Mark Stosberg <mark at summersault.com>**20080123013642] 
[More error messages for libwww.
Dmitry Kurochkin <dmitry.kurochkin at gmail.com>**20080124092600] 
[issue608: a new test for 'mv', following Zooko's bug report
Mark Stosberg <mark at summersault.com>**20080124013856] 
[report progress in writing the inventory out for hashed repos.
David Roundy <droundy at darcs.net>**20080125172017] 
[make empty key case of progress reporting fast.
David Roundy <droundy at darcs.net>**20080125171859] 
[fix issue where we overwrote prompt with progress info.
David Roundy <droundy at darcs.net>**20080125164609] 
[fix bug where we used show on an exception (and thus printed "User error").
David Roundy <droundy at darcs.net>**20080125164209
 This partially addresses issue168 by improving the error message.
] 
[add gnulib sha1.c file as a faster sha1 option.
David Roundy <droundy at darcs.net>**20080123212502] 
[fix embarrassing bug in External.
David Roundy <droundy at darcs.net>**20080125152329
 (which demonstrates that I didn't compile before pushing)
] 
[for now, print progress reports to stdout.
David Roundy <droundy at darcs.net>**20080125152105
 My hope is that this will alleviate some of the issues with progress
 reports overwriting prompts.
] 
[revamp progress reporting, making it more efficient and adding more output.
David Roundy <droundy at darcs.net>**20080125151540
 Note that there is still at least one time sink that remains to be identified.
] 
[avoid creating darcs-ssh if we aren't using ControlMaster. (issue613)
David Roundy <droundy at darcs.net>**20080125150846] 
[fix bug where darcs-ssh got even worse name (issue613).
David Roundy <droundy at darcs.net>**20080125150355] 
[provide more detailed progress reports in HashedIO.
David Roundy <droundy at darcs.net>**20080124145156] 
[print additional debug data in Progress.
David Roundy <droundy at darcs.net>**20080124145114] 
[add a few more debug messages in Repository.Internal.
David Roundy <droundy at darcs.net>**20080124144829] 
[fix incorrect report that we were reading patches.
David Roundy <droundy at darcs.net>**20080124125040] 
[reenable mandatory sha1 checks, now that we can link with a faster sha1.
David Roundy <droundy at darcs.net>**20080123203104] 
[remove (broken) git support and add openssl sha1 support.
David Roundy <droundy at darcs.net>**20080123202025
 These two changes got merged together as I was introducing the configure.ac
 changes to support openssl as a sha1 alternative to our Haskell code.
 
 (Yes, I'm lazy.)
] 
[remove redundant hash checks in hashed IO code.
David Roundy <droundy at darcs.net>**20080123173022] 
[output nicer progress in convert.
David Roundy <droundy at darcs.net>**20080123170428] 
[output timings when --timings is specified.
David Roundy <droundy at darcs.net>**20080123170314] 
[remove inaccurate message in convert.
David Roundy <droundy at darcs.net>**20080123170243] 
[use debugMessage in HashedIO.
David Roundy <droundy at darcs.net>**20080123160835] 
[add --timings flag (that as yet does nothing).
David Roundy <droundy at darcs.net>**20080123154931] 
[Major Perl test suite clean-up.
Mark Stosberg <mark at summersault.com>**20080120035651
     The primary purpose of this patch was make sure all the tests are executed in
     randomly named directories, which allows us to run Perl tests in parallel, 
     without the directory names collided. 
 
     This isn't enabled by default for "make test", but it is there to play with.
     In the test directory, you can now do:
 
     ./bin/prove -j9 *.pl 
     
     to run 9 tests in parallel. There is also "--fork"
     option which should be a win on multi-CPU computers. 
     See "perldoc ./bin/prove" for details. 
 
     As part of this, a lot of boiler-plate code at the top and bottom of the
     scripts could be eliminated, and I made few other minor style clean-ups
     while I had the files open. 
 
     There should be no functional changes to the tests. 
] 
[Take advantage of new Perl testing infrastructure by eliminating needless --ignore-time mentions
Mark Stosberg <mark at summersault.com>**20080120005242] 
[Take advantage of updated Perl testing infrastructure by removing needless author mentions in tests
Mark Stosberg <mark at summersault.com>**20080120004503] 
[use --ignore-time in tests instead of "sleep", for faster, more reliable results
Mark Stosberg <mark at summersault.com>**20080118030241] 
[Issue395: avoid single letter patch names in the test suite.  
Mark Stosberg <mark at summersault.com>**20080118020634] 
[add regression test for amend-record removed file
Tommy Pettersson <ptp at lysator.liu.se>**20080122223231] 
[use UTC in date matching test untill match handles time zones
Tommy Pettersson <ptp at lysator.liu.se>**20080122134322] 
[fix bug with timestamps and obliterate.
David Roundy <droundy at darcs.net>**20080122224607] 
[Test: unpull may hide changes when using timestamp optimisation.
me at mornfall.net**20080122222513] 
[avoid printing totals that are less than our current progress.
David Roundy <droundy at darcs.net>**20080122210546] 
[TAG 2.0.0pre3
David Roundy <droundy at darcs.net>**20080122200612] 
[fix bug in restrictive_upstream_permissions test, and mark it as passing.
David Roundy <droundy at darcs.net>**20080122200429] 
[match against any repo (not just last) in determining version/state.
David Roundy <droundy at darcs.net>**20080122194501] 
[add a few changelog entries.
David Roundy <droundy at darcs.net>**20080122194307] 
[avoid a withCurrentDirectory if there's nothing to test.
David Roundy <droundy at darcs.net>**20080122192426] 
[Libwww: fix invalid read reported by valgrind.
Dmitry Kurochkin <dmitry.kurochkin at gmail.com>**20080122162936] 
[fix obliterate to work even on old patches before tags.
David Roundy <droundy at darcs.net>**20080122150520] 
[make match_a_patch and friends return true for all patches if no match is specified.
David Roundy <droundy at darcs.net>**20080122150210] 
[fix changes_moved_files bug.
David Roundy <droundy at darcs.net>**20080122141421] 
[mark optimize-relink as passing now.
David Roundy <droundy at darcs.net>**20080121191822] 
[don't compate pending and pending.tentative in optimize_relink.sh.
David Roundy <droundy at darcs.net>**20080121191656] 
[add patch to repo in optimize_relink.sh.
David Roundy <droundy at darcs.net>**20080121191642] 
[handle relative sibling directory properly.
David Roundy <droundy at darcs.net>**20080121191225] 
[simplify optimize --relink test, always calling directory temp.
David Roundy <droundy at darcs.net>**20080121182231] 
[if fs doesn't support hard links, we should pass the relink test.
David Roundy <droundy at darcs.net>**20080121181647] 
[Libwww new API: waitUrl, copyUrlFirst added; copyUrls removed.
Dmitry Kurochkin <dmitry.kurochkin at gmail.com>**20080120215022] 
[avoid overwriting prompt when waiting for input.
David Roundy <droundy at darcs.net>**20080121162814] 
[add withoutProgress to halt progress messages for a bit.
David Roundy <droundy at darcs.net>**20080121162513] 
[add some changelog entries
Tommy Pettersson <ptp at lysator.liu.se>**20080120003041] 
[attempted fix for: issue597: errors.xml not installed in installserver target
Mark Stosberg <mark at summersault.com>**20080120053617] 
[Add README.test_maintainers.txt as basic test-suite documentation.
Mark Stosberg <mark at summersault.com>**20080120051956
     The "future of testing darcs" section is my own opinion. Others
     are welcome that, wiki-style.
] 
[Add Parallel::Iterator 1.00 to tree, unmodified. It supports parallel testing and is GPL.
Mark Stosberg <mark at summersault.com>**20080120034627] 
[avoid running an unneceessary test in the "old fashioned" context
Mark Stosberg <mark at summersault.com>**20080120023410] 
[update add_in_subdir.pl to use init_tmp_repo()
Mark Stosberg <mark at summersault.com>**20080120022059] 
[Update add.pl to use init_tmp_repo syntax
Mark Stosberg <mark at summersault.com>**20080120015614] 
[add new "init_tmp_repo" function to Perl test infrastructure, to to further simplify tests.
Mark Stosberg <mark at summersault.com>**20080120015423] 
[Provide the same default author address for the shell scripts that we do for Perl.
Mark Stosberg <mark at summersault.com>**20080120010824
     This should allow them to be shorter as well. 
] 
[replace "perl_harness" with the more powerful and flexible "prove" script.
Mark Stosberg <mark at summersault.com>**20080120003101
     See "perldoc bin/prove" for feature descriptions. 
] 
[Consolidate Perl test infrastructure by move code out of perl_harness into Test::Darcs.
Mark Stosberg <mark at summersault.com>**20080120001913
     As part of this, we also explicity set a default author email address in the environment,
     which will allow us to further simplify Perl test scripts.
] 
[Adding Test::Harness 3.07 to the tree.
Mark Stosberg <mark at summersault.com>**20080119235714
     These are licensed under same terms as Perl, which includes the GPL. 
     These form the foundation of a more flexible and powerful Perl testing harness.
     They are unmodified except for minor changes to the "prove" script
     so that can find the new Perl libraries. 
] 
[issue562: Update the .sh scripts and the shell_harness so the tests can succeed when the path name has a space in it. 
Mark Stosberg <mark at summersault.com>**20080121031103] 
[issue562: update Perl test infrastructure so all Perl tests pass with a space in the path to darcs
Mark Stosberg <mark at summersault.com>**20080121014246] 
[issue600: bug fix refinement sent on behalf of twb
Mark Stosberg <mark at summersault.com>**20080121040050] 
[issue600: a test for optimize --relink
Mark Stosberg <mark at summersault.com>**20080121034028] 
[print progress messages to stderr.
David Roundy <droundy at darcs.net>**20080121154515
 Note that to get clean results, we still need to print overwrite spaces to
 stdout, so I'm not sure this is the best of plans.
] 
[make changes show no progess unless debug mode is on.
David Roundy <droundy at darcs.net>**20080121151145] 
[make progress report quieter.
David Roundy <droundy at darcs.net>**20080119171250] 
[no progress reports when running quietly.
David Roundy <droundy at darcs.net>**20080119165947] 
[change directory name in which we run tests.
David Roundy <droundy at darcs.net>**20080119165251] 
[fix bugs driver to not fail on known bugs.
David Roundy <droundy at darcs.net>**20080119164642] 
[issue244: test how 'changes' works with file names moved in the working directory
Mark Stosberg <mark at summersault.com>**20080119051151] 
[Mostly updates to use File::Slurp in more Perl test scripts
Mark Stosberg <mark at summersault.com>**20080119043737
     By avoiding direct system calls, the scripts become more portable. 
] 
[issue157: A test for how rollback handles dependencies and conflicts.
Mark Stosberg <mark at summersault.com>**20080119034531] 
[Adding File-Slurp-9999.12 perl module to tree, to add with testing. 
Mark Stosberg <mark at summersault.com>**20080119032726
     It is licensed under the GPL, and includes easy functions
     to read, write and append to files. 
] 
[issue174: behave better when we want to obliterate a patch that comes before a tag. (a test)
Mark Stosberg <mark at summersault.com>**20080119053111] 
[issue595: A test when darcs fails with a possibly-avoidable permissions error
Mark Stosberg <mark at summersault.com>**20080119014220] 
[give reasonable answer in impossible cases.
David Roundy <droundy at darcs.net>**20080119161935] 
[add more progress annotations.
David Roundy <droundy at darcs.net>**20080119140141] 
[fix bugs in unrecord.sh.
David Roundy <droundy at darcs.net>**20080119000839] 
[allow debug output from unrecord and friendds.
David Roundy <droundy at darcs.net>**20080119000801] 
[move ApplyPatches to use Progress framework.
David Roundy <droundy at darcs.net>**20080118224309] 
[move get to use new progress framework.
David Roundy <droundy at darcs.net>**20080118220003] 
[add progress-reporting framework.
David Roundy <droundy at darcs.net>**20080118212816] 
[issue549 - Pekka Pessi's rollback test.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080117205705] 
[Add test for issue194.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080117204147
 Prior to darcs2, this triggered a bug in function reconcile_unwindings.
] 
[fix issue381, send allows --edit-description with --output.
David Roundy <droundy at darcs.net>**20080117210250] 
[fix bug in pull.pl test.
David Roundy <droundy at darcs.net>**20080117205042] 
[make progress messages print with debugMessage.
David Roundy <droundy at darcs.net>**20080117203354] 
[Tell user when we are checking for conflicts.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080117201208
 Otherwise we mislead the user into thinking the slow part is the
 'diffing dir...'
] 
[Actually run perl tests.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080117200149
 Fix my harness refactor.
] 
[tiny cleanup in Send.
David Roundy <droundy at darcs.net>**20080117191703] 
[move debugMessage to Darcs.Utils.
David Roundy <droundy at darcs.net>**20080117190043] 
[fix bug in running of test suite with hashed repos and add test for bug.
David Roundy <droundy at darcs.net>**20080117185403] 
[add a couple more debug messages.
David Roundy <droundy at darcs.net>**20080117185059] 
[clean up debug output in record.
David Roundy <droundy at darcs.net>**20080117183922] 
[fix bug where record --look-for-adds left patches in pending.
David Roundy <droundy at darcs.net>**20080117182618] 
[Canonize Andrew J. Kroll and Erik Schnetter.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080117162329
 
 Wrong email address for Erik.  Googled name for Andrew.
] 
[Fix <cannot stat `../tests/{lib,perl_harness}'> in Makefile.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080117172215] 
[Refactor test/bug harness calls in Makefile.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080117171706] 
[Move issue381 test to bugs directory.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080117161704] 
[Added test for issue381.
Marnix Klooster <marnix.klooster at gmail.com>**20070109210835] 
[mark look_for_add.sh as buggy.
David Roundy <droundy at darcs.net>**20080117160348] 
[Check that using 'record --look-for-add --all' left an empty pending patch.
nicolas.pouillard at gmail.com**20080117115159] 
[update docs on rollback.
David Roundy <droundy at darcs.net>**20080117152948] 
[libwww: do not fail when server reports Content-Encoding.
Dmitry Kurochkin <dmitry.kurochkin at gmail.com>**20080117121621] 
[libwww: use waitNextUrl instead of libwww_wait_next_url in copyUrl.
Dmitry Kurochkin <dmitry.kurochkin at gmail.com>**20080117121544] 
[add changelog entry for rollback.
David Roundy <droundy at darcs.net>**20080116212037] 
[rollback my "simplification" of conflict options for pull and apply.
David Roundy <droundy at darcs.net>**20080116211650] 
[eliminate apply_conflict_options and pull_[same] in favor of unified conflict_options.
David Roundy <droundy at darcs.net>**20080116205623] 
[reimplement rollback.
David Roundy <droundy at darcs.net>**20080116203644] 
[fix pull.pl test to show off rollback error.
David Roundy <droundy at darcs.net>**20080110230904] 
[Use http://darcs.net/repos/stable instead of http://abridgegame.org/darcs.
nicolas.pouillard at gmail.com**20080116191035] 
[Add --{allow,dont-allow,mark}-conflicts to darcs pull.
nicolas.pouillard at gmail.com**20080116193426
 
 This patch also merge the --external option to pull_conflicts_options
 like with apply.
] 
[fix bug where get could produce a darcs-2 repository from a darcs-1 repo incorrectly.
David Roundy <droundy at darcs.net>**20080116194547] 
[fix replacePristine to work regardless of current working directory.
David Roundy <droundy at darcs.net>**20080116162528
 This is intended to be a property of all Repository functions except those
 that explicitly mention the current directory in their name.
] 
[treat errors in reading current pristine cache as corruption in darcs repair.
David Roundy <droundy at darcs.net>**20080116162427] 
[make withCurrentDirectory succeed even if old directory has been removed.
David Roundy <droundy at darcs.net>**20080116162358] 
[fixed bug triggered by conflict-doppleganger test.
David Roundy <droundy at darcs.net>**20080116161548] 
[make doppelganger test more verbose.
David Roundy <droundy at darcs.net>**20080116161421] 
[Fix darcs repair with darcs1 format.
nicolas.pouillard at gmail.com**20080116024352
 
 Using  withCurentDirectory  was  wrong  because this function wants to restore
 the  current  directory.  In  this  case it no longer exists (.../newpristine)
 because renamed to .../pristine.
] 
[Add a test case for darcs repair.
nicolas.pouillard at gmail.com**20080116023943
 
 In fact both darcs1 and hashed format are broken.
] 
[fix bugs in date parsing pointed out by Mark.
David Roundy <droundy at darcs.net>**20080115235341] 
[treat partially-specified dates as more vague matches.
David Roundy <droundy at darcs.net>**20080115213601
 i.e. if you --match "date 2007" you'll get all the patches in 2007, not
 just those on January 1, 2007.
] 
[issue31, issue187: Update date matching so we test for an actual match in some cases, not just date parsing.
Mark Stosberg <mark at summersault.com>**20080110030400
 This revealed some bugs which have yet to be fixed, so the test is still failing. 
] 
[fix perl bug script code.
David Roundy <droundy at darcs.net>**20080115215954] 
[add some changelog entries
Tommy Pettersson <ptp at lysator.liu.se>**20080115214838] 
[add some changelog entries
Tommy Pettersson <ptp at lysator.liu.se>**20071111204931] 
[improve existing-bug test suite driver.
David Roundy <droundy at darcs.net>**20080115204455] 
[mark doppleganger test as currently buggy.
David Roundy <droundy at darcs.net>**20080115201835] 
[add directory for unresolved bug test scripts.
David Roundy <droundy at darcs.net>**20080115201733] 
[Issue81: Add test which shows that old and hashed formats consider dopplegangers a conflict, but the darcs-2 format doesn't.
Mark Stosberg <mark at summersault.com>**20080112233151] 
[major speedup in applyHashed.
David Roundy <droundy at darcs.net>**20080115191825
 This should make darcs pull on very large repositories (i.e. the ghc
 repository) equivalent to the speed of darcs1, possibly faster.
 
 The change is that now each named patch is applied to the pristine cache in
 memory, with writing the changed files and directories to disk happening
 only at the end.  This reduces disk activity, and also reduces the number
 of sha1 hashes that are computed, with a small increase in the worst-case
 memory use.  This is achieved by caching the hashes of slurped files in the
 Slurpy itself, which allows us to identify "dirty" files.
] 
[fix issue588 by simplifying pending handling.
David Roundy <droundy at darcs.net>**20080115162143] 
[add test for issue588 (thanks to Nicolas Pouillard!).
David Roundy <droundy at darcs.net>**20080115152504] 
[add changelog message for issue586.
David Roundy <droundy at darcs.net>**20080115152903] 
[make IO instance of WriteableDirectory fail when creating a file that already exists.
David Roundy <droundy at darcs.net>**20080115152422] 
[Fix a bug in darcs repair: go to the repo dir and slurp the new pristine dir.
nicolas.pouillard at gmail.com**20080115144751] 
[Fix remote darcs put. Dashes was forgotten before the option name.
nicolas.pouillard at gmail.com**20080115144416] 
[bugfix, call perl's chmod with octal value (instead of string)
Tommy Pettersson <ptp at lysator.liu.se>**20080112153018
 The string value gave the directory very weird permissions.
] 
[use $- in list_authors and make_changelog for ghc 6.4 happiness
Tommy Pettersson <ptp at lysator.liu.se>**20080112150002] 
[more test script clean-ups, modernization
Mark Stosberg <mark at summersault.com>**20080110030955] 
[clean up test script header...no functional changes.
Mark Stosberg <mark at summersault.com>**20080110023044] 
[fix potentially troublesome 'rm -rf temp*' commands in test scripts, which could have deleted more than intended.
Mark Stosberg <mark at summersault.com>**20080110010218] 
[More concise backup warning.
Eric Kow <eric.kow at gmail.com>**20071105012930] 
[Remove now obsolete wrapper for Map (we now require GHC >= 6.4).
Eric Kow <eric.kow at gmail.com>**20071105192636] 
[Modernise Data.Map import.
Eric Kow <eric.kow at gmail.com>**20071105192530] 
[Give ssh CM socket a unique name for each darcs process.
Eric Kow <eric.kow at gmail.com>**20071105021956
 Delete the socket in the unlikely event that a previous darcs had a socket
 with the same name left over.
] 
[Create ssh CM socket in $HOME/.darcs if possible.
Eric Kow <eric.kow at gmail.com>**20071105015525] 
[fix bug in darcs repair (issue586).
David Roundy <droundy at darcs.net>**20080114204243] 
[A test for unrecording checkpoint tags, inspired by issue517
Mark Stosberg <mark at summersault.com>**20080113025555] 
[resolve conflict.
David Roundy <droundy at darcs.net>**20080111160045] 
[Conflict backup files are boring.
Trent W. Buck <twb at cyber.com.au>**20080110163822] 
[more boring extensions
forge at dr.ea.ms**20080111142046
 Added extensions for CLISP, CMUCL, and "part" files which result in
 failed KDE copy operations.
] 
[resolve conflict in Libwww.
David Roundy <droundy at darcs.net>**20080110234609] 
[Some error reporting for libwww.
Dmitry Kurochkin <dmitry.kurochkin at gmail.com>**20080110221921] 
[add optional support for using the pure haskell Network.HTTP http implementation
John Meacham <john at repetae.net>**20080110215859] 
[make darcs-2 repositories store patches in more-nicely-formated format
David Roundy <droundy at darcs.net>**20080110220413] 
[fix filename encoding issue in ShowFiles.
David Roundy <droundy at darcs.net>**20080110204120] 
[add debug message when grabbing files using libcurl.
David Roundy <droundy at darcs.net>**20080110202200] 
[make using libwww no longer the default, even if it's present.
David Roundy <droundy at darcs.net>**20080110195753
 There is a bug in our libwww bindings that I haven't located... if it isn't
 fixed, we should definitely remove this binding before the darcs 2.0
 release.
] 
[make Libwww.copyUrls provide debug output.
David Roundy <droundy at darcs.net>**20080110195733] 
[test: Exibit a falling test about rollback.
nicolas.pouillard at gmail.com**20080107150224
 Indeed  the only test about rollback was br0ken by a prior test that creates a
 directory  and  remove  read  permissions  to  it.  The  rollback test do some
 records  that  silently  fail  by lack of permissions, finally the rollback is
 cancelled since the named patch doesn't exist.
 This shows that rollback need some care.
] 
[Canonize Gwern Branwen, Nicolas Pouillard, Eric Kow.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080109152727] 
[Eliminate configure test for Text.PrettyPrint.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080109152927] 
[Use our own Printer instead of Text.PrettyPrint (make_changelog).
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080109172910] 
[Add parens functionality to the printer code.
Eric Kow <E.Y.Kow at brighton.ac.uk>**20080109144956] 
[issue567: regression test for moving a file to the same location as itself
Mark Stosberg <mark at summersault.com>**20080109032346] 
[restore behavior where we display conflicts in --summary mode.
David Roundy <droundy at darcs.net>**20080110004605] 
[regression test for issue406
Mark Stosberg <mark at summersault.com>**20080109044500] 
[fix latex bug in docs.
David Roundy <droundy at darcs.net>**20080108211102] 
[fix latex bug in docs.
David Roundy <droundy at darcs.net>**20080108205912] 
[fix bug in show_tags.sh cleanup.
David Roundy <droundy at darcs.net>**20080108204430] 
[doc,typo: some s/darcs commit/darcs record/
nicolas.pouillard at gmail.com**20080107142702] 
[test: Add a test for darcs show tags.
nicolas.pouillard at gmail.com**20080107142628] 
[document the three repo format flags for "darcs init"
Mark Stosberg <mark at summersault.com>**20080108041024] 
[improve the one-paragraph docs for "darcs init"
Mark Stosberg <mark at summersault.com>**20080108040941] 
[Quit defining inventory format options recursively. Provide user-oriented descriptions.
Mark Stosberg <mark at summersault.com>**20080108035256] 
[update partial.sh to show off improved darcs-2/partial functionality
Mark Stosberg <mark at summersault.com>**20080108024712] 
[typo and bug fix in partial.sh.
Mark Stosberg <mark at summersault.com>**20080108022808
 
 It turned out the call to "darcs optimize" was silently failing to create a checkpoint
 because there was no tag. This caused the remaining tests for --partial to run against 
 a full repo, not a partial one. 
] 
[issue55: document that darcs handles some types of binary files automatically. 
Mark Stosberg <mark at summersault.com>**20080108010043] 
[correct apparent typo in test.
Mark Stosberg <mark at summersault.com>**20080108005710
     The fix made more sense than the former behavior of comparing a file to itself. 
] 
[issue395: eliminate patches with a single character name from shell scripts in the test suite.
Mark Stosberg <mark at summersault.com>**20080106051821] 
[prevent warning in test script and remove mysterious exit(1) call.
Mark Stosberg <mark at summersault.com>**20080106052622] 
[issue526: improve Perl test suite.
Mark Stosberg <mark at summersault.com>**20080106045548
     - better compatibility when path to darcs includes a space
     - better portability by eliminating some system calls
     - general style improvements
] 
[minor white-space and code style improvements
Mark Stosberg <mark at summersault.com>**20080105183641] 
[typo fix on GNUmakefile comment
Mark Stosberg <mark at summersault.com>**20080105183027] 
[refactor: improve style and portability of pull.pl test script.
Mark Stosberg <mark at summersault.com>**20080105181751
     Many direct system calls were eliminated. No functional changes.  
] 
[issue347 - document that single quotes should be used in .darcs/defaults
Mark Stosberg <mark at summersault.com>**20080101164428] 
[add feature requested in issue576.
David Roundy <droundy at darcs.net>**20080105150125] 
[fix bug in issue576.
David Roundy <droundy at darcs.net>**20080105144929] 
[add test that triggers bug in issue576.
David Roundy <droundy at darcs.net>**20080105144812] 
[Make sure we test the 'darcs' we just built and not one in a global path.
Mark Stosberg <mark at summersault.com>**20080102002235
     This done by using "$DARCS" instead of 'darcs'.
     However, in my case the updated test FAILS unexplainably with 2.0.0pre3,
     by failing to detect that a file has changed. 
     If I follow along in a shell and run the same commands with Darcs 2, 
     the problem does not appear. 
] 
[add configure support for libwww.
David Roundy <droundy at darcs.net>**20080104201255] 
[make bug message more explicit.
David Roundy <droundy at darcs.net>**20080104004253] 
[Initial implementation of HTTP pipelining using libwww.
Dmitry Kurochkin <dmitry.kurochkin at gmail.com>**20071222144902] 
[make indent slightly more concise using lines and unlines.
David Roundy <droundy at darcs.net>**20080104003953] 
[refactor: replace recursive indent with more concise find-and-replace syntax
Mark Stosberg <mark at summersault.com>**20080101200447] 
[simplify (and debug) pending handling.
David Roundy <droundy at darcs.net>**20071227133618
 Note that this change could lead to performance regressions, but I believe
 that these regressions would be strongly bounded (never worse than a
 whatsnew), and this simplification makes the code much easier to safely
 modify.
] 
[make updating of pending on pull much more efficient.
David Roundy <droundy at darcs.net>**20071224131059] 
[simplify a bit of code.
David Roundy <droundy at darcs.net>**20071224131023] 
[fix type-witness bug in HopefullyPrivate.
David Roundy <droundy at darcs.net>**20071223141149] 
[simplify Get
David Roundy <droundy at darcs.net>**20071223025108] 
[simplify tentativelyAddPatch by removing unused return value.
David Roundy <droundy at darcs.net>**20071223024400] 
[simplify away np2prims and nps2prims.
David Roundy <droundy at darcs.net>**20071223022145] 
[try to avoid rewriting patches that we've just read.
David Roundy <droundy at darcs.net>**20071222190029] 
[generalize CommandsAux utility functions.
David Roundy <droundy at darcs.net>**20071222162952] 
[add new instances for PatchInfoAnd.
David Roundy <droundy at darcs.net>**20071222144439] 
[change tentativelyAddPatch to accept a PatchInfoAnd p.
David Roundy <droundy at darcs.net>**20071222140517] 
[internal prepration for optimization saving patch writing.
David Roundy <droundy at darcs.net>**20071222134834] 
[add changelog entry.
David Roundy <droundy at darcs.net>**20071219162646] 
[add fixme indicating where the code could be simplified.
David Roundy <droundy at darcs.net>**20071221135649] 
[make reading of hashed inventories lazier.
David Roundy <droundy at darcs.net>**20071221133453] 
[resolve conflicts in mv_and_remove_tests.sh.
David Roundy <droundy at darcs.net>**20071219144638] 
[Fix !(...|...) in mv_and_remove_tests.sh.
Dave Love <fx at gnu.org>**20071218001826
 Assume the original construct should have been `! ... | ...' and
 replace with a portable version of that.
] 
[[issue571] Redo last HAVE_TERMIO_H fix.
Dave Love <fx at gnu.org>**20071218140508
 Not the most direct fix, but simpler.
] 
[Fix configure test for gadt type witnesses.
Dave Love <fx at gnu.org>**20071218120139] 
[use --ignore-times in all tests.
David Roundy <droundy at darcs.net>**20071217225159
 This is because the hashed repository is a bit pickier, in that
 it no longer checks file lengths when the file modification times
 match.
] 
[enable modification time checking on hashed repositories.
David Roundy <droundy at darcs.net>**20071217220237] 
[Pass two args to `cmp' in tests, following POSIX.
Dave Love <fx at gnu.org>**20071216180503
 Fixes some failures on Solaris.
] 
[resolve silly conflict with myself.
David Roundy <droundy at darcs.net>**20071217200855] 
[clean up SelectChanges (eliminating Bools)
David Roundy <droundy at darcs.net>**20071217191809] 
[make a few more files compile with type witnesses.
David Roundy <droundy at darcs.net>**20071217183234] 
[fix bug in revert (in writing the unrevert file).
David Roundy <droundy at darcs.net>**20071216215225] 
[make a few more files compile with type witnesses.
David Roundy <droundy at darcs.net>**20071217164815] 
[remove tabs.
David Roundy <droundy at darcs.net>**20071216224617] 
[bump version number preemptively to 2.0.0pre3.
David Roundy <droundy at darcs.net>**20071216222823] 
[fix doc bug in show contents.
David Roundy <droundy at darcs.net>**20071216214002] 
[TAG 2.0.0pre2
David Roundy <droundy at darcs.net>**20071216201647] 
Patch bundle hash:
f1bc26195b19a5e404825e67487ba478da5c78b0
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 186 bytes
Desc: not available
Url : http://lists.osuosl.org/pipermail/darcs-devel/attachments/20080203/36c8cbb6/attachment-0001.pgp 


More information about the darcs-devel mailing list