mirror of
https://github.com/jenkinsci/jenkins.git
synced 2026-10-30 13:05:19 +00:00
Separate original and downstream dependency errors
Nobody understands 'fix this plugin first', so separate those from the actual issues that need fixing.
This commit is contained in:
1 parent
b550c33301
commit
d2b81b8ad1
3 files changed
+70
-18
No files matched your search
@@ -37,6 +37,9 @@ import hudson.model.UpdateCenter;
|
||||
import hudson.model.UpdateSite;
|
||||
import hudson.util.VersionNumber;
|
||||
import org.jvnet.localizer.ResourceBundleHolder;
|
||||
import org.kohsuke.accmod.Restricted;
|
||||
import org.kohsuke.accmod.restrictions.DoNotUse;
|
||||
import org.kohsuke.accmod.restrictions.NoExternalUse;
|
||||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.HttpResponses;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
@@ -66,10 +69,12 @@ import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.jar.Manifest;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static java.util.logging.Level.WARNING;
|
||||
import static org.apache.commons.io.FilenameUtils.getBaseName;
|
||||
@@ -159,10 +164,34 @@ public class PluginWrapper implements Comparable<PluginWrapper>, ModelObject {
|
||||
private final List<Dependency> optionalDependencies;
|
||||
|
||||
public List<String> getDependencyErrors() {
|
||||
return Collections.unmodifiableList(dependencyErrors);
|
||||
return Collections.unmodifiableList(new ArrayList<>(dependencyErrors.keySet()));
|
||||
}
|
||||
|
||||
private final transient List<String> dependencyErrors = new ArrayList<>();
|
||||
@Restricted(NoExternalUse.class) // Jelly use
|
||||
public List<String> getOriginalDependencyErrors() {
|
||||
Predicate<Map.Entry<String, Boolean>> p = Map.Entry::getValue;
|
||||
return dependencyErrors.entrySet().stream().filter(p.negate()).map(Map.Entry::getKey).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Restricted(NoExternalUse.class) // Jelly use
|
||||
public boolean hasOriginalDependencyErrors() {
|
||||
return !getOriginalDependencyErrors().isEmpty();
|
||||
}
|
||||
|
||||
@Restricted(NoExternalUse.class) // Jelly use
|
||||
public List<String> getDerivedDependencyErrors() {
|
||||
return dependencyErrors.entrySet().stream().filter(Map.Entry::getValue).map(Map.Entry::getKey).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Restricted(NoExternalUse.class) // Jelly use
|
||||
public boolean hasDerivedDependencyErrors() {
|
||||
return !getDerivedDependencyErrors().isEmpty();
|
||||
}
|
||||
|
||||
/**
|
||||
* A String error message, and a boolean indicating whether it's an original error (false) or downstream from an original one (true)
|
||||
*/
|
||||
private final transient Map<String, Boolean> dependencyErrors = new HashMap<>();
|
||||
|
||||
/**
|
||||
* Is this plugin bundled in jenkins.war?
|
||||
@@ -571,7 +600,7 @@ public class PluginWrapper implements Comparable<PluginWrapper>, ModelObject {
|
||||
} else {
|
||||
VersionNumber actualVersion = Jenkins.getVersion();
|
||||
if (actualVersion.isOlderThan(new VersionNumber(requiredCoreVersion))) {
|
||||
dependencyErrors.add(Messages.PluginWrapper_obsoleteCore(Jenkins.getVersion().toString(), requiredCoreVersion));
|
||||
dependencyErrors.put(Messages.PluginWrapper_obsoleteCore(Jenkins.getVersion().toString(), requiredCoreVersion), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -581,21 +610,21 @@ public class PluginWrapper implements Comparable<PluginWrapper>, ModelObject {
|
||||
if (dependency == null) {
|
||||
PluginWrapper failedDependency = NOTICE.getPlugin(d.shortName);
|
||||
if (failedDependency != null) {
|
||||
dependencyErrors.add(Messages.PluginWrapper_failed_to_load_dependency(failedDependency.getLongName(), failedDependency.getVersion()));
|
||||
dependencyErrors.put(Messages.PluginWrapper_failed_to_load_dependency(failedDependency.getLongName(), failedDependency.getVersion()), true);
|
||||
break;
|
||||
} else {
|
||||
dependencyErrors.add(Messages.PluginWrapper_missing(d.shortName, d.version));
|
||||
dependencyErrors.put(Messages.PluginWrapper_missing(d.shortName, d.version), false);
|
||||
}
|
||||
} else {
|
||||
if (dependency.isActive()) {
|
||||
if (isDependencyObsolete(d, dependency)) {
|
||||
dependencyErrors.add(Messages.PluginWrapper_obsolete(dependency.getLongName(), dependency.getVersion(), d.version));
|
||||
dependencyErrors.put(Messages.PluginWrapper_obsolete(dependency.getLongName(), dependency.getVersion(), d.version), false);
|
||||
}
|
||||
} else {
|
||||
if (isDependencyObsolete(d, dependency)) {
|
||||
dependencyErrors.add(Messages.PluginWrapper_disabledAndObsolete(dependency.getLongName(), dependency.getVersion(), d.version));
|
||||
dependencyErrors.put(Messages.PluginWrapper_disabledAndObsolete(dependency.getLongName(), dependency.getVersion(), d.version), false);
|
||||
} else {
|
||||
dependencyErrors.add(Messages.PluginWrapper_disabled(dependency.getLongName()));
|
||||
dependencyErrors.put(Messages.PluginWrapper_disabled(dependency.getLongName()), false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -606,7 +635,7 @@ public class PluginWrapper implements Comparable<PluginWrapper>, ModelObject {
|
||||
PluginWrapper dependency = parent.getPlugin(d.shortName);
|
||||
if (dependency != null && dependency.isActive()) {
|
||||
if (isDependencyObsolete(d, dependency)) {
|
||||
dependencyErrors.add(Messages.PluginWrapper_obsolete(dependency.getLongName(), dependency.getVersion(), d.version));
|
||||
dependencyErrors.put(Messages.PluginWrapper_obsolete(dependency.getLongName(), dependency.getVersion(), d.version), false);
|
||||
} else {
|
||||
dependencies.add(d);
|
||||
}
|
||||
@@ -616,7 +645,7 @@ public class PluginWrapper implements Comparable<PluginWrapper>, ModelObject {
|
||||
NOTICE.addPlugin(this);
|
||||
StringBuilder messageBuilder = new StringBuilder();
|
||||
messageBuilder.append(Messages.PluginWrapper_failed_to_load_plugin(getLongName(), getVersion())).append(System.lineSeparator());
|
||||
for (Iterator<String> iterator = dependencyErrors.iterator(); iterator.hasNext(); ) {
|
||||
for (Iterator<String> iterator = dependencyErrors.keySet().iterator(); iterator.hasNext(); ) {
|
||||
String dependencyError = iterator.next();
|
||||
messageBuilder.append(" - ").append(dependencyError);
|
||||
if (iterator.hasNext()) {
|
||||
@@ -750,6 +779,11 @@ public class PluginWrapper implements Comparable<PluginWrapper>, ModelObject {
|
||||
return !plugins.isEmpty();
|
||||
}
|
||||
|
||||
@Restricted(DoNotUse.class) // Jelly
|
||||
public boolean hasAnyDerivedDependencyErrors() {
|
||||
return plugins.values().stream().anyMatch(PluginWrapper::hasDerivedDependencyErrors);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return Messages.PluginWrapper_PluginWrapperAdministrativeMonitor_DisplayName();
|
||||
|
||||
Reference in new issue
Block a user