-compareContent _ [] _ [] = []
-compareContent _ xs _ [] = map (First . ExtraFile . tlFileName . snd) xs
-compareContent _ [] _ ys = map (Second . ExtraFile . tlFileName . snd) ys
-compareContent ways1 xs1 ways2 xs2
- = case (xs1, xs2) of
- ([], []) -> []
- (xs, []) -> concatMap (mkExtraFile ways1 First . tlFileName . snd) xs
- ([], ys) -> concatMap (mkExtraFile ways2 Second . tlFileName . snd) ys
- ((fd1, tl1) : xs1', (fd2, tl2) : xs2') ->
- case fd1 `compare` fd2 of
- EQ -> map Change (compareTarLine tl1 tl2)
- ++ compareContent ways1 xs1' ways2 xs2'
- LT -> mkExtraFile ways1 First (tlFileName tl1)
- ++ compareContent ways1 xs1' ways2 xs2
- GT -> mkExtraFile ways2 Second (tlFileName tl2)
- ++ compareContent ways1 xs1 ways2 xs2'
- where mkExtraFile ways mkFileChange filename
- = case findFileWay filename of
- Just way
- | way `elem` ways -> []
+compareContent mWays1 xs1all mWays2 xs2all
+ = f xs1all xs2all
+ where f [] [] = []
+ f xs [] = concatMap (mkExtraFile mWays1 mWays2 First . tlFileName . snd) xs
+ f [] ys = concatMap (mkExtraFile mWays2 mWays1 Second . tlFileName . snd) ys
+ f xs1@((fd1, tl1) : xs1') xs2@((fd2, tl2) : xs2')
+ = case fd1 `compare` fd2 of
+ EQ -> map Change (compareTarLine tl1 tl2)
+ ++ f xs1' xs2'
+ LT -> mkExtraFile mWays1 mWays2 First (tlFileName tl1)
+ ++ f xs1' xs2
+ GT -> mkExtraFile mWays2 mWays1 Second (tlFileName tl2)
+ ++ f xs1 xs2'
+ mkExtraFile mWaysMe mWaysThem mkFileChange filename
+ = case (findFileWay filename, mWaysMe, mWaysThem) of
+ (Just way, Just waysMe, Just waysThem)
+ | (way `elem` waysMe) && not (way `elem` waysThem) -> []