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