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