module Plan ( PlanCmd(..) , Plan , planCmdExec , seqToList ) where ------------------------------------------------------------------------- -- Imports ------------------------------------------------------------------------- import Data.Lens.Common import Data.Lens.Template -- import Data.Graph.GraphVisit -- import qualified Data.Map as Map import Data.Sequence import Data.Typeable -- import qualified Data.Set as Set -- import Control.Monad -- import Control.Monad.State.Strict -- import Control.Monad.Trans -- import Control.Monad.Error.Class -- import qualified Control.Exception as CE -- import System.Console.GetOpt -- import System.Environment -- import System.IO -- import System.Exit import System.FilePath -- import System.Directory -- import System.Cmd -- import System.Process -- import System.Posix.Process import Opts import State import Cmds ------------------------------------------------------------------------- -- Execution plan for modification commands ------------------------------------------------------------------------- data PlanCmd = PlanCmd_CP -- ^ Copy file { _pcFrom :: FilePath , _pcTo :: FilePath } | PlanCmd_ModfRef -- ^ Modify ref in file { _pcInFile :: FilePath , _pcFrom :: FilePath , _pcTo :: FilePath } | PlanCmd_IntlRename -- ^ Modify internal name in file { _pcInFile :: FilePath , _pcTo :: FilePath } deriving (Show,Typeable) makeLens ''PlanCmd type Plan = Seq PlanCmd ------------------------------------------------------------------------- -- Actual execution ------------------------------------------------------------------------- planCmdExec :: PlanCmd -> StRun () planCmdExec pcmd = case pcmd of PlanCmd_CP fFr fTo -> do cmdMkdir "-p" $ takeDirectory fTo cmdCP "-f" fFr fTo cmdChmod "+w" fTo PlanCmd_ModfRef fIn fFr fTo -> do cmdInstallNameToolChange fIn fFr fTo PlanCmd_IntlRename fIn fTo -> do cmdInstallNameToolId fIn fTo ------------------------------------------------------------------------- -- Seq extension ------------------------------------------------------------------------- seqToList :: Seq a -> [a] seqToList s = case viewl s of EmptyL -> [] hd :< tl -> hd : seqToList tl