Skip to content

Commit de96b33

Browse files
committed
new method to get package specs and vesion metadata
Change-Id: Ibfe3ec241a32f84113f36811d1f4dafb4bd76a9a
1 parent 1453304 commit de96b33

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

source/AndroidResolver/src/GradleResolver.cs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,54 @@ internal static Dictionary<string, string> DependenciesToPackageSpecs(
130130
return sourcesByPackageSpec;
131131
}
132132

133+
/// <summary>
134+
/// From a list of dependencies generate a list of Maven / Gradle / Ivy package spec
135+
/// strings along with their corresponding dependency versions.
136+
/// </summary>
137+
/// <param name="dependencies">Dependency instances to query for package specs.</param>
138+
/// <returns>Dictionary where the key is a package spec string and value is a
139+
/// 3 item list of sources string, dependency version less string,
140+
/// and a dependency version string. </returns>
141+
internal static Dictionary<string, List<string>> DependenciesToPackageSpecsWithVersions(
142+
IEnumerable<Dependency> dependencies) {
143+
// To keep it simple to iterate and process, create 3 separate
144+
// dictionaries to record required metadata about a package spec
145+
// (version and versionless key).
146+
var sourcesByPackageSpec = new Dictionary<string, string>();
147+
var versionsByPackageSpec = new Dictionary<string, string>();
148+
var versionlessKeysByPackageSpec = new Dictionary<string, string>();
149+
foreach (var dependency in dependencies) {
150+
// Convert the legacy "LATEST" version spec to a Gradle version spec.
151+
var packageSpec = dependency.Version.ToUpper() == "LATEST" ?
152+
dependency.VersionlessKey + ":+" : dependency.Key;
153+
var source = CommandLine.SplitLines(dependency.CreatedBy)[0];
154+
string sources;
155+
if (sourcesByPackageSpec.TryGetValue(packageSpec, out sources)) {
156+
sources = sources + ", " + source;
157+
} else {
158+
sources = source;
159+
}
160+
sourcesByPackageSpec[packageSpec] = sources;
161+
versionsByPackageSpec[packageSpec] = dependency.Version;
162+
versionlessKeysByPackageSpec[packageSpec] = dependency.VersionlessKey;
163+
}
164+
// Create a new dictionary which combines the data from sources and
165+
// versions dictionaries. Key is packageSpec string and value is a
166+
// three-item list of strings of sources, version less string
167+
// and dependency version.
168+
// NOTE: tuples are a more elegant way of doing this but they work
169+
// only in .NET frameworks >= 4.0.
170+
var mergedByPackageSpec = new Dictionary<string, List<string>>();
171+
foreach(var item in sourcesByPackageSpec) {
172+
mergedByPackageSpec[item.Key] = new List<string>{
173+
sourcesByPackageSpec[item.Key],
174+
versionlessKeysByPackageSpec[item.Key],
175+
versionsByPackageSpec[item.Key]
176+
};
177+
}
178+
return mergedByPackageSpec;
179+
}
180+
133181
/// <summary>
134182
/// Convert a repo path to a valid URI.
135183
/// If the specified repo is a local directory and it doesn't exist, search the project

0 commit comments

Comments
 (0)