Skip to content

Commit 065343c

Browse files
authored
fix(internal/librarian): merge library dependencies, package, prefix and protos with Dart defaults (#3813)
Merge library dependencies, package, prefix and protos with Dart defaults. If a key exists in the source, the value will NOT be overridden. For #3580
1 parent 1908364 commit 065343c

2 files changed

Lines changed: 78 additions & 9 deletions

File tree

internal/librarian/library.go

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package librarian
1717
import (
1818
"fmt"
1919
"maps"
20+
"strings"
2021

2122
"github.com/googleapis/librarian/internal/config"
2223
)
@@ -86,15 +87,34 @@ func fillDart(lib *config.Library, d *config.Default) *config.Library {
8687
if lib.Dart.IssueTrackerURL == "" {
8788
lib.Dart.IssueTrackerURL = d.Dart.IssueTrackerURL
8889
}
89-
if lib.Dart.Dependencies == "" {
90-
lib.Dart.Dependencies = d.Dart.Dependencies
90+
lib.Dart.Packages = mergeMaps(lib.Dart.Packages, d.Dart.Packages)
91+
lib.Dart.Prefixes = mergeMaps(lib.Dart.Prefixes, d.Dart.Prefixes)
92+
lib.Dart.Protos = mergeMaps(lib.Dart.Protos, d.Dart.Protos)
93+
lib.Dart.Dependencies = mergeDartDependencies(lib.Dart.Dependencies, d.Dart.Dependencies)
94+
return lib
95+
}
96+
97+
// mergeDartDependencies merges library dependencies with default dependencies.
98+
// Duplicate dependencies in defaults will be ignored.
99+
func mergeDartDependencies(libDeps, defaultDeps string) string {
100+
seen := make(map[string]bool)
101+
var deps []string
102+
for _, dep := range strings.Split(libDeps, ",") {
103+
dep = strings.TrimSpace(dep)
104+
if dep == "" {
105+
continue
106+
}
107+
seen[dep] = true
108+
deps = append(deps, dep)
91109
}
92-
if lib.Dart.Packages == nil {
93-
lib.Dart.Packages = make(map[string]string)
94-
maps.Copy(lib.Dart.Packages, d.Dart.Packages)
110+
for _, dep := range strings.Split(defaultDeps, ",") {
111+
dep = strings.TrimSpace(dep)
112+
if dep == "" || seen[dep] {
113+
continue
114+
}
115+
deps = append(deps, dep)
95116
}
96-
97-
return lib
117+
return strings.Join(deps, ",")
98118
}
99119

100120
// mergePackageDependencies merges default and library package dependencies,
@@ -158,3 +178,15 @@ func applyDefaults(language string, lib *config.Library, defaults *config.Defaul
158178
}
159179
return fillDefaults(lib, defaults), nil
160180
}
181+
182+
// mergeMaps merges key-values of src and dst maps.
183+
// When a key in src is already present in dst, the value in dst will NOT be overwritten
184+
// by the value associated with the key in src.
185+
func mergeMaps(dst, src map[string]string) map[string]string {
186+
res := make(map[string]string)
187+
maps.Copy(res, src)
188+
if dst != nil {
189+
maps.Copy(res, dst)
190+
}
191+
return res
192+
}

internal/librarian/library_test.go

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,13 @@ func TestFillDefaults(t *testing.T) {
8484
"package:one": "^1.2.3",
8585
"package:two": "^2.0.0",
8686
},
87+
Prefixes: map[string]string{
88+
"prefix:google.logging.type": "logging_type",
89+
},
90+
Protos: map[string]string{
91+
"proto:google.api": "package:google_cloud_api/api.dart",
92+
"proto:google.cloud.common": "package:google_cloud_common/common.dart",
93+
},
8794
Version: "0.4.0",
8895
},
8996
},
@@ -96,6 +103,13 @@ func TestFillDefaults(t *testing.T) {
96103
Dependencies: "dep-1,dep-2",
97104
IssueTrackerURL: "https://issue-tracker-example/dart",
98105
Packages: map[string]string{"package:one": "^1.2.3", "package:two": "^2.0.0"},
106+
Prefixes: map[string]string{
107+
"prefix:google.logging.type": "logging_type",
108+
},
109+
Protos: map[string]string{
110+
"proto:google.api": "package:google_cloud_api/api.dart",
111+
"proto:google.cloud.common": "package:google_cloud_common/common.dart",
112+
},
99113
},
100114
},
101115
},
@@ -110,6 +124,13 @@ func TestFillDefaults(t *testing.T) {
110124
"package:one": "^1.2.3",
111125
"package:two": "^2.0.0",
112126
},
127+
Prefixes: map[string]string{
128+
"prefix:google.logging.type": "logging_type",
129+
},
130+
Protos: map[string]string{
131+
"proto:google.api": "package:google_cloud_api/api.dart",
132+
"proto:google.cloud.common": "package:google_cloud_common/common.dart",
133+
},
113134
Version: "0.4.0",
114135
},
115136
},
@@ -118,23 +139,39 @@ func TestFillDefaults(t *testing.T) {
118139
Version: "0.5.0",
119140
Dart: &config.DartPackage{
120141
APIKeysEnvironmentVariables: "apiKey-3,apiKey-4",
121-
Dependencies: "dep-3,dep-4",
142+
Dependencies: "dep-1,dep-3,dep-4",
122143
IssueTrackerURL: "https://another-issue-tracker-example/dart",
123144
Packages: map[string]string{
124145
"package:three": "^1.0.0",
125146
},
147+
Prefixes: map[string]string{
148+
"prefix:google.logging.type": "logging_type_v2",
149+
},
150+
Protos: map[string]string{
151+
"proto:google.cloud.location": "package:google_cloud_location/location.dart",
152+
},
126153
},
127154
},
128155
want: &config.Library{
129156
Output: "foo/",
130157
Version: "0.5.0",
131158
Dart: &config.DartPackage{
132159
APIKeysEnvironmentVariables: "apiKey-3,apiKey-4",
133-
Dependencies: "dep-3,dep-4",
160+
Dependencies: "dep-1,dep-3,dep-4,dep-2",
134161
IssueTrackerURL: "https://another-issue-tracker-example/dart",
135162
Packages: map[string]string{
163+
"package:one": "^1.2.3",
164+
"package:two": "^2.0.0",
136165
"package:three": "^1.0.0",
137166
},
167+
Prefixes: map[string]string{
168+
"prefix:google.logging.type": "logging_type_v2",
169+
},
170+
Protos: map[string]string{
171+
"proto:google.cloud.location": "package:google_cloud_location/location.dart",
172+
"proto:google.api": "package:google_cloud_api/api.dart",
173+
"proto:google.cloud.common": "package:google_cloud_common/common.dart",
174+
},
138175
},
139176
},
140177
},

0 commit comments

Comments
 (0)