|
9 | 9 | import java.util.List; |
10 | 10 | import java.util.Map; |
11 | 11 | import java.util.Set; |
| 12 | +import java.util.regex.Matcher; |
| 13 | +import java.util.regex.Pattern; |
12 | 14 |
|
13 | 15 | import org.slf4j.Logger; |
14 | 16 | import org.slf4j.LoggerFactory; |
@@ -71,6 +73,27 @@ public class IdeasyCommandlet extends MvnBasedLocalToolCommandlet { |
71 | 73 |
|
72 | 74 | private final UpgradeMode mode; |
73 | 75 |
|
| 76 | + /** Pattern for IDEasy SNAPSHOT versions built locally. */ |
| 77 | + // ..............................................................................1..........................2........3........4 |
| 78 | + private static final Pattern PATTERN_IDEASY_SNAPSHOT_VERSION = Pattern.compile("^(\\d{4}\\.\\d{2}\\.\\d{3})-(\\d{2})_(\\d{2})_(\\d{2}).*-SNAPSHOT$"); |
| 79 | + |
| 80 | + /** Pattern for Maven/Nexus SNAPSHOT versions from downloads . */ |
| 81 | + // .............................................................................1..........................2.......3.......4..........5 |
| 82 | + private static final Pattern PATTERN_MAVEN_SNAPSHOT_VERSION = Pattern.compile("^(\\d{4}\\.\\d{2}\\.\\d{3})-(\\d{4})(\\d{2})(\\d{2})\\.(\\d{2})\\d{4}.*$"); |
| 83 | + |
| 84 | + // Group numbers for PATTERN_IDEASY_SNAPSHOT_VERSION |
| 85 | + private static final int GROUP_IDEASY_BASE = 1; |
| 86 | + private static final int GROUP_IDEASY_MONTH = 2; |
| 87 | + private static final int GROUP_IDEASY_DAY = 3; |
| 88 | + private static final int GROUP_IDEASY_HOUR = 4; |
| 89 | + |
| 90 | + // Group numbers for PATTERN_MAVEN_SNAPSHOT_VERSION |
| 91 | + private static final int GROUP_MAVEN_BASE = 1; |
| 92 | + private static final int GROUP_MAVEN_YEAR = 2; |
| 93 | + private static final int GROUP_MAVEN_MONTH = 3; |
| 94 | + private static final int GROUP_MAVEN_DAY = 4; |
| 95 | + private static final int GROUP_MAVEN_HOUR = 5; |
| 96 | + |
74 | 97 | /** |
75 | 98 | * The constructor. |
76 | 99 | * |
@@ -178,15 +201,60 @@ public boolean checkIfUpdateIsAvailable() { |
178 | 201 | return false; |
179 | 202 | } |
180 | 203 | VersionIdentifier latestVersion = getLatestVersion(); |
181 | | - if (installedVersion.equals(latestVersion)) { |
182 | | - IdeLogLevel.SUCCESS.log(LOG, "Your are using the latest version of IDEasy and no update is available."); |
| 204 | + if (IdeVersion.isSnapshot()) { |
| 205 | + if (isSameSnapshotVersion(installedVersion.toString(), latestVersion.toString())) { |
| 206 | + IdeLogLevel.SUCCESS.log(LOG, "Your are using the latest snapshot version of IDEasy and no update is available."); |
| 207 | + return false; |
| 208 | + } |
| 209 | + } else if (installedVersion.equals(latestVersion)) { |
| 210 | + IdeLogLevel.SUCCESS.log(LOG, "Your are using the latest stable version of IDEasy and no update is available."); |
183 | 211 | return false; |
184 | | - } else { |
185 | | - IdeLogLevel.INTERACTION.log(LOG, |
186 | | - "Your version of IDEasy is {} but version {} is available. Please run the following command to upgrade to the latest version:\n" |
187 | | - + "ide upgrade", installedVersion, latestVersion); |
188 | | - return true; |
189 | 212 | } |
| 213 | + IdeLogLevel.INTERACTION.log(LOG, |
| 214 | + "Your version of IDEasy is {} but version {} is available. Please run the following command to upgrade to the latest version:\n" |
| 215 | + + "ide upgrade", installedVersion, latestVersion); |
| 216 | + return true; |
| 217 | + } |
| 218 | + |
| 219 | + /** |
| 220 | + * Checks if two snapshot versions represent the version |
| 221 | + * |
| 222 | + * @param installed the installed version string |
| 223 | + * @param latest the latest available version string |
| 224 | + * @return {@code true} if both versions represent the same version, {@code false} otherwise. |
| 225 | + */ |
| 226 | + private boolean isSameSnapshotVersion(String installed, String latest) { |
| 227 | + if (installed == null || latest == null) { |
| 228 | + return false; |
| 229 | + } |
| 230 | + |
| 231 | + Matcher installedMatcher = PATTERN_IDEASY_SNAPSHOT_VERSION.matcher(installed); |
| 232 | + Matcher latestMatcher = PATTERN_MAVEN_SNAPSHOT_VERSION.matcher(latest); |
| 233 | + |
| 234 | + if (!installedMatcher.matches() || !latestMatcher.matches()) { |
| 235 | + return false; |
| 236 | + } |
| 237 | + |
| 238 | + // Compare base versions |
| 239 | + String baseInstalled = installedMatcher.group(GROUP_IDEASY_BASE); |
| 240 | + String baseLatest = latestMatcher.group(GROUP_MAVEN_BASE); |
| 241 | + if (!baseInstalled.equals(baseLatest)) { |
| 242 | + return false; |
| 243 | + } |
| 244 | + |
| 245 | + // Compare year |
| 246 | + String yearLatest = latestMatcher.group(GROUP_MAVEN_YEAR); |
| 247 | + String baseYear = baseInstalled.split("\\.")[0]; |
| 248 | + if (!baseYear.equals(yearLatest)) { |
| 249 | + return false; |
| 250 | + } |
| 251 | + |
| 252 | + // Compare MMDD.HH for both versions |
| 253 | + String keyInstalled = |
| 254 | + installedMatcher.group(GROUP_IDEASY_MONTH) + installedMatcher.group(GROUP_IDEASY_DAY) + "." + installedMatcher.group(GROUP_IDEASY_HOUR); |
| 255 | + String keyLatest = latestMatcher.group(GROUP_MAVEN_MONTH) + latestMatcher.group(GROUP_MAVEN_DAY) + "." + latestMatcher.group(GROUP_MAVEN_HOUR); |
| 256 | + |
| 257 | + return keyInstalled.equals(keyLatest); |
190 | 258 | } |
191 | 259 |
|
192 | 260 | /** |
|
0 commit comments