@@ -57,6 +57,7 @@ import HaskellCI.Bash
57
57
import HaskellCI.Cli
58
58
import HaskellCI.Compiler
59
59
import HaskellCI.Config
60
+ import HaskellCI.Config.Diff
60
61
import HaskellCI.Config.Dump
61
62
import HaskellCI.Diagnostics
62
63
import HaskellCI.GitConfig
@@ -89,6 +90,17 @@ main = do
89
90
CommandDumpConfig -> do
90
91
putStr $ unlines $ runDG configGrammar
91
92
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
+
92
104
CommandRegenerate -> do
93
105
regenerateBash opts
94
106
regenerateGitHub opts
@@ -115,6 +127,26 @@ main = do
115
127
ifor_ :: Map. Map k v -> (k -> v -> IO a ) -> IO ()
116
128
ifor_ xs f = Map. foldlWithKey' (\ m k a -> m >> void (f k a)) (return () ) xs
117
129
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
+
118
150
-------------------------------------------------------------------------------
119
151
-- Travis
120
152
-------------------------------------------------------------------------------
0 commit comments