import Prelude hiding ( writeFile ) import Control.Monad import Control.Monad.State.Strict import Control.Monad.Trans import System.FilePath import Storage.Hashed.Tree import Storage.Hashed.AnchoredPath( floatPath ) import Storage.Hashed.Monad import Storage.Hashed.Darcs import Storage.Hashed.Plain import qualified Data.ByteString.Lazy as BL import qualified Data.ByteString as BS import qualified Data.Set as S primes l = go [] l where go have (x:xs) | any ((==0) . (mod x)) have = go have xs | otherwise = go (x:have) xs go have [] = have buildup = do forM (primes [2..5000]) $ \i -> do liftIO $ putStrLn $ "DIRECTORY: " ++ show i createDirectory (floatPath $ show i) forM (primes [2..70]) $ \j -> do writeFile (floatPath $ show j show j) (BL.fromChunks [BS.replicate (i * j + 1000000) 0]) liftIO $ putStrLn $ "FILE: " ++ show i ++ "/" ++ show j main = do writeDarcsHashed emptyTree "./_monadtest" hashedTreeIO buildup emptyTree "./_monadtest" -- plainTreeIO buildup emptyTree "./_monadtest" -- runTreeMonad buildup $ initialState emptyTree bazinga where bazinga ch = do forM (S.toList ch) $ \c -> do current <- gets tree case find current c of Just (File b) -> do liftIO $ readBlob b >>= print . BL.length _ -> return () modify $ \st -> st { tree = emptyTree }