]> Cypherpunks repositories - gostls13.git/commitdiff
misc/dashboard/builder: -cmd for user-specified build command
authorAndrew Gerrand <adg@golang.org>
Wed, 22 Sep 2010 05:18:41 +0000 (15:18 +1000)
committerAndrew Gerrand <adg@golang.org>
Wed, 22 Sep 2010 05:18:41 +0000 (15:18 +1000)
R=rsc
CC=golang-dev
https://golang.org/cl/2248043

misc/dashboard/builder/exec.go
misc/dashboard/builder/main.go

index bdc740c103f08f6393afc7adaf52bd53e8458e3a..009c7694eacb59a89467f71438938ede7d3f9eb4 100644 (file)
@@ -4,11 +4,12 @@ import (
        "bytes"
        "exec"
        "os"
+       "strings"
 )
 
 // run is a simple wrapper for exec.Run/Close
 func run(envv []string, dir string, argv ...string) os.Error {
-       bin, err := exec.LookPath(argv[0])
+       bin, err := pathLookup(argv[0])
        if err != nil {
                return err
        }
@@ -22,7 +23,7 @@ func run(envv []string, dir string, argv ...string) os.Error {
 
 // runLog runs a process and returns the combined stdout/stderr
 func runLog(envv []string, dir string, argv ...string) (output string, exitStatus int, err os.Error) {
-       bin, err := exec.LookPath(argv[0])
+       bin, err := pathLookup(argv[0])
        if err != nil {
                return
        }
@@ -43,3 +44,11 @@ func runLog(envv []string, dir string, argv ...string) (output string, exitStatu
        }
        return b.String(), w.WaitStatus.ExitStatus(), nil
 }
+
+// Find bin in PATH if a relative or absolute path hasn't been specified
+func pathLookup(s string) (string, os.Error) {
+       if strings.HasPrefix(s, "/") || strings.HasPrefix(s, "./")  || strings.HasPrefix(s, "../") {
+               return s, nil
+       } 
+       return exec.LookPath(s)
+}
index 0302638bd38406ea88de84b4b8f419bd6000c9f3..ce0caf80f5ee70fdd543328b31c6646cb1e203cd 100644 (file)
@@ -41,6 +41,7 @@ var (
        runBenchmarks = flag.Bool("bench", false, "Run benchmarks")
        buildRelease  = flag.Bool("release", false, "Build and upload binary release archives")
        buildRevision = flag.String("rev", "", "Build specified revision and exit")
+       buildCmd      = flag.String("cmd", "./all.bash", "Build command (specify absolute or relative to go/src/)")
 )
 
 var (
@@ -265,17 +266,8 @@ func (b *Builder) buildCommit(c Commit) (err os.Error) {
        }
        srcDir := path.Join(workpath, "go", "src")
 
-       // check for all-${GOARCH,GOOS}.bash and use it if found
-       allbash := "all.bash"
-       if a := "all-"+b.goarch+".bash"; isFile(path.Join(srcDir, a)) {
-               allbash = a
-       }
-       if a := "all-"+b.goos+".bash"; isFile(path.Join(srcDir, a)) {
-               allbash = a
-       }
-
        // build
-       buildLog, status, err := runLog(env, srcDir, "bash", allbash)
+       buildLog, status, err := runLog(env, srcDir, *buildCmd)
        if err != nil {
                return errf("all.bash: %s", err)
        }
@@ -307,7 +299,7 @@ func (b *Builder) buildCommit(c Commit) (err os.Error) {
        // if this is a release, create tgz and upload to google code
        if release := releaseRegexp.FindString(c.desc); release != "" {
                // clean out build state
-               err = run(env, srcDir, "sh", "clean.bash", "--nopkg")
+               err = run(env, srcDir, "./clean.bash", "--nopkg")
                if err != nil {
                        return errf("clean.bash: %s", err)
                }