@@ -28,7 +28,7 @@ async = require "async"
2828fs = require " fs"
2929nack = require " nack"
3030
31- {bufferLines , pause , sourceScriptEnv } = require " ./util"
31+ {bufferLines , pause , sourceScriptEnv , quote } = require " ./util"
3232{join , basename , resolve } = require " path"
3333
3434module .exports = class RackApplication
@@ -89,14 +89,25 @@ module.exports = class RackApplication
8989 @statCallbacks .push callback
9090
9191 # Collect environment variables from `.powrc` and `.powenv`, in that
92- # order, if present. The idea is that `.powrc` files can be checked
93- # into a source code repository for global configuration, leaving
94- # `.powenv` free for any necessary local overrides.
92+ # order, if present from both $HOME and the project root. The idea is
93+ # that `.powrc` files can be checked into a source code repository for
94+ # global configuration, leaving `.powenv` free for any necessary local
95+ # overrides. The files will be executed from the project root.
9596 loadScriptEnvironment : (env , callback ) ->
96- async .reduce [" .powrc" , " .envrc" , " .powenv" ], env, (env , filename , callback ) =>
97- fs .exists script = join (@root , filename), (scriptExists ) ->
97+ home = process .env [' HOME' ]
98+ envFiles = [
99+ join (home, " .powrc" ),
100+ join (home, " .powenv" ),
101+ join (@root , " .powrc" ),
102+ join (@root , " .envrc" ),
103+ join (@root , " .powenv" ),
104+ ]
105+ before = " cd #{ quote @root } "
106+ async .reduce envFiles, env, (env , script , callback ) =>
107+ process .stdout .write (" [Pow!] loadScriptEnvironment: loading #{ script} (for app: #{ @root } )" )
108+ fs .exists script, (scriptExists ) ->
98109 if scriptExists
99- sourceScriptEnv script, env, callback
110+ sourceScriptEnv script, env, {before}, callback
100111 else
101112 callback null , env
102113 , callback
0 commit comments