@@ -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. Mapk  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