From ddc2710d69adceb1f457792f17c4837a3d52a10a Mon Sep 17 00:00:00 2001 From: Kyle Lemons Date: Wed, 5 Jan 2011 14:34:59 -0500 Subject: [PATCH] goinstall: add -clean flag R=adg, rsc CC=golang-dev https://golang.org/cl/3821042 --- src/cmd/goinstall/main.go | 1 + src/cmd/goinstall/make.go | 21 +++++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/cmd/goinstall/main.go b/src/cmd/goinstall/main.go index 9301f27b5a5..1736ffc0307 100644 --- a/src/cmd/goinstall/main.go +++ b/src/cmd/goinstall/main.go @@ -41,6 +41,7 @@ var ( reportToDashboard = flag.Bool("dashboard", true, "report public packages at "+dashboardURL) logPkgs = flag.Bool("log", true, "log installed packages to $GOROOT/goinstall.log for use by -a") update = flag.Bool("u", false, "update already-downloaded packages") + clean = flag.Bool("clean", false, "clean the package directory before installing") verbose = flag.Bool("v", false, "verbose") ) diff --git a/src/cmd/goinstall/make.go b/src/cmd/goinstall/make.go index 4e001b49bd5..58ba5be0a6c 100644 --- a/src/cmd/goinstall/make.go +++ b/src/cmd/goinstall/make.go @@ -17,18 +17,27 @@ import ( // For non-local packages or packages without Makefiles, // domake generates a standard Makefile and passes it // to make on standard input. -func domake(dir, pkg string, local bool) os.Error { +func domake(dir, pkg string, local bool) (err os.Error) { + needMakefile := true if local { _, err := os.Stat(dir + "/Makefile") if err == nil { - return run(dir, nil, "gomake", "install") + needMakefile = false } } - makefile, err := makeMakefile(dir, pkg) - if err != nil { - return err + cmd := []string{"gomake"} + var makefile []byte + if needMakefile { + if makefile, err = makeMakefile(dir, pkg); err != nil { + return err + } + cmd = append(cmd, "-f-") } - return run(dir, makefile, "gomake", "-f-", "install") + if *clean { + cmd = append(cmd, "clean") + } + cmd = append(cmd, "install") + return run(dir, makefile, cmd...) } // makeMakefile computes the standard Makefile for the directory dir