darcs-reviewed mirror — http://darcs.net
import Control.Monad ( filterM, forM_, unless )
import Control.Monad ( filterM, forM_, forM, unless )
import qualified Data.ByteString.Lazy as BL
import Darcs.Patch.FileName( fp2fn )
import Darcs.Patch.ApplyMonad ( mReadFilePS )
import Darcs.Patch.FileName( FileName, fp2fn )
import Darcs.Patch.ApplyMonad ( mReadFilePS, withFiles )
import Storage.Hashed.Monad( virtualTreeIO, fileExists )
import qualified Storage.Hashed.Monad as HSM
matched <- if (haveNonrangeMatch opts)
unapply <- if (haveNonrangeMatch opts)
snd `fmap` virtualTreeIO (unapply_to_match patchset) pristine
else return pristine
let dump = do okpaths <- filterM fileExists $ map (floatPath . toFilePath) path_list
forM_ okpaths $ \f -> do content <- mReadFilePS (fp2fn $ anchorPath "" f)
liftIO (B.hPut stdout content)
-- Warning: A do-notation statement discarded a result of type ((), Storage.Hashed.Tree.Tree IO).
_ <- virtualTreeIO dump matched
return (unapply_to_match patchset)
else return (return ())
let dump :: HSM.TreeIO [(FileName, B.ByteString)]
dump = do okpaths <- filterM HSM.fileExists $ map (floatPath . toFilePath) path_list
forM okpaths $ \f -> do content <- HSM.readFile f
return (fp2fn $ ("./" ++) $ anchorPath "" f, B.concat $ BL.toChunks content)
files <- flip withFiles unapply `fmap` fst `fmap` HSM.virtualTreeIO dump pristine
forM_ files $ \(_, f) -> B.hPut stdout f