1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
module Main
where
import System.Directory.Tree
import qualified Data.Foldable as F
import qualified Data.Traversable as T
-- for main2:
import Data.Digest.Pure.MD5
import qualified Data.ByteString.Lazy as B
main = darcsInitialize
-- simple example of creating a directory by hand and writing to disk: here we
-- replicate (kind of) running the command "darcs initialize" in the current
-- directory:
darcsInitialize = writeDirectory ("source_dir" :/ darcs_d)
where darcs_d = Dir "_darcs" [prist_d, prefs_d, patch_d, inven_f, forma_f]
prist_d = Dir "pristine.hashed" [hash_f]
prefs_d = Dir "prefs" [motd_f, bori_f, bina_f]
patch_d = Dir "patches" []
inven_f = File "hashed_inventory" ""
forma_f = File "format" "hashed\ndarcs-2\n"
hash_f = File "da39a3ee5..." ""
motd_f = File "motd" ""
bori_f = File "boring" "# Boring file regexps:\n..."
bina_f = File "binaries" "# Binary file regexps:\n..."
-- here we read directories from different locations on the disk and combine
-- them into a new directory structure, ignoring the anchored base directory,
-- then simply 'print' the structure to screen:
combineDirectories =
do (_:/d1) <- readDirectory "../dir1/"
(b:/d2) <- readDirectory "/home/me/dir2"
let readme = File "README" "nothing to see here"
-- anchor to the parent directory:
print $ b:/Dir "Combined_Dir_Test" [d1,d2,readme]
-- read two directory structures using readFile from Data.ByteString, and build
-- up an MD5 hash of all the files in each directory, compare the two hashes
-- to see if the directories are identical in their files. (note: doesn't take
-- into account directory name mis-matches)
verifyDirectories =
do (_:/bsd1) <- readByteStrs "./dir_modified"
(_:/bsd2) <- readByteStrs "./dir"
let hash1 = hashDir bsd1
let hash2 = hashDir bsd2
print $ if hash1 == hash2
then "directories match with hash: " ++ show hash1
else show hash1 ++ " doesn't match " ++ show hash2
where readByteStrs = readDirectoryWith B.readFile
hashDir = md5Finalize. F.foldl' md5Update md5InitialContext
|