blob: 5ca6f069608a242eae314f1905d09dc3b7020ae9 [file] [log] [blame]
sewardj8cbd68c2006-10-17 21:04:15 +00001
2module Main where
3
4import IO
5import Directory
6import System
7
8dirAA = "in-AAcommon-6077-1660"
9dirBB = "in-BBtrunk"
10dirCC = "in-CCaixbranch"
11dirRR = "RESULT"
12
13maybe_do :: String -> IO ()
14maybe_do f
15 = let r = dirRR ++ "/" ++ f
16 a = dirAA ++ "/" ++ f
17 b = dirBB ++ "/" ++ f
18 c = dirCC ++ "/" ++ f
19 in
20 do x <- doesFileExist r
21 if x
22 then hPutStrLn stderr ("done: " ++ f)
23 else
24 do hPutStrLn stderr (" do: " ++ f)
25 xx <- system ("mkdir -p " ++ basename r)
26 rs <- merge3 r a b c
27 hPutStrLn stderr (rs ++ f)
28
29
30merge3 :: String -> String -> String -> String -> IO String
31merge3 r a b c
32 = do ca <- readFile a
33 cb <- readFile b
34 cc <- readFile c
35 let same = identical3 ca cb cc
36 if same
37 then
38 do ec <- system ("/bin/cp " ++ a ++ " " ++ r)
39 if ec == ExitSuccess
40 then return "COPY: "
41 else barf "/bin/cp failed"
42 else
43 do ec <- system ("kdiff3 -m -o " ++ r ++ " -b "
44 ++ a ++ " " ++ b ++ " " ++ c ++ " &> /dev/null" )
45 if ec == ExitSuccess
46 then return " ok: "
47 else barf "kdiff3 failed"
48
49barf :: String -> IO a
50barf who
51 = do hPutStrLn stderr ("FAIL: " ++ who)
52 exitWith ExitSuccess
53
54identical3 :: String -> String -> String -> Bool
55identical3 [] [] [] = True
56identical3 (x:xs) (y:ys) (z:zs)
57 = x == y && y == z && identical3 xs ys zs
58identical3 _ _ _ = False
59
60main :: IO ()
61main
62 = do t <- readFile "FILEScba"
63 let fs = lines t
64 mapM_ maybe_do fs
65
66basename = reverse . drop 1 . dropWhile (/= '/') . reverse