Skip to content

Commit

Permalink
Merge pull request #22999 from aloubyansky/quarkus-info
Browse files Browse the repository at this point in the history
Adjustments for the info and update commands
  • Loading branch information
aloubyansky authored Jan 21, 2022
2 parents 749967c + 3835da7 commit 53e5033
Show file tree
Hide file tree
Showing 9 changed files with 306 additions and 152 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ public QuarkusInfo() {

@TaskAction
public void logInfo() {

getProject().getLogger().warn(getName() + " is experimental, its options and output might change in future versions");

final QuarkusProject quarkusProject = getQuarkusProject(false);
final Map<String, Object> params = new HashMap<>();
params.put(UpdateCommandHandler.APP_MODEL, extension().getApplicationModel());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ public QuarkusUpdate() {

@TaskAction
public void logUpdates() {

getProject().getLogger().warn(getName() + " is experimental, its options and output might change in future versions");

final QuarkusProject quarkusProject = getQuarkusProject(false);
final Map<String, Object> params = new HashMap<>();
try {
Expand Down
6 changes: 6 additions & 0 deletions devtools/maven/src/main/java/io/quarkus/maven/InfoMojo.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@
@Mojo(name = "info", requiresProject = true)
public class InfoMojo extends QuarkusProjectStateMojoBase {

@Override
protected void validateParameters() throws MojoExecutionException {
getLog().warn("quarkus:info goal is experimental, its options and output may change in future versions");
super.validateParameters();
}

@Override
protected void processProjectState(QuarkusProject quarkusProject) throws MojoExecutionException {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,8 @@ public void execute() throws MojoExecutionException {
if (BuildTool.MAVEN.equals(buildTool) && project.getFile() != null) {
try {
quarkusProject = MavenProjectBuildFile.getProject(projectArtifact(), project.getOriginalModel(), baseDir(),
project.getModel().getProperties(), artifactResolver(), catalogArtifactResolver(), getMessageWriter(),
project.getModel().getProperties(), artifactResolver(), getExtensionCatalogResolver(),
getMessageWriter(),
null);
} catch (RegistryResolutionException e) {
throw new MojoExecutionException("Failed to initialize Quarkus Maven extension manager", e);
Expand All @@ -120,9 +121,7 @@ protected Path baseDir() {
}

private ExtensionCatalog resolveExtensionCatalog() throws MojoExecutionException {
final ExtensionCatalogResolver catalogResolver = QuarkusProjectHelper.isRegistryClientEnabled()
? getExtensionCatalogResolver()
: ExtensionCatalogResolver.empty();
final ExtensionCatalogResolver catalogResolver = getExtensionCatalogResolver();
if (catalogResolver.hasRegistries()) {
try {
return catalogResolver.resolveExtensionCatalog(getImportedPlatforms());
Expand All @@ -136,7 +135,9 @@ private ExtensionCatalog resolveExtensionCatalog() throws MojoExecutionException
protected ExtensionCatalogResolver getExtensionCatalogResolver() throws MojoExecutionException {
if (catalogResolver == null) {
try {
catalogResolver = QuarkusProjectHelper.getCatalogResolver(catalogArtifactResolver(), getMessageWriter());
catalogResolver = QuarkusProjectHelper.isRegistryClientEnabled()
? QuarkusProjectHelper.getCatalogResolver(catalogArtifactResolver(), getMessageWriter())
: ExtensionCatalogResolver.empty();
} catch (RegistryResolutionException e) {
throw new MojoExecutionException("Failed to initialize Quarkus extension resolver", e);
}
Expand All @@ -150,6 +151,11 @@ protected List<ArtifactCoords> getImportedPlatforms() throws MojoExecutionExcept
if (bomGroupId == null && bomArtifactId == null && bomVersion == null) {
return Collections.emptyList();
}
final ExtensionCatalogResolver catalogResolver = getExtensionCatalogResolver();
if (!catalogResolver.hasRegistries()) {
throw new MojoExecutionException(
"Couldn't resolve the Quarkus platform catalog since none of the Quarkus extension registries are available");
}
if (bomGroupId == null) {
bomGroupId = ToolsConstants.DEFAULT_PLATFORM_BOM_GROUP_ID;
}
Expand Down
6 changes: 6 additions & 0 deletions devtools/maven/src/main/java/io/quarkus/maven/UpdateMojo.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,12 @@ public class UpdateMojo extends QuarkusProjectStateMojoBase {
@Parameter(property = "rectify")
boolean rectify;

@Override
protected void validateParameters() throws MojoExecutionException {
getLog().warn("quarkus:update goal is experimental, its options and output might change in future versions");
super.validateParameters();
}

@Override
protected void processProjectState(QuarkusProject quarkusProject) throws MojoExecutionException {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,72 +127,93 @@ protected static boolean logState(ProjectState projectState, boolean perModule,
if (perModule) {
final ModuleState mainModule = projectState.getMainModule();
final Path baseDir = mainModule.getModuleDir();
recommendationsAvailable |= logModuleInfo(mainModule, baseDir, log, rectify);
recommendationsAvailable |= logModuleInfo(projectState, mainModule, baseDir, log, rectify);
for (ModuleState module : projectState.getModules()) {
if (!module.isMain()) {
recommendationsAvailable |= logModuleInfo(module, baseDir, log, rectify);
recommendationsAvailable |= logModuleInfo(projectState, module, baseDir, log, rectify);
}
}
} else {
for (ExtensionProvider provider : projectState.getExtensionProviders()) {
if (provider.getExtensions().isEmpty()) {
continue;
if (provider.isPlatform()) {
recommendationsAvailable = logProvidedExtensions(provider, rectify, log, recommendationsAvailable);
}
log.info("Extensions from " + provider.getKey() + ":");
for (TopExtensionDependency dep : provider.getExtensions()) {
final StringBuilder sb = new StringBuilder();
if (dep.isPlatformExtension()) {
if (rectify) {
if (dep.isNonRecommendedVersion()) {
sb.append(String.format(UpdateCommandHandler.PLATFORM_RECTIFY_FORMAT,
UpdateCommandHandler.UPDATE, ""));
} else {
sb.append(String.format(UpdateCommandHandler.PLATFORM_RECTIFY_FORMAT, "", ""));
}
sb.append(dep.getArtifact().getGroupId()).append(':')
.append(dep.getArtifact().getArtifactId());
if (!dep.getArtifact().getClassifier().isEmpty()) {
sb.append(':').append(dep.getArtifact().getClassifier());
}
if (dep.isNonRecommendedVersion()) {
sb.append(':').append(dep.getArtifact().getVersion());
if (rectify) {
sb.append(" -> remove version (managed)");
}
recommendationsAvailable = true;
}
} else {
sb.append(" ").append(dep.getArtifact().getGroupId()).append(':')
.append(dep.getArtifact().getArtifactId());
if (!dep.getArtifact().getClassifier().isEmpty()) {
sb.append(':').append(dep.getArtifact().getClassifier());
}
if (dep.isNonRecommendedVersion()) {
sb.append(':').append(dep.getArtifact().getVersion());
sb.append(" | misaligned");
recommendationsAvailable = true;
}
}
} else {
sb.append(" ").append(dep.getArtifact().getGroupId()).append(':')
.append(dep.getArtifact().getArtifactId());
if (!dep.getArtifact().getClassifier().isEmpty()) {
sb.append(':').append(dep.getArtifact().getClassifier());
}
sb.append(':').append(dep.getArtifact().getVersion());
}
if (dep.isTransitive()) {
sb.append(" | transitive");
}
for (ExtensionProvider provider : projectState.getExtensionProviders()) {
if (!provider.isPlatform()) {
recommendationsAvailable = logProvidedExtensions(provider, rectify, log, recommendationsAvailable);
}
}
}
return recommendationsAvailable;
}

private static boolean logProvidedExtensions(ExtensionProvider provider, boolean rectify, MessageWriter log,
boolean recommendationsAvailable) {
if (provider.getExtensions().isEmpty()) {
return recommendationsAvailable;
}
log.info("Extensions from " + provider.getKey() + ":");
final StringBuilder sb = new StringBuilder();
for (TopExtensionDependency dep : provider.getExtensions()) {
sb.setLength(0);
recommendationsAvailable = logExtensionInfo(dep, rectify, sb, recommendationsAvailable);
log.info(sb.toString());
}
log.info("");
return recommendationsAvailable;
}

private static boolean logExtensionInfo(TopExtensionDependency dep, boolean rectify, StringBuilder sb,
boolean recommendationsAvailable) {
if (dep.isPlatformExtension()) {
if (rectify) {
if (dep.isNonRecommendedVersion()) {
sb.append(String.format(UpdateCommandHandler.PLATFORM_RECTIFY_FORMAT,
UpdateCommandHandler.UPDATE, ""));
} else {
sb.append(String.format(UpdateCommandHandler.PLATFORM_RECTIFY_FORMAT, "", ""));
}
sb.append(dep.getArtifact().getGroupId()).append(':')
.append(dep.getArtifact().getArtifactId());
if (!dep.getArtifact().getClassifier().isEmpty()) {
sb.append(':').append(dep.getArtifact().getClassifier());
}
if (dep.isNonRecommendedVersion()) {
sb.append(':').append(dep.getArtifact().getVersion());
if (rectify) {
sb.append(" -> remove version (managed)");
}
log.info(sb.toString());
recommendationsAvailable = true;
}
} else {
sb.append(" ").append(dep.getArtifact().getGroupId()).append(':')
.append(dep.getArtifact().getArtifactId());
if (!dep.getArtifact().getClassifier().isEmpty()) {
sb.append(':').append(dep.getArtifact().getClassifier());
}
if (dep.isNonRecommendedVersion()) {
sb.append(':').append(dep.getArtifact().getVersion());
sb.append(" | misaligned");
recommendationsAvailable = true;
}
log.info("");
}
} else {
if (rectify) {
sb.append(String.format(UpdateCommandHandler.PLATFORM_RECTIFY_FORMAT, "", ""));
} else {
sb.append(" ");
}
sb.append(dep.getArtifact().toCompactCoords());
}
if (dep.isTransitive()) {
sb.append(" | transitive");
}
return recommendationsAvailable;
}

private static boolean logModuleInfo(ModuleState module, Path baseDir, MessageWriter log, boolean rectify) {
private static boolean logModuleInfo(ProjectState project, ModuleState module, Path baseDir, MessageWriter log,
boolean rectify) {
if (module.getExtensions().isEmpty() && module.getPlatformBoms().isEmpty() && !module.isMain()) {
return false;
}
Expand Down Expand Up @@ -230,57 +251,39 @@ private static boolean logModuleInfo(ModuleState module, Path baseDir, MessageWr
for (TopExtensionDependency dep : module.getExtensions()) {
extDepsByProvider.computeIfAbsent(dep.getProviderKey(), k -> new ArrayList<>()).add(dep);
}
for (Map.Entry<String, List<TopExtensionDependency>> provider : extDepsByProvider.entrySet()) {
log.info(" Extensions from " + provider.getKey() + ":");
for (TopExtensionDependency dep : provider.getValue()) {
sb.setLength(0);
sb.append(" ");
if (dep.isPlatformExtension()) {
if (rectify) {
if (dep.isNonRecommendedVersion()) {
sb.append(String.format(UpdateCommandHandler.PLATFORM_RECTIFY_FORMAT,
UpdateCommandHandler.UPDATE, ""));
} else {
sb.append(String.format(UpdateCommandHandler.PLATFORM_RECTIFY_FORMAT, "", ""));
}
sb.append(dep.getArtifact().getGroupId()).append(':')
.append(dep.getArtifact().getArtifactId());
if (!dep.getArtifact().getClassifier().isEmpty()) {
sb.append(':').append(dep.getArtifact().getClassifier());
}
if (dep.isNonRecommendedVersion()) {
sb.append(':').append(dep.getArtifact().getVersion());
if (rectify) {
sb.append(" -> remove version (managed)");
}
recommendationsAvailable = true;
}
} else {
sb.append(" ").append(dep.getArtifact().getGroupId()).append(':')
.append(dep.getArtifact().getArtifactId());
if (!dep.getArtifact().getClassifier().isEmpty()) {
sb.append(':').append(dep.getArtifact().getClassifier());
}
if (dep.isNonRecommendedVersion()) {
sb.append(':').append(dep.getArtifact().getVersion());
sb.append(" | misaligned");
recommendationsAvailable = true;
}
}
} else {
if (rectify) {
sb.append(String.format(UpdateCommandHandler.PLATFORM_RECTIFY_FORMAT, "", ""));
} else {
sb.append(" ");
}
sb.append(dep.getArtifact().toCompactCoords());
for (ExtensionProvider provider : project.getExtensionProviders()) {
if (!provider.isPlatform()) {
continue;
}
final List<TopExtensionDependency> extList = extDepsByProvider.getOrDefault(provider.getKey(),
Collections.emptyList());
if (!extList.isEmpty()) {
log.info(" Extensions from " + provider.getKey() + ":");
for (TopExtensionDependency dep : extList) {
sb.setLength(0);
sb.append(" ");
recommendationsAvailable = logExtensionInfo(dep, rectify, sb, recommendationsAvailable);
log.info(sb.toString());
}
if (dep.isTransitive()) {
sb.append(" | transitive");
log.info("");
}
}
for (ExtensionProvider provider : project.getExtensionProviders()) {
if (provider.isPlatform()) {
continue;
}
final List<TopExtensionDependency> extList = extDepsByProvider.getOrDefault(provider.getKey(),
Collections.emptyList());
if (!extList.isEmpty()) {
log.info(" Extensions from " + provider.getKey() + ":");
for (TopExtensionDependency dep : extList) {
sb.setLength(0);
sb.append(" ");
recommendationsAvailable = logExtensionInfo(dep, rectify, sb, recommendationsAvailable);
log.info(sb.toString());
}
log.info(sb.toString());
log.info("");
}
log.info("");
}
}
return recommendationsAvailable;
Expand All @@ -294,7 +297,7 @@ protected static ProjectState resolveProjectState(ApplicationModel appModel, Ext
return projectBuilder.build();
}

final Map<String, ExtensionProvider.Builder> extProviderBuilders = new HashMap<>(importedPlatformBoms.size());
final Map<String, ExtensionProvider.Builder> extProviderBuilders = new LinkedHashMap<>(importedPlatformBoms.size());
importedPlatformBoms.forEach(bom -> {
projectBuilder.addPlatformBom(bom);
extProviderBuilders.put(ExtensionProvider.key(bom, true),
Expand Down Expand Up @@ -393,7 +396,18 @@ boolean isImported() {
}

boolean isToBeImported() {
return recommended != null;
return imported == null && recommended != null;
}

ArtifactCoords getRecommendedCoords() {
return recommended == null ? imported : recommended;
}

String getRecommendedProviderKey() {
if (recommended != null) {
return ExtensionProvider.key(recommended, true);
}
return ExtensionProvider.key(imported, true);
}
}
}
Loading

0 comments on commit 53e5033

Please sign in to comment.