提交 63186180 编写于 作者: D Daniel Beck

[FIX JENKINS-27694] Update dynamically loaded plugins' Downloadables

上级 b6bff4f2
...@@ -25,8 +25,11 @@ package hudson.model; ...@@ -25,8 +25,11 @@ package hudson.model;
import hudson.Extension; import hudson.Extension;
import hudson.ExtensionList; import hudson.ExtensionList;
import hudson.ExtensionListListener;
import hudson.ExtensionPoint; import hudson.ExtensionPoint;
import hudson.ProxyConfiguration; import hudson.ProxyConfiguration;
import hudson.init.InitMilestone;
import hudson.init.Initializer;
import hudson.util.FormValidation; import hudson.util.FormValidation;
import hudson.util.FormValidation.Kind; import hudson.util.FormValidation.Kind;
import hudson.util.QuotedStringTokenizer; import hudson.util.QuotedStringTokenizer;
...@@ -37,6 +40,7 @@ import java.io.IOException; ...@@ -37,6 +40,7 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.URL; import java.net.URL;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import jenkins.model.DownloadSettings; import jenkins.model.DownloadSettings;
import jenkins.model.Jenkins; import jenkins.model.Jenkins;
...@@ -194,6 +198,45 @@ public class DownloadService extends PageDecorator { ...@@ -194,6 +198,45 @@ public class DownloadService extends PageDecorator {
} }
} }
/**
* This installs itself as a listener to changes to the Downloadable extension list and will download the metadata
* for any newly added Downloadables.
*/
@Restricted(NoExternalUse.class)
public static class DownloadableListener extends ExtensionListListener {
/**
* Install this listener to the Downloadable extension list after all extensions have been loaded; we only
* care about those that are added after initialization
*/
@Initializer(after = InitMilestone.EXTENSIONS_AUGMENTED)
public static void installListener() {
ExtensionList.lookup(Downloadable.class).addListener(new DownloadableListener());
}
/**
* Look for Downloadables that have no data, and update them.
*/
@Override
public void onChange() {
for (Downloadable d : Downloadable.all()) {
TextFile f = d.getDataFile();
if (f == null || !f.exists()) {
LOGGER.log(Level.FINE, "Updating metadata for " + d.getId());
try {
d.updateNow();
} catch (IOException e) {
LOGGER.log(Level.WARNING, "Failed to update metadata for " + d.getId(), e);
}
} else {
LOGGER.log(Level.FINER, "Skipping update of metadata for " + d.getId());
}
}
}
private static final Logger LOGGER = Logger.getLogger(DownloadableListener.class.getName());
}
/** /**
* Represents a periodically updated JSON data file obtained from a remote URL. * Represents a periodically updated JSON data file obtained from a remote URL.
* *
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册