From 8224104efcfd151145f9c1dc7f63a7fd4fd66ea5 Mon Sep 17 00:00:00 2001 From: Xueqin Cui Date: Mon, 3 Nov 2025 16:14:54 +1100 Subject: [PATCH 1/2] Add InterpolateRepositories for Maven Project --- util/maven/project.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/util/maven/project.go b/util/maven/project.go index d74fc20d..0f4bfe35 100644 --- a/util/maven/project.go +++ b/util/maven/project.go @@ -306,3 +306,17 @@ func (p *Project) Interpolate() error { return nil } + +// InterpolateRepositories resolves placeholders in repositories metadata with best effort. +func (p *Project) InterpolateRepositories() error { + properties, err := p.propertyMap() + if err != nil { + return err + } + + for _, r := range p.Repositories { + r.interpolate(properties) + } + + return nil +} From ba9ddf425f0136e71d3e8c4341bdef626482dd02 Mon Sep 17 00:00:00 2001 From: Xueqin Cui Date: Mon, 3 Nov 2025 20:21:45 +1100 Subject: [PATCH 2/2] add tests --- util/maven/project.go | 4 +- util/maven/project_test.go | 90 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 2 deletions(-) diff --git a/util/maven/project.go b/util/maven/project.go index 0f4bfe35..bdb91a31 100644 --- a/util/maven/project.go +++ b/util/maven/project.go @@ -314,8 +314,8 @@ func (p *Project) InterpolateRepositories() error { return err } - for _, r := range p.Repositories { - r.interpolate(properties) + for i := range p.Repositories { + p.Repositories[i].interpolate(properties) } return nil diff --git a/util/maven/project_test.go b/util/maven/project_test.go index fb6b6c4b..995ac395 100644 --- a/util/maven/project_test.go +++ b/util/maven/project_test.go @@ -20,6 +20,7 @@ import ( "testing" "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" ) func TestProject(t *testing.T) { @@ -784,3 +785,92 @@ func TestInterpolate(t *testing.T) { t.Errorf("interpolate:\n(-got, +want):\n%s", diff) } } + +func TestInterpolateRepositories(t *testing.T) { + proj := Project{ + ProjectKey: ProjectKey{ + GroupID: "com.example", + ArtifactID: "basic", + Version: "1.2.3", + }, + Properties: Properties{ + Properties: []Property{ + {Name: "repo.id", Value: "my-repo"}, + {Name: "repo.url", Value: "https://www.my-repo.example.com"}, + {Name: "repo.layout", Value: "default"}, + {Name: "dep.version", Value: "1.0.0"}, + }, + }, + Repositories: []Repository{{ + ID: "${repo.id}", + URL: "${repo.url}", + Layout: "${repo.layout}", + Releases: RepositoryPolicy{ + Enabled: "true", + }, + Snapshots: RepositoryPolicy{ + Enabled: "false", + }, + }, { + ID: "another-repo", + URL: "https://www.another-repo.example.com", + }}, + Dependencies: []Dependency{{ + GroupID: "org.example", + ArtifactID: "dep", + Version: "${dep.version}", + }}, + } + want := Project{ + ProjectKey: ProjectKey{ + GroupID: "com.example", + ArtifactID: "basic", + Version: "1.2.3", + }, + Properties: Properties{ + Properties: []Property{ + {Name: "repo.id", Value: "my-repo"}, + {Name: "repo.url", Value: "https://www.my-repo.example.com"}, + {Name: "repo.layout", Value: "default"}, + {Name: "dep.version", Value: "1.0.0"}, + }, + }, + Repositories: []Repository{{ + ID: "my-repo", + URL: "https://www.my-repo.example.com", + Layout: "default", + Releases: RepositoryPolicy{ + Enabled: "true", + }, + Snapshots: RepositoryPolicy{ + Enabled: "false", + }, + }, { + ID: "another-repo", + URL: "https://www.another-repo.example.com", + }}, + Dependencies: []Dependency{{ + GroupID: "org.example", + ArtifactID: "dep", + Version: "${dep.version}", + }}, + } + if err := proj.InterpolateRepositories(); err != nil { + t.Fatalf("InterpolateRepositories() err = %v, want nil", err) + } + if diff := cmp.Diff(proj, want, cmpopts.EquateEmpty()); diff != "" { + t.Errorf("interpolate repositories:\n(-got, +want):\n%s", diff) + } + + want.Dependencies = []Dependency{{ + GroupID: "org.example", + ArtifactID: "dep", + Version: "1.0.0", + }} + if err := proj.Interpolate(); err != nil { + t.Fatalf("Interpolate() err = %v, want nil", err) + } + if diff := cmp.Diff(proj, want, cmpopts.EquateEmpty()); diff != "" { + t.Errorf("interpolate repositories then interpolate:\n(-got, +want):\n%s", diff) + } +}