diff options
| author | Ondřej Surý <ondrej@sury.org> | 2011-06-03 11:31:24 +0200 | 
|---|---|---|
| committer | Ondřej Surý <ondrej@sury.org> | 2011-06-03 11:31:24 +0200 | 
| commit | 56135c623a865c501ab31cc940c0e22ece2673f4 (patch) | |
| tree | f69e04e82bbf75bdab0f624430ef265425e62b35 /misc/dashboard/builder/exec.go | |
| parent | 63d29fefab5290dc96e0a03ff70603aefa995887 (diff) | |
| download | golang-56135c623a865c501ab31cc940c0e22ece2673f4.tar.gz | |
Imported Upstream version 2011.06.02upstream-weekly/2011.06.02
Diffstat (limited to 'misc/dashboard/builder/exec.go')
| -rw-r--r-- | misc/dashboard/builder/exec.go | 59 | 
1 files changed, 28 insertions, 31 deletions
| diff --git a/misc/dashboard/builder/exec.go b/misc/dashboard/builder/exec.go index 988d216ce..0db509136 100644 --- a/misc/dashboard/builder/exec.go +++ b/misc/dashboard/builder/exec.go @@ -18,16 +18,12 @@ func run(envv []string, dir string, argv ...string) os.Error {  	if *verbose {  		log.Println("run", argv)  	} -	bin, err := lookPath(argv[0]) -	if err != nil { -		return err -	} -	p, err := exec.Run(bin, argv, envv, dir, -		exec.DevNull, exec.DevNull, exec.PassThrough) -	if err != nil { -		return err -	} -	return p.Close() +	argv = useBash(argv) +	cmd := exec.Command(argv[0], argv[1:]...) +	cmd.Dir = dir +	cmd.Env = envv +	cmd.Stderr = os.Stderr +	return cmd.Run()  }  // runLog runs a process and returns the combined stdout/stderr,  @@ -36,16 +32,8 @@ func runLog(envv []string, logfile, dir string, argv ...string) (output string,  	if *verbose {  		log.Println("runLog", argv)  	} -	bin, err := lookPath(argv[0]) -	if err != nil { -		return -	} -	p, err := exec.Run(bin, argv, envv, dir, -		exec.DevNull, exec.Pipe, exec.MergeWithStdout) -	if err != nil { -		return -	} -	defer p.Close() +	argv = useBash(argv) +  	b := new(bytes.Buffer)  	var w io.Writer = b  	if logfile != "" { @@ -56,21 +44,30 @@ func runLog(envv []string, logfile, dir string, argv ...string) (output string,  		defer f.Close()  		w = io.MultiWriter(f, b)  	} -	_, err = io.Copy(w, p.Stdout) -	if err != nil { -		return -	} -	wait, err := p.Wait(0) + +	cmd := exec.Command(argv[0], argv[1:]...) +	cmd.Dir = dir +	cmd.Env = envv +	cmd.Stdout = w +	cmd.Stderr = w + +	err = cmd.Run() +	output = b.String()  	if err != nil { +		if ws, ok := err.(*os.Waitmsg); ok { +			exitStatus = ws.ExitStatus() +		}  		return  	} -	return b.String(), wait.WaitStatus.ExitStatus(), nil +	return  } -// lookPath looks for cmd in $PATH if cmd does not begin with / or ./ or ../. -func lookPath(cmd string) (string, os.Error) { -	if strings.HasPrefix(cmd, "/") || strings.HasPrefix(cmd, "./") || strings.HasPrefix(cmd, "../") { -		return cmd, nil +// useBash prefixes a list of args with 'bash' if the first argument +// is a bash script. +func useBash(argv []string) []string { +	// TODO(brainman): choose a more reliable heuristic here. +	if strings.HasSuffix(argv[0], ".bash") { +		argv = append([]string{"bash"}, argv...)  	} -	return exec.LookPath(cmd) +	return argv  } | 
