cmd/gomote: add push --dry-run flag, ignore some auto-generated files

Change-Id: I332443eec89a15a29c1f3a0f7856a1f3c34ae0ee
Reviewed-on: https://go-review.googlesource.com/41677
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/cmd/gomote/push.go b/cmd/gomote/push.go
index 3ff8e6b..9eb3c92 100644
--- a/cmd/gomote/push.go
+++ b/cmd/gomote/push.go
@@ -25,6 +25,8 @@
 
 func push(args []string) error {
 	fs := flag.NewFlagSet("push", flag.ContinueOnError)
+	var dryRun bool
+	fs.BoolVar(&dryRun, "dry-run", false, "print what would be done only")
 	fs.Usage = func() {
 		fmt.Fprintln(os.Stderr, "create usage: gomote push <instance>")
 		fs.PrintDefaults()
@@ -87,8 +89,12 @@
 	if !haveGo14 {
 		if u := conf.GoBootstrapURL(buildEnv); u != "" {
 			log.Printf("installing go1.4")
-			if err := bc.PutTarFromURL(u, "go1.4"); err != nil {
-				return err
+			if dryRun {
+				log.Printf("(Dry-run) Would have pushed go1.4")
+			} else {
+				if err := bc.PutTarFromURL(u, "go1.4"); err != nil {
+					return err
+				}
 			}
 		}
 	}
@@ -153,14 +159,23 @@
 			withGo[i] = "go/" + v
 		}
 		sort.Strings(withGo)
-		log.Printf("Deleting remote files: %q", withGo)
-		if err := bc.RemoveAll(withGo...); err != nil {
-			return fmt.Errorf("Deleting remote unwanted files: %v", err)
+		if dryRun {
+			log.Printf("(Dry-run) Would have deleted remote files: %q", withGo)
+		} else {
+			log.Printf("Deleting remote files: %q", withGo)
+			if err := bc.RemoveAll(withGo...); err != nil {
+				return fmt.Errorf("Deleting remote unwanted files: %v", err)
+			}
 		}
 	}
 
 	var toSend []string
 	for rel, inf := range local {
+		switch rel {
+		case "VERSION.cache", "src/runtime/internal/sys/zversion.go", "src/cmd/internal/objabi/zbootstrap.go",
+			"src/go/build/zcgo.go":
+			continue
+		}
 		if !inf.fi.Mode().IsRegular() {
 			// TODO(bradfitz): this is only doing regular files
 			// for now, so empty directories, symlinks, etc aren't
@@ -192,6 +207,10 @@
 			return err
 		}
 		log.Printf("Uploading %d new/changed files; %d byte .tar.gz", len(toSend), tgz.Len())
+		if dryRun {
+			log.Printf("(Dry-run mode; not doing anything.")
+			return nil
+		}
 		if err := bc.PutTar(tgz, "go"); err != nil {
 			return fmt.Errorf("writing tarball to buildlet: %v", err)
 		}