From f4cdc632fc36a9a764f79062f5e655b7b11506ac Mon Sep 17 00:00:00 2001 From: Gernot Feichter Date: Wed, 20 Mar 2024 11:02:31 +0100 Subject: [PATCH] fix: same vcs info appened twice when running jf rt build-add-git command twice It turns out to be practical if you can perform issue collection multiple times using different configurations (different regexes). However, in this case (and in any case) you do not want to see the vcs information duplicated. This is fixed hereby. --- build/build.go | 7 ++++++- build/build_test.go | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/build/build.go b/build/build.go index 10b3aaef..23b21e2d 100644 --- a/build/build.go +++ b/build/build.go @@ -8,6 +8,7 @@ import ( ioutils "github.com/jfrog/gofrog/io" "os" "path/filepath" + "slices" "sort" "strings" "time" @@ -281,7 +282,11 @@ func (b *Build) createBuildInfoFromPartials() (*entities.BuildInfo, error) { buildInfo.Properties = env } - buildInfo.VcsList = append(buildInfo.VcsList, vcsList...) + for _, vcs := range vcsList { + if !slices.Contains(buildInfo.VcsList, vcs) { + buildInfo.VcsList = append(buildInfo.VcsList, vcs) + } + } // Check for Tracker as it must be set if issues.Tracker != nil && issues.Tracker.Name != "" { diff --git a/build/build_test.go b/build/build_test.go index dafc230e..e2d8042a 100644 --- a/build/build_test.go +++ b/build/build_test.go @@ -60,10 +60,17 @@ func TestCollectEnv(t *testing.T) { for _, tc := range tests { t.Run(tc.description, func(t *testing.T) { build, err := service.GetOrCreateBuild("bi-test", "1") + vcs := entities.Vcs{Url: "https://github.com/jfrog/build-info-go.git", Branch: "dev"} + vcsPartial1 := entities.Partial{VcsList: []entities.Vcs{vcs}} + vcsPartial2 := entities.Partial{VcsList: []entities.Vcs{vcs}} // adding same vcs twice to test if ToBuildInfo() removes duplicates below assert.NoError(t, err) + assert.NoError(t, build.SavePartialBuildInfo(&vcsPartial1)) + assert.NoError(t, build.SavePartialBuildInfo(&vcsPartial2)) assert.NoError(t, build.CollectEnv()) buildInfo, err := build.ToBuildInfo() assert.NoError(t, err) + assert.Len(t, buildInfo.VcsList, 1) + assert.Equal(t, buildInfo.VcsList[0], vcs) err = buildInfo.IncludeEnv(tc.include...) if tc.expectError { assert.Error(t, err)