packages feed

hsenv 0.3 → 0.4

raw patch · 9 files changed

+64/−37 lines, 9 files

Files

hsenv.cabal view
@@ -1,6 +1,6 @@ Name:                hsenv -Version:             0.3+Version:             0.4  Synopsis:            Virtual Haskell Environment builder 
skeletons/activate view
@@ -19,24 +19,29 @@ echo "" echo "To exit from this virtual environment, enter command 'deactivate_hsenv'." -export "HSENV_PATH_BACKUP"="${PATH}"-export "HSENV_PS1_BACKUP"="${PS1}"+HSENV_PATH_BACKUP="$PATH" +if <MODIFY_PS1>; then+    HSENV_PS1_BACKUP="$PS1"+fi+ deactivate_hsenv() {     echo "Deactivating ${HSENV_NAME} Virtual Haskell Environment (at ${HSENV})."     echo "Restoring previous environment settings." -    export "PATH"="${HSENV_PATH_BACKUP}"-    unset -v "HSENV_PATH_BACKUP"-    export "PS1"="${HSENV_PS1_BACKUP}"-    unset -v "HSENV_PS1_BACKUP"+    export PATH="$HSENV_PATH_BACKUP"+    unset -v HSENV_PATH_BACKUP +    if <MODIFY_PS1>; then+        PS1="$HSENV_PS1_BACKUP"+        unset -v HSENV_PS1_BACKUP+    fi+     unset -v PACKAGE_DB_FOR_CABAL     unset -v PACKAGE_DB_FOR_GHC_PKG     unset -v PACKAGE_DB_FOR_GHC     unset -v HSENV     unset -v HSENV_NAME-    unset -v GHC_PACKAGE_PATH     unset -f deactivate_hsenv      if [ -n "$BASH" -o -n "$ZSH_VERSION" ]; then@@ -79,7 +84,7 @@     PKG_DB_OPT_SUFFIX="db" fi -GHC_PACKAGE_PATH_REPLACEMENT="$(cat <HSENV_DIR>/ghc_package_path_var | sed -r -e 's/^/:/' -e 's/::*/:/g' -e 's/:\s*$//')"+GHC_PACKAGE_PATH_REPLACEMENT="$(cat <HSENV_DIR>/ghc_package_path_var | sed -e 's/^/:/' -e 's/::*/:/g' -e 's/:\s*$//')"  replace_pkg () {   replacement=$1@@ -92,7 +97,13 @@ export PACKAGE_DB_FOR_GHC=" -no-user-package-${PKG_DB_OPT_SUFFIX} $(replace_pkg -package-${PKG_DB_OPT_SUFFIX}=)" export PACKAGE_DB_FOR_GHC_MOD=" -g -no-user-package-${PKG_DB_OPT_SUFFIX} $(replace_pkg '-g -package-'${PKG_DB_OPT_SUFFIX}=)" -export PS1="(${HSENV_NAME})${PS1}"+if <MODIFY_PS1>; then+    if [ -n "$HSENV_NAME" ]; then+        PS1="($HSENV_NAME)$PS1"+    else+        PS1="[hsenv]$PS1"+    fi+fi  unset -v GHC_VERSION_OUTPUT unset -v GHC_VERSION_NUMBER
skeletons/cabal view
@@ -24,13 +24,19 @@  CABAL_BUILDDIR_ARG="" +if [ -z "<HSENV_NAME>" ]; then+    CABAL_BUILDIR="dist"+else+    CABAL_BUILDIR="dist_<HSENV_NAME>"+fi+ CABAL_BUILDABLE_COMMANDS="build clean configure copy haddock hscolour install register sdist test upgrade"  CABAL_COMMAND="$(echo ${@} | tr -s ' ' '\n' | grep -E '[a-z]' | grep -Ev '^-'  | head -n 1)"  for CABAL_BUILDABLE_COMMAND in ${CABAL_BUILDABLE_COMMANDS}; do     if [ "${CABAL_BUILDABLE_COMMAND}" = "${CABAL_COMMAND}" ]; then-        CABAL_BUILDDIR_ARG="--builddir=dist_<HSENV_NAME>"+        CABAL_BUILDDIR_ARG="--builddir=${CABAL_BUILDIR}"     fi done 
src/Actions.hs view
@@ -19,7 +19,7 @@ import Distribution.Package (PackageName(..)) import Safe (lastMay) import Data.List (intercalate)-import Data.Maybe+import Data.Maybe (fromMaybe, isJust)  import MyMonad import Types@@ -72,7 +72,7 @@                 , cabalWrapper                 ]   let cabalWrapperContents = substs [ ("<CABAL_CONFIG>", cabalConfig)-                                    , ("<HSENV_NAME>", hsEnvName')] cabalWrapperSkel+                                    , ("<HSENV_NAME>", fromMaybe "" hsEnvName')] cabalWrapperSkel   indentMessages $ do     trace "cabal wrapper contents:"     indentMessages $ mapM_ trace $ lines cabalWrapperContents@@ -109,18 +109,21 @@ installActivateScript = do   info "Installing activate script"   hsEnvName'   <- asks hsEnvName+  noModifyPS1  <- asks noPS1   dirStructure <- hseDirStructure   ghcPkgDbPath <- indentMessages ghcPkgDbPathLocation   let activateScript = hsEnvBinDir dirStructure </> "activate"   indentMessages $ debug $ "using location: " ++ activateScript-  let activateScriptContents = substs [ ("<HSENV_NAME>", hsEnvName')-                                      , ("<HSENV_DIR>", hsEnvDir dirStructure)-                                      , ("<HSENV>", hsEnv dirStructure)-                                      , ("<GHC_PACKAGE_PATH>", ghcPkgDbPath)-                                      , ("<HSENV_BIN_DIR>", hsEnvBinDir dirStructure)-                                      , ("<CABAL_BIN_DIR>", cabalBinDir dirStructure)-                                      , ("<GHC_BIN_DIR>", ghcBinDir dirStructure)-                                      ] activateSkel+  let activateScriptContents =+          substs [ ("<HSENV_NAME>", fromMaybe "" hsEnvName')+                 , ("<HSENV_DIR>", hsEnvDir dirStructure)+                 , ("<HSENV>", hsEnv dirStructure)+                 , ("<GHC_PACKAGE_PATH>", ghcPkgDbPath)+                 , ("<HSENV_BIN_DIR>", hsEnvBinDir dirStructure)+                 , ("<CABAL_BIN_DIR>", cabalBinDir dirStructure)+                 , ("<GHC_BIN_DIR>", ghcBinDir dirStructure)+                 , ("<MODIFY_PS1>", if noModifyPS1 then "false" else "true")+                 ] activateSkel   indentMessages $ do     trace "activate script contents:"     indentMessages $ mapM_ trace $ lines activateScriptContents
src/Args.hs view
@@ -4,8 +4,6 @@  import Control.Arrow import Util.Args-import System.Directory (getCurrentDirectory)-import System.FilePath (splitPath) import Types  #ifdef cabal@@ -19,7 +17,7 @@ versionString = "dev" #endif -verbosityOpt, veryVerbosityOpt, skipSanityOpt, sharingOpt :: Switch+verbosityOpt, veryVerbosityOpt, skipSanityOpt, sharingOpt, noPS1Opt :: Switch  verbosityOpt = Switch { switchName  = "verbose"                       , switchHelp  = "Print some debugging info"@@ -41,6 +39,13 @@                     , switchShort = Nothing                     } +noPS1Opt =+    Switch { switchName = "no-ps1-indicator"+           , switchHelp =+               "Don't modify the shell prompt to indicate the current hsenv"+           , switchShort = Nothing+           }+ nameOpt, ghcOpt :: DynOpt  nameOpt = DynOpt@@ -75,13 +80,9 @@                       (_, True)      -> VeryVerbose                       (True, False)  -> Verbose                       (False, False) -> Quiet-  nameFlag <- getOpt nameOpt -< ()-  name <- case nameFlag of-           Just name' -> returnA -< name'-           Nothing -> do-             cwd <- liftIO' getCurrentDirectory -< ()-             returnA -< last $ splitPath cwd+  name <- getOpt nameOpt -< ()   ghcFlag <- getOpt ghcOpt -< ()+  noPS1' <- getOpt noPS1Opt -< ()   let ghc = case ghcFlag of               Nothing   -> System               Just path -> Tarball path@@ -94,8 +95,8 @@                    , ghcSource       = ghc                    , makeCmd         = make                    , noSharing       = noSharingFlag+                   , noPS1           = noPS1'                    }-    where liftIO' = liftIO . const  getArgs :: IO Options getArgs = parseArgs argParser versionString outro
src/MyMonad.hs view
@@ -9,6 +9,7 @@                , finally                , throwError                , catchError+               , ask                , asks                , gets                , tell@@ -20,7 +21,7 @@  import Control.Exception as Exception (IOException, catch) import Control.Monad.Trans (MonadIO, liftIO)-import Control.Monad.Reader (ReaderT, MonadReader, runReaderT, asks)+import Control.Monad.Reader (ReaderT, MonadReader, runReaderT, asks, ask) import Control.Monad.Writer (WriterT, MonadWriter, runWriterT, tell) import Control.Monad.State (StateT, MonadState, evalStateT, modify, gets) import Control.Monad.Error (ErrorT, MonadError, runErrorT, throwError, catchError)
src/Paths.hs view
@@ -1,6 +1,7 @@ module Paths ( hseDirStructure              , cabalConfigLocation              , dotDirName+             , constructDotDirName              , insidePathVar              ) where @@ -32,11 +33,14 @@                       , ghcBinDir      = ghcDirLocation </> "bin"                       } +constructDotDirName :: Options -> String+constructDotDirName opts = maybe ".hsenv" (".hsenv_" ++) (hsEnvName opts)+ -- directory name of hsEnvDir dotDirName :: MyMonad String dotDirName = do-  name <- asks hsEnvName-  return $ ".hsenv_" ++ name+  opts <- ask+  return $ constructDotDirName opts  -- returns location of cabal's config file inside virtual environment dir structure cabalConfigLocation :: MyMonad FilePath
src/Types.hs view
@@ -19,10 +19,11 @@  data Options = Options { verbosity       :: Verbosity                        , skipSanityCheck :: Bool-                       , hsEnvName       :: String -- Virtual Haskell Environment name+                       , hsEnvName       :: Maybe String -- Virtual Haskell Environment name                        , ghcSource       :: GhcSource                        , makeCmd         :: String -- make substitute used for 'make install' of external GHC                        , noSharing       :: Bool   -- don't share ~/.cabal/packages+                       , noPS1           :: Bool   -- Don't modify shell prompt                        }  data MyState = MyState { logDepth :: Integer -- used for indentation of logging messages
src/hsenv.hs view
@@ -7,7 +7,7 @@ import Actions import SanityCheck (sanityCheck) import Args (getArgs)-import Paths (dotDirName)+import Paths (dotDirName, constructDotDirName)  main :: IO () main = do@@ -22,7 +22,7 @@                 writeFile "hsenv.log" errorLog                 exitFailure     Right ()  -> do-                let dotDir = ".hsenv_" ++ hsEnvName options+                let dotDir = constructDotDirName options                 writeFile (dotDir </> "hsenv.log") $ unlines messageLog  realMain :: MyMonad ()