From c1ecb379cb64160b506eed5251feb3fe280f8298 Mon Sep 17 00:00:00 2001 From: Shiv Jha-Mathur Date: Mon, 8 Nov 2021 02:43:49 +0530 Subject: [PATCH] feat: allow `getSingleTag` to return later occurrences --- main.go | 12 +++++++++--- main_test.go | 23 +++++++++++++++-------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/main.go b/main.go index 9faf75e..acee48e 100644 --- a/main.go +++ b/main.go @@ -48,7 +48,7 @@ func main() { if query == "" { fmt.Println(string(val)) } else { - tag, err := getSingleTag(images, query) + tag, err := getSingleTag(images, query, 0) if err != nil { log.Fatalf("Could not find image in Dockerfile: %s", query) @@ -107,10 +107,16 @@ func getImages(commands []dockerfile.Command, unknownMarker string) []Image { return images } -func getSingleTag(images []Image, query string) (string, error) { +func getSingleTag(images []Image, query string, occurrence int) (string, error) { + found := 0 + for _, i := range images { if i.Name == query { - return i.Tag, nil + found += 1 + + if found >= occurrence { + return i.Tag, nil + } } } diff --git a/main_test.go b/main_test.go index eb501ab..b31ea9b 100644 --- a/main_test.go +++ b/main_test.go @@ -30,14 +30,21 @@ func TestParsing(t *testing.T) { func TestQuery(t *testing.T) { cases := []struct { - query string - match bool - tag string + query string + occurrence int + match bool + tag string }{ - {query: "foo", match: false, tag: ""}, - {query: "viaductoss/ksops", match: true, tag: "v3.0.0"}, - {query: "golang", match: true, tag: "1.17.0-alpine"}, - {query: "common", match: true, tag: "?"}, + {query: "foo", occurrence: 0, match: false, tag: ""}, + {query: "viaductoss/ksops", occurrence: 0, match: true, tag: "v3.0.0"}, + {query: "golang", occurrence: 0, match: true, tag: "1.17.0-alpine"}, + {query: "common", occurrence: 0, match: true, tag: "?"}, + {query: "foo", occurrence: 1, match: false, tag: ""}, + {query: "viaductoss/ksops", occurrence: 1, match: true, tag: "v3.0.0"}, + {query: "golang", occurrence: 1, match: true, tag: "1.17.0-alpine"}, + {query: "common", occurrence: 1, match: true, tag: "?"}, + {query: "viaductoss/ksops", occurrence: 2, match: false, tag: ""}, + {query: "common", occurrence: 3, match: true, tag: "?"}, } commands, err := dockerfile.ParseFile("tests/Dockerfile.1") @@ -49,7 +56,7 @@ func TestQuery(t *testing.T) { tags := getImages(commands, "?") for _, c := range cases { - result, err := getSingleTag(tags, c.query) + result, err := getSingleTag(tags, c.query, c.occurrence) if c.match { assert.NoError(t, err, "must match %v", c.query)