Browse Source

Merge pull request #1821 from infosiftr/pull-always

Add support for "--pull always", "--pull missing", and "--pull never" (replacing "--pull-missing")
yosifkit 9 years ago
parent
commit
120f5d8c5a

+ 19 - 4
bashbrew/go/src/bashbrew/cmd-build.go

@@ -19,7 +19,13 @@ func cmdBuild(c *cli.Context) error {
 
 	uniq := c.Bool("uniq")
 	namespace := c.String("namespace")
-	pullMissing := c.Bool("pull-missing")
+	pull := c.String("pull")
+	switch pull {
+	case "always", "missing", "never":
+		// legit
+	default:
+		return fmt.Errorf(`invalid value for --pull: %q`, pull)
+	}
 
 	for _, repo := range repos {
 		r, err := fetch(repo)
@@ -42,9 +48,18 @@ func cmdBuild(c *cli.Context) error {
 				return cli.NewMultiError(fmt.Errorf(`failed fetching/scraping FROM for %q (tags %q)`, r.RepoName, entry.TagsString()), err)
 			}
 
-			if pullMissing && from != "scratch" {
-				_, err := dockerInspect("{{.Id}}", from)
-				if err != nil {
+			if from != "scratch" && pull != "never" {
+				doPull := false
+				switch pull {
+				case "always":
+					doPull = true
+				case "missing":
+					_, err := dockerInspect("{{.Id}}", from)
+					doPull = (err != nil)
+				default:
+					return fmt.Errorf(`unexpected value for --pull: %s`, pull)
+				}
+				if doPull {
 					fmt.Printf("Pulling %s (%s)\n", from, r.Identifier())
 					dockerPull(from)
 				}

+ 8 - 0
bashbrew/go/src/bashbrew/config.go

@@ -23,6 +23,7 @@ type FlagsConfigEntry struct {
 	Unique     string
 	Namespace  string
 	BuildOrder string
+	Pull       string
 
 	Constraints          []string `delim:"," strip:"\n\r\t "`
 	ExclusiveConstraints string
@@ -47,6 +48,12 @@ func (dst *FlagsConfigEntry) Apply(src FlagsConfigEntry) {
 	if src.Namespace != "" {
 		dst.Namespace = src.Namespace
 	}
+	if src.BuildOrder != "" {
+		dst.BuildOrder = src.BuildOrder
+	}
+	if src.Pull != "" {
+		dst.Pull = src.Pull
+	}
 	if len(src.Constraints) > 0 {
 		dst.Constraints = src.Constraints[:]
 	}
@@ -73,6 +80,7 @@ func (config FlagsConfigEntry) Vars() map[string]map[string]interface{} {
 			"uniq":        config.Unique,
 			"namespace":   config.Namespace,
 			"build-order": config.BuildOrder,
+			"pull":        config.Pull,
 
 			"apply-constraints": config.ApplyConstraints,
 		},

+ 4 - 4
bashbrew/go/src/bashbrew/main.go

@@ -270,10 +270,10 @@ func main() {
 				commonFlags["all"],
 				commonFlags["uniq"],
 				commonFlags["namespace"],
-				cli.BoolFlag{
-					// TODO consider switching this to be a StringFlag with values of "always", "missing", "never" (default never)
-					Name:  "pull-missing",
-					Usage: "pull missing FROM tags while building",
+				cli.StringFlag{
+					Name:  "pull",
+					Value: "missing",
+					Usage: `pull FROM before building (always, missing, never)`,
 				},
 			},
 			Before: subcommandBeforeFactory("build"),