in src/main/java/org/apache/sling/feature/maven/mojos/UpdateVersionsMojo.java [261:371]
public void execute() throws MojoExecutionException, MojoFailureException {
checkPreconditions();
// Get the raw features
final Map<String, Feature> features = this.getFeatures();
// Create config
final UpdateConfig cfg = this.createConfiguration();
// Calculate dependencies for features and get updates
cfg.updateInfos = this.getDependencies(features, cfg);
this.lookupVersionUpdates(cfg.updateInfos);
final Map<String, UpdateResult> results = new LinkedHashMap<>();
final Map<String, Set<String>> globalPropertyUpdates = new HashMap<String, Set<String>>();
for (final Map.Entry<String, Feature> entry : features.entrySet()) {
getLog().debug("Checking feature file " + entry.getKey());
final UpdateResult result = new UpdateResult();
results.put(entry.getKey(), result);
result.updates = this.getUpdates(entry.getValue(), cfg);
if (!result.updates.isEmpty()) {
// read raw feature file
final Feature rawFeature = this.readRawFeature(entry.getKey());
if (updateVersions(entry.getKey(), rawFeature, result, globalPropertyUpdates) && !dryRun) {
try (final Writer w = new FileWriter(new File(entry.getKey()))) {
JSONFeatures.write(w, rawFeature);
} catch (final IOException e) {
throw new MojoExecutionException("Unable to write feature file " + entry.getValue(), e);
}
}
}
}
boolean printedHeader = false;
for (final Map.Entry<String, UpdateResult> entry : results.entrySet()) {
if (entry.getValue().updates.isEmpty()) {
if (!printedHeader) {
getLog().info("");
getLog().info("The following features have no updates:");
printedHeader = true;
}
getLog().info("- " + entry.getKey());
}
}
printedHeader = false;
for (final Map.Entry<String, UpdateResult> entry : results.entrySet()) {
if (!entry.getValue().updates.isEmpty()) {
if (!printedHeader) {
getLog().info("");
if (this.dryRun) {
getLog().info("The following features could be updated:");
} else {
getLog().info("The following features are updated:");
}
printedHeader = true;
}
getLog().info("");
getLog().info("Feature " + entry.getKey());
for (final ArtifactUpdate update : entry.getValue().updates) {
final String left = " " + update.artifact.getId().toMvnId() + "...";
final String right = " -> " + update.newVersion;
if (right.length() + left.length() > INFO_PAD_SIZE) {
getLog().info(left);
getLog().info(StringUtils.leftPad(right, INFO_PAD_SIZE));
} else {
getLog().info(StringUtils.rightPad(left, INFO_PAD_SIZE - right.length(), ".") + right);
}
}
if (!entry.getValue().propertyUpdates.isEmpty()) {
getLog().info(" The following properties in the pom should be updated:");
for (final Map.Entry<String, String> prop :
entry.getValue().propertyUpdates.entrySet()) {
final String left = " Property '" + prop.getKey() + "' to ...";
final String right = prop.getValue();
if (right.length() + left.length() > INFO_PAD_SIZE) {
getLog().info(left);
getLog().info(StringUtils.leftPad(right, INFO_PAD_SIZE));
} else {
getLog().info(StringUtils.rightPad(left, INFO_PAD_SIZE - right.length(), ".") + right);
}
}
}
}
}
if (!globalPropertyUpdates.isEmpty()) {
getLog().info("Update summary for properties in the pom:");
for (final Map.Entry<String, Set<String>> entry : globalPropertyUpdates.entrySet()) {
if (entry.getValue().size() > 1) {
throw new MojoExecutionException("Inconsistent use of version property " + entry.getKey()
+ ". Different version updates available: " + entry.getValue());
}
final String value = entry.getValue().iterator().next();
final Object oldValue = this.project.getProperties().get(entry.getKey());
if (oldValue == null) {
throw new MojoExecutionException("Property '" + entry.getKey() + "' is not defined in POM");
}
getLog().info(" Please update property '" + entry.getKey() + "' from " + oldValue + " to " + value);
}
}
}