diff options
Diffstat (limited to 'cmd/geth')
-rw-r--r-- | cmd/geth/js.go | 18 | ||||
-rw-r--r-- | cmd/geth/main.go | 15 | ||||
-rw-r--r-- | cmd/geth/usage.go | 1 |
3 files changed, 34 insertions, 0 deletions
diff --git a/cmd/geth/js.go b/cmd/geth/js.go index 68f19919a..68c906443 100644 --- a/cmd/geth/js.go +++ b/cmd/geth/js.go @@ -27,6 +27,7 @@ import ( "sort" "strings" + "github.com/codegangsta/cli" "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/registrar" @@ -331,6 +332,23 @@ func (self *jsre) UnlockAccount(addr []byte) bool { } } +// preloadJSFiles loads JS files that the user has specified with ctx.PreLoadJSFlag into +// the JSRE. If not all files could be loaded it will return an error describing the error. +func (self *jsre) preloadJSFiles(ctx *cli.Context) error { + if ctx.GlobalString(utils.PreLoadJSFlag.Name) != "" { + assetPath := ctx.GlobalString(utils.JSpathFlag.Name) + jsFiles := strings.Split(ctx.GlobalString(utils.PreLoadJSFlag.Name), ",") + for _, file := range jsFiles { + filename := common.AbsolutePath(assetPath, strings.TrimSpace(file)) + if err := self.re.Exec(filename); err != nil { + return fmt.Errorf("%s: %v", file, err) + } + } + } + return nil +} + +// exec executes the JS file with the given filename and stops the JSRE func (self *jsre) exec(filename string) error { if err := self.re.Exec(filename); err != nil { self.re.Stop(false) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 37cf3451a..584df7316 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -331,6 +331,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso utils.IPCApiFlag, utils.IPCPathFlag, utils.ExecFlag, + utils.PreLoadJSFlag, utils.WhisperEnabledFlag, utils.DevModeFlag, utils.TestNetFlag, @@ -427,6 +428,13 @@ func attach(ctx *cli.Context) { true, ) + // preload user defined JS files into the console + err = repl.preloadJSFiles(ctx) + if err != nil { + utils.Fatalf("unable to preload JS file %v", err) + } + + // in case the exec flag holds a JS statement execute it and return if ctx.GlobalString(utils.ExecFlag.Name) != "" { repl.batch(ctx.GlobalString(utils.ExecFlag.Name)) } else { @@ -477,6 +485,13 @@ func console(ctx *cli.Context) { ctx.GlobalString(utils.RPCCORSDomainFlag.Name), client, true) + // preload user defined JS files into the console + err = repl.preloadJSFiles(ctx) + if err != nil { + utils.Fatalf("unable to preload JS file %v", err) + } + + // in case the exec flag holds a JS statement execute it and return if script := ctx.GlobalString(utils.ExecFlag.Name); script != "" { repl.batch(script) } else { diff --git a/cmd/geth/usage.go b/cmd/geth/usage.go index b7ee50b79..278a55980 100644 --- a/cmd/geth/usage.go +++ b/cmd/geth/usage.go @@ -101,6 +101,7 @@ var AppHelpFlagGroups = []flagGroup{ utils.RPCCORSDomainFlag, utils.JSpathFlag, utils.ExecFlag, + utils.PreLoadJSFlag, }, }, { |