@@ -57,6 +57,7 @@ import HaskellCI.Bash
5757import HaskellCI.Cli
5858import HaskellCI.Compiler
5959import HaskellCI.Config
60+ import HaskellCI.Config.Diff
6061import HaskellCI.Config.Dump
6162import HaskellCI.Diagnostics
6263import HaskellCI.GitConfig
@@ -89,6 +90,17 @@ main = do
8990 CommandDumpConfig -> do
9091 putStr $ unlines $ runDG configGrammar
9192
93+ CommandDiffConfig cfg fp Nothing -> do
94+ newConfig <- configFromRegenOrConfigFile fp
95+
96+ let oldConfig = optConfigMorphism opts emptyConfig
97+ putStr . unlines $ diffConfigs cfg configGrammar oldConfig newConfig
98+
99+ CommandDiffConfig cfg oldConfigFp (Just newConfigFp) -> do
100+ oldConfig <- configFromRegenOrConfigFile oldConfigFp
101+ newConfig <- configFromRegenOrConfigFile newConfigFp
102+ putStr . unlines $ diffConfigs cfg configGrammar oldConfig newConfig
103+
92104 CommandRegenerate -> do
93105 regenerateBash opts
94106 regenerateGitHub opts
@@ -115,6 +127,26 @@ main = do
115127 ifor_ :: Map. Map k v -> (k -> v -> IO a ) -> IO ()
116128 ifor_ xs f = Map. foldlWithKey' (\ m k a -> m >> void (f k a)) (return () ) xs
117129
130+ -------------------------------------------------------------------------------
131+ -- Diffing
132+ -------------------------------------------------------------------------------
133+ configFromRegenOrConfigFile :: FilePath -> IO Config
134+ configFromRegenOrConfigFile fp = do
135+ withContents fp noFile $ \ contents -> case findRegendataArgv contents of
136+ Nothing -> readConfigFile fp
137+ Just (mversion, argv) -> do
138+ -- warn if we regenerate using older haskell-ci
139+ for_ mversion $ \ version -> for_ (simpleParsec haskellCIVerStr) $ \ haskellCIVer ->
140+ when (haskellCIVer < version) $ do
141+ putStrLnWarn $ " Regenerating using older haskell-ci-" ++ haskellCIVerStr
142+ putStrLnWarn $ " File generated using haskell-ci-" ++ prettyShow version
143+
144+ opts <- snd <$> parseOptions argv
145+ optConfigMorphism opts <$> findConfigFile (optConfig opts)
146+ where
147+ noFile :: IO Config
148+ noFile = putStrLnErr $ " No file named \" " ++ fp ++ " \" exists."
149+
118150-------------------------------------------------------------------------------
119151-- Travis
120152-------------------------------------------------------------------------------
0 commit comments