@@ -97,6 +97,10 @@ abstract class FetchExistingLibrariesWithNewerVersionsTask extends DefaultTask {
9797
9898 List<String > newerVersions = getNewerVersionsFromLibraryIndex(data, startingVersion, library)
9999
100+ // filter out already tested versions
101+ List<String > testedVersions = getTestedVersions(library);
102+ newerVersions. removeAll(testedVersions);
103+
100104 // filter pre-release versions if full release exists
101105 return filterPreReleases(newerVersions)
102106 }
@@ -147,30 +151,45 @@ abstract class FetchExistingLibrariesWithNewerVersionsTask extends DefaultTask {
147151 }
148152
149153 static String getLatestLibraryVersion (String libraryModule ) {
154+ try {
155+ List<String > testedVersions = getTestedVersions(libraryModule);
156+ if (testedVersions. isEmpty()) {
157+ throw new IllegalStateException (" Cannot find any tested version for: " + libraryModule);
158+ }
159+
160+ testedVersions. sort(Comparator . comparing(VersionNumber ::parse));
161+ return testedVersions. get(testedVersions. size() - 1 );
162+ } catch (IOException e) {
163+ throw new RuntimeException (e);
164+ }
165+ }
166+
167+ /**
168+ * Reads the tested versions of a given library from its metadata index file.
169+ */
170+ static List<String > getTestedVersions (String libraryModule ) {
150171 try {
151172 String [] coordinates = libraryModule. split(" :" );
152173 String group = coordinates[0 ];
153174 String artifact = coordinates[1 ];
154175
155- File coordinatesMetadataIndex = new File (" metadata/" + group + " /" + artifact + " /index.json" );
176+ File indexFile = new File (" metadata/" + group + " /" + artifact + " /index.json" );
177+ if (! indexFile. exists()) {
178+ return Collections . emptyList();
179+ }
180+
156181 ObjectMapper objectMapper = new ObjectMapper ()
157182 .enable(SerializationFeature . INDENT_OUTPUT )
158183 .setSerializationInclusion(JsonInclude.Include . NON_NULL );
159184
160- List<MetadataVersionsIndexEntry > entries = objectMapper. readValue(coordinatesMetadataIndex, new TypeReference< List< MetadataVersionsIndexEntry > > () {
161- });
185+ List<MetadataVersionsIndexEntry > entries = objectMapper. readValue(indexFile,
186+ new TypeReference< List< MetadataVersionsIndexEntry > > () { });
162187
163- List<String > allTested = new ArrayList<> ();
188+ List<String > testedVersions = new ArrayList<> ();
164189 for (MetadataVersionsIndexEntry entry : entries) {
165- allTested . addAll(entry. testedVersions());
190+ testedVersions . addAll(entry. testedVersions());
166191 }
167-
168- if (allTested. isEmpty()) {
169- throw new IllegalStateException (" Cannot find any tested version for: " + libraryModule);
170- }
171-
172- allTested. sort(Comparator . comparing(VersionNumber ::parse));
173- return allTested. get(allTested. size() - 1 );
192+ return testedVersions;
174193 } catch (IOException e) {
175194 throw new RuntimeException (e);
176195 }
0 commit comments