{-# LANGUAGE LambdaCase #-} module Main where import Data.Text.IO (readFile, writeFile) import Prelude hiding (readFile, writeFile) import System.Environment (getArgs) import System.Exit import System.IO (hPutStrLn, stderr) import Update.Nix.FetchGit import Update.Nix.FetchGit.Utils import Update.Nix.FetchGit.Warning import Update.Span main :: IO () main = -- Super simple command line parsing at the moment, just look for one -- filename. getArgs >>= \case [filename] -> do t <- readFile filename -- Get the updates from this file. updatesFromFile filename >>= \case -- If we have any errors, print them and finish. Left ws -> printErrorAndExit ws Right us -> -- Update the text of the file in memory. case updateSpans us t of -- If updates are needed, write to the file. t' | t' /= t -> writeFile filename t' _ -> return () _ -> do putStrLn "Usage: update-nix-fetchgit filename" exitWith (ExitFailure 1) printErrorAndExit :: Warning -> IO () printErrorAndExit e = do hPutStrLn stderr (formatWarning e) exitWith (ExitFailure 1)