Browse Source

Use cli's "MultiError" construct to provide useful context for top-level cmd-*.go errors

Tianon Gravi 9 years ago
parent
commit
7e46e0cea7

+ 10 - 10
bashbrew/go/src/bashbrew/cmd-build.go

@@ -9,12 +9,12 @@ import (
 func cmdBuild(c *cli.Context) error {
 	repos, err := repos(c.Bool("all"), c.Args()...)
 	if err != nil {
-		return err
+		return cli.NewMultiError(fmt.Errorf(`failed gathering repo list`), err)
 	}
 
 	repos, err = sortRepos(repos)
 	if err != nil {
-		return err
+		return cli.NewMultiError(fmt.Errorf(`failed sorting repo list`, err))
 	}
 
 	uniq := c.Bool("uniq")
@@ -24,12 +24,12 @@ func cmdBuild(c *cli.Context) error {
 	for _, repo := range repos {
 		r, err := fetch(repo)
 		if err != nil {
-			return err
+			return cli.NewMultiError(fmt.Errorf(`failed fetching repo %q`, repo), err)
 		}
 
 		entries, err := r.SortedEntries()
 		if err != nil {
-			return err
+			return cli.NewMultiError(fmt.Errorf(`failed sorting entries list for %q`, repo), err)
 		}
 
 		for _, entry := range entries {
@@ -39,7 +39,7 @@ func cmdBuild(c *cli.Context) error {
 
 			from, err := r.DockerFrom(&entry)
 			if err != nil {
-				return err
+				return cli.NewMultiError(fmt.Errorf(`failed fetching/scraping FROM for %q (tags %q)`, r.RepoName, entry.TagsString()), err)
 			}
 
 			if pullMissing {
@@ -52,7 +52,7 @@ func cmdBuild(c *cli.Context) error {
 
 			cacheHash, err := r.dockerCacheHash(&entry)
 			if err != nil {
-				return err
+				return cli.NewMultiError(fmt.Errorf(`failed calculating "cache hash" for %q (tags %q)`, r.RepoName, entry.TagsString()), err)
 			}
 
 			cacheTag := "bashbrew/cache:" + cacheHash
@@ -64,18 +64,18 @@ func cmdBuild(c *cli.Context) error {
 
 				commit, err := r.fetchGitRepo(&entry)
 				if err != nil {
-					return err
+					return cli.NewMultiError(fmt.Errorf(`failed fetching git repo for %q (tags %q)`, r.RepoName, entry.TagsString()), err)
 				}
 
 				archive, err := gitArchive(commit, entry.Directory)
 				if err != nil {
-					return err
+					return cli.NewMultiError(fmt.Errorf(`failed generating git archive for %q (tags %q)`, r.RepoName, entry.TagsString()), err)
 				}
 				defer archive.Close()
 
 				err = dockerBuild(cacheTag, archive)
 				if err != nil {
-					return err
+					return cli.NewMultiError(fmt.Errorf(`failed building %q (tags %q)`, r.RepoName, entry.TagsString()), err)
 				}
 			}
 
@@ -84,7 +84,7 @@ func cmdBuild(c *cli.Context) error {
 
 				err := dockerTag(cacheTag, tag)
 				if err != nil {
-					return err
+					return cli.NewMultiError(fmt.Errorf(`failed tagging %q as %q`, cacheTag, tag), err)
 				}
 			}
 		}

+ 7 - 6
bashbrew/go/src/bashbrew/cmd-deps.go

@@ -18,7 +18,7 @@ func cmdParents(c *cli.Context) error {
 func cmdFamily(parents bool, c *cli.Context) error {
 	depsRepos, err := repos(c.Bool("all"), c.Args()...)
 	if err != nil {
-		return err
+		return cli.NewMultiError(fmt.Errorf(`failed gathering repo list`), err)
 	}
 
 	uniq := c.Bool("uniq")
@@ -26,7 +26,7 @@ func cmdFamily(parents bool, c *cli.Context) error {
 
 	allRepos, err := repos(true)
 	if err != nil {
-		return err
+		return cli.NewMultiError(fmt.Errorf(`failed gathering ALL repos list`), err)
 	}
 
 	// create network (all repos)
@@ -36,8 +36,9 @@ func cmdFamily(parents bool, c *cli.Context) error {
 	for _, repo := range allRepos {
 		r, err := fetch(repo)
 		if err != nil {
-			return err
+			return cli.NewMultiError(fmt.Errorf(`failed fetching repo %q`, repo), err)
 		}
+
 		for _, entry := range r.Entries() {
 			for _, tag := range r.Tags("", false, entry) {
 				network.AddNode(tag, entry)
@@ -49,12 +50,12 @@ func cmdFamily(parents bool, c *cli.Context) error {
 	for _, repo := range allRepos {
 		r, err := fetch(repo)
 		if err != nil {
-			return err
+			return cli.NewMultiError(fmt.Errorf(`failed fetching repo %q`, repo), err)
 		}
 		for _, entry := range r.Entries() {
 			from, err := r.DockerFrom(&entry)
 			if err != nil {
-				return err
+				return cli.NewMultiError(fmt.Errorf(`failed fetching/scraping FROM for %q (tags %q)`, r.RepoName, entry.TagsString()), err)
 			}
 			for _, tag := range r.Tags("", false, entry) {
 				network.AddEdge(from, tag)
@@ -67,7 +68,7 @@ func cmdFamily(parents bool, c *cli.Context) error {
 	for _, repo := range depsRepos {
 		r, err := fetch(repo)
 		if err != nil {
-			return err
+			return cli.NewMultiError(fmt.Errorf(`failed fetching repo %q`, repo), err)
 		}
 
 		for _, entry := range r.Entries() {

+ 3 - 3
bashbrew/go/src/bashbrew/cmd-from.go

@@ -9,7 +9,7 @@ import (
 func cmdFrom(c *cli.Context) error {
 	repos, err := repos(c.Bool("all"), c.Args()...)
 	if err != nil {
-		return err
+		return cli.NewMultiError(fmt.Errorf(`failed gathering repo list`), err)
 	}
 
 	uniq := c.Bool("uniq")
@@ -18,13 +18,13 @@ func cmdFrom(c *cli.Context) error {
 	for _, repo := range repos {
 		r, err := fetch(repo)
 		if err != nil {
-			return err
+			return cli.NewMultiError(fmt.Errorf(`failed fetching repo %q`, repo), err)
 		}
 
 		for _, entry := range r.Entries() {
 			from, err := r.DockerFrom(&entry)
 			if err != nil {
-				return err
+				return cli.NewMultiError(fmt.Errorf(`failed fetching/scraping FROM for %q (tags %q)`, r.RepoName, entry.TagsString()), err)
 			}
 
 			for _, tag := range r.Tags(namespace, uniq, entry) {

+ 4 - 4
bashbrew/go/src/bashbrew/cmd-list.go

@@ -11,14 +11,14 @@ import (
 func cmdList(c *cli.Context) error {
 	repos, err := repos(c.Bool("all"), c.Args()...)
 	if err != nil {
-		return err
+		return cli.NewMultiError(fmt.Errorf(`failed gathering repo list`), err)
 	}
 
 	buildOrder := c.Bool("build-order")
 	if buildOrder {
 		repos, err = sortRepos(repos)
 		if err != nil {
-			return err
+			return cli.NewMultiError(fmt.Errorf(`failed sorting repo list`), err)
 		}
 	}
 
@@ -29,14 +29,14 @@ func cmdList(c *cli.Context) error {
 	for _, repo := range repos {
 		r, err := fetch(repo)
 		if err != nil {
-			return err
+			return cli.NewMultiError(fmt.Errorf(`failed fetching repo %q`, repo), err)
 		}
 
 		var entries []manifest.Manifest2822Entry
 		if buildOrder {
 			entries, err = r.SortedEntries()
 			if err != nil {
-				return err
+				return cli.NewMultiError(fmt.Errorf(`failed sorting entries list for %q`, repo), err)
 			}
 		} else {
 			entries = r.Entries()

+ 3 - 3
bashbrew/go/src/bashbrew/cmd-push.go

@@ -9,7 +9,7 @@ import (
 func cmdPush(c *cli.Context) error {
 	repos, err := repos(c.Bool("all"), c.Args()...)
 	if err != nil {
-		return err
+		return cli.NewMultiError(fmt.Errorf(`failed gathering repo list`), err)
 	}
 
 	uniq := c.Bool("uniq")
@@ -22,7 +22,7 @@ func cmdPush(c *cli.Context) error {
 	for _, repo := range repos {
 		r, err := fetch(repo)
 		if err != nil {
-			return err
+			return cli.NewMultiError(fmt.Errorf(`failed fetching repo %q`, repo), err)
 		}
 
 		for _, entry := range r.Entries() {
@@ -30,7 +30,7 @@ func cmdPush(c *cli.Context) error {
 				fmt.Printf("Pushing %s\n", tag)
 				err = dockerPush(tag)
 				if err != nil {
-					return err
+					return cli.NewMultiError(fmt.Errorf(`failed pushing %q`, tag), err)
 				}
 			}
 		}

+ 3 - 3
bashbrew/go/src/bashbrew/cmd-tag.go

@@ -10,7 +10,7 @@ import (
 func cmdTag(c *cli.Context) error {
 	repos, err := repos(c.Bool("all"), c.Args()...)
 	if err != nil {
-		return err
+		return cli.NewMultiError(fmt.Errorf(`failed gathering repo list`), err)
 	}
 
 	uniq := c.Bool("uniq")
@@ -23,7 +23,7 @@ func cmdTag(c *cli.Context) error {
 	for _, repo := range repos {
 		r, err := fetch(repo)
 		if err != nil {
-			return err
+			return cli.NewMultiError(fmt.Errorf(`failed fetching repo %q`, repo), err)
 		}
 
 		for _, entry := range r.Entries() {
@@ -32,7 +32,7 @@ func cmdTag(c *cli.Context) error {
 				fmt.Printf("Tagging %s\n", namespacedTag)
 				err = dockerTag(tag, namespacedTag)
 				if err != nil {
-					return err
+					return cli.NewMultiError(fmt.Errorf(`failed tagging %q as %q`, tag, namespacedTag), err)
 				}
 			}
 		}