Remove debug output and add comments
Problem: The previous code was printing debug output so that I could ensure that my argument checking worked correctly, but we don't want to distribute a binary that echoes back your arguments to you. Solution: Remove the debug output and add lots of comments to document all of my misunderstandings of how the current code works. :~)
This commit is contained in:
parent
9b53ee94dc
commit
fb2e042a12
|
@ -7,27 +7,51 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// The relative path to the `node` binary depends on the platform, so we
|
||||||
|
// pass this via an `-ldflags` hack I don't completely understand. In my
|
||||||
|
// head this is similar to how GCC lets you use `-D` to define a macro to
|
||||||
|
// be inserted by the preprocessor.
|
||||||
var node string
|
var node string
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
// The problem with relative paths is that they only work when
|
||||||
|
// you run `./oasis-platform-x64`, but not when you run a command
|
||||||
|
// like `./path/to/oasis-platform-x64`. To resolve this problem
|
||||||
|
// we need to put together an absolute path, which we can build
|
||||||
|
// with the first argument (the relative path of this executable)
|
||||||
|
// and the relative path of either the `node` binary or the
|
||||||
|
// source code directory so that we can run `node src`.
|
||||||
node := filepath.Join(filepath.Dir(os.Args[0]), node)
|
node := filepath.Join(filepath.Dir(os.Args[0]), node)
|
||||||
src := filepath.Join(filepath.Dir(os.Args[0]), "src")
|
src := filepath.Join(filepath.Dir(os.Args[0]), "src")
|
||||||
|
|
||||||
|
// We know that the command will be the absolute path to `node`
|
||||||
|
// and the first argument will be the absolute path to the `src`
|
||||||
|
// directory, but we need to get collect the rest of the arguments
|
||||||
|
// programatically by pulling them out of the `os.Args` slice and
|
||||||
|
// putting them in a new slice called `args`.
|
||||||
args := []string{src}
|
args := []string{src}
|
||||||
|
|
||||||
for i := 1; i < len(os.Args); i++ {
|
for i := 1; i < len(os.Args); i++ {
|
||||||
args = append(args, os.Args[i])
|
args = append(args, os.Args[i])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This seems to execute the script and pass-through all of the
|
||||||
|
// arguments we want, *plus* it hooks up stdout and stderr, but
|
||||||
|
// the exit code of Oasis doesn't seem to be passed through. This
|
||||||
|
// is easy to test with a command like:
|
||||||
|
//
|
||||||
|
// ./oasis-platform-x64 --port -1
|
||||||
|
//
|
||||||
|
// This should give an exit code of 1, but it seems to exit 0. :/
|
||||||
cmd := exec.Command(node, args...)
|
cmd := exec.Command(node, args...)
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
err := cmd.Run()
|
|
||||||
|
|
||||||
|
// This catches problems like "no such file or directory" if the
|
||||||
|
// `node` variable points to a path where there isn't a binary.
|
||||||
|
//
|
||||||
|
// TODO: I think we're supposed to handle the exit code here.
|
||||||
|
err := cmd.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fmt.Println(args)
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue