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