|
12 | 12 | import org.gradle.api.tasks.Input;
|
13 | 13 | import org.gradle.api.tasks.TaskAction;
|
14 | 14 | import org.gradle.api.tasks.options.Option;
|
| 15 | +import org.gradle.util.internal.VersionNumber; |
15 | 16 |
|
16 | 17 | import java.io.File;
|
17 | 18 | import java.io.IOException;
|
@@ -82,8 +83,6 @@ void run() throws IOException {
|
82 | 83 | writeCoordinatesMetadataVersionJsons(coordinatesMetadataVersionRoot, coordinates);
|
83 | 84 | addToMetadataIndexJson(coordinates);
|
84 | 85 |
|
85 |
| - |
86 |
| - |
87 | 86 | // Tests
|
88 | 87 | writeTestScaffold(coordinatesTestRoot, coordinates);
|
89 | 88 | addToTestIndexJson(coordinates);
|
@@ -246,40 +245,47 @@ private void writeCoordinatesMetadataRootJson(Path metadataRoot, Coordinates coo
|
246 | 245 | private void updateCoordinatesMetadataRootJson(Path metadataRoot, Coordinates coordinates) throws IOException {
|
247 | 246 | File metadataIndex = metadataRoot.resolve("index.json").toFile();
|
248 | 247 | List<MetadataVersionsIndexEntry> entries = objectMapper.readValue(metadataIndex, new TypeReference<>() {});
|
249 |
| - int deleteIndex = -1; |
250 |
| - for (int i = 0; i < entries.size(); i++) { |
251 |
| - MetadataVersionsIndexEntry nextEntry = entries.get(i); |
252 |
| - if (nextEntry.latest() == null || nextEntry.latest()) { |
253 |
| - deleteIndex = i; |
254 |
| - } |
255 |
| - } |
256 | 248 |
|
257 |
| - // replace entry that was previously marked with latest: true |
258 |
| - if (deleteIndex != -1) { |
259 |
| - MetadataVersionsIndexEntry deletedEntry = entries.remove(deleteIndex); |
260 |
| - MetadataVersionsIndexEntry replaceEntry = new MetadataVersionsIndexEntry(null, |
261 |
| - deletedEntry.override(), |
262 |
| - deletedEntry.module(), |
263 |
| - deletedEntry.defaultFor(), |
264 |
| - deletedEntry.metadataVersion(), |
265 |
| - deletedEntry.testedVersions()); |
266 |
| - entries.add(replaceEntry); |
267 |
| - } |
268 |
| - |
269 |
| - // create new latest entry |
270 |
| - MetadataVersionsIndexEntry newEntry = new MetadataVersionsIndexEntry(true, |
| 249 | + // add new entry |
| 250 | + MetadataVersionsIndexEntry newEntry = new MetadataVersionsIndexEntry(null, |
271 | 251 | null,
|
272 | 252 | coordinates.group() + ":" + coordinates.artifact(),
|
273 | 253 | null,
|
274 | 254 | coordinates.version(),
|
275 | 255 | List.of(coordinates.version()));
|
276 | 256 |
|
277 | 257 | entries.add(newEntry);
|
278 |
| - List<MetadataVersionsIndexEntry> sortedEntries = entries.stream() |
279 |
| - .sorted(Comparator.comparing(MetadataVersionsIndexEntry::module)) |
280 |
| - .toList(); |
281 | 258 |
|
282 |
| - objectMapper.writeValue(metadataIndex, sortedEntries); |
| 259 | + // determine updates |
| 260 | + int previousLatest = -1; |
| 261 | + int newLatest = -1; |
| 262 | + VersionNumber latestVersion = VersionNumber.parse(entries.get(0).metadataVersion()); |
| 263 | + for (int i = 0; i < entries.size(); i++) { |
| 264 | + if (entries.get(i).latest() != null && entries.get(i).latest()) { |
| 265 | + previousLatest = i; |
| 266 | + } |
| 267 | + |
| 268 | + VersionNumber nextVersion = VersionNumber.parse(entries.get(i).metadataVersion()); |
| 269 | + if (latestVersion.compareTo(nextVersion) < 0){ |
| 270 | + newLatest = i; |
| 271 | + } |
| 272 | + } |
| 273 | + |
| 274 | + if (previousLatest != -1) { |
| 275 | + setLatest(entries, previousLatest, null); |
| 276 | + } |
| 277 | + |
| 278 | + if (newLatest != -1) { |
| 279 | + setLatest(entries, newLatest, true); |
| 280 | + } |
| 281 | + |
| 282 | + entries.sort(Comparator.comparing(MetadataVersionsIndexEntry::module)); |
| 283 | + objectMapper.writeValue(metadataIndex, entries); |
| 284 | + } |
| 285 | + |
| 286 | + private void setLatest( List<MetadataVersionsIndexEntry> list, int index, Boolean newValue) { |
| 287 | + MetadataVersionsIndexEntry oldEntry = list.remove(index); |
| 288 | + list.add(new MetadataVersionsIndexEntry(newValue, oldEntry.override(), oldEntry.module(), oldEntry.defaultFor(), oldEntry.metadataVersion(), oldEntry.testedVersions())); |
283 | 289 | }
|
284 | 290 |
|
285 | 291 | private String getEmptyJsonArray() {
|
|
0 commit comments