Browse Source

Merge pull request #4764 from infosiftr/archFilter

Add new "archFilter" template function
yosifkit 7 years ago
parent
commit
7457c794a8
1 changed files with 28 additions and 0 deletions
  1. 28 0
      bashbrew/go/src/bashbrew/cmd-cat.go

+ 28 - 0
bashbrew/go/src/bashbrew/cmd-cat.go

@@ -8,6 +8,7 @@ import (
 	"text/template"
 
 	"github.com/codegangsta/cli"
+	"github.com/docker-library/go-dockerlibrary/manifest"
 	"github.com/docker-library/go-dockerlibrary/pkg/templatelib"
 )
 
@@ -48,6 +49,33 @@ func cmdCat(c *cli.Context) error {
 		"archNamespace": func(arch string) string {
 			return archNamespaces[arch]
 		},
+		"archFilter": func(arch string, entriesArg ...interface{}) []manifest.Manifest2822Entry {
+			if len(entriesArg) < 1 {
+				panic(`"archFilter" requires at least one argument`)
+			}
+			entries := []manifest.Manifest2822Entry{}
+			for _, entryArg := range entriesArg {
+				switch v := entryArg.(type) {
+				case []*manifest.Manifest2822Entry:
+					for _, e := range v {
+						entries = append(entries, *e)
+					}
+				case []manifest.Manifest2822Entry:
+					entries = append(entries, v...)
+				case manifest.Manifest2822Entry:
+					entries = append(entries, v)
+				default:
+					panic(fmt.Sprintf(`"archFilter" encountered unknown type: %T`, v, v))
+				}
+			}
+			filtered := []manifest.Manifest2822Entry{}
+			for _, entry := range entries {
+				if entry.HasArchitecture(arch) {
+					filtered = append(filtered, entry)
+				}
+			}
+			return filtered
+		},
 	}).Parse(format)
 	if err != nil {
 		return cli.NewMultiError(tmplMultiErr, err)