module Drifter ( -- * Managing Migrations resolveDependencyOrder , changeSequence , migrate -- * Types , Drifter(..) , ChangeName(..) , Change(..) , Description , Method , DBConnection ) where ------------------------------------------------------------------------------- import Data.List ------------------------------------------------------------------------------- import Drifter.Graph import Drifter.Types ------------------------------------------------------------------------------- -- | This is a helper for the common case of where you just want -- dependencies to run in list order. This will take the input list -- and set their dependencies to run in the given sequence. changeSequence :: [Change a] -> [Change a] changeSequence [] = [] changeSequence (x:xs) = reverse $ snd $ foldl' go (x, [x]) xs where go :: (Change a, [Change a]) -> Change a -> (Change a, [Change a]) go (lastChange, xs') c = let c' = c { changeDependencies = [changeName lastChange] } in (c', c':xs')