package hudson.plugins.promoted_builds; import hudson.Extension; import hudson.Util; import hudson.model.Item; import hudson.model.Job; import hudson.model.listeners.ItemListener; import java.io.File; import java.io.FileFilter; import java.util.logging.Level; import java.util.logging.Logger; /** * When a job is copied, copy over promotion definitions as well. * * @author Alan.Harder@Sun.com */ @Extension public class CopyListener extends ItemListener { /** * Copy promotion definitions from existing job. */ @Override public void onCopied(Item src, Item item) { JobPropertyImpl prop; if (src instanceof Job && (prop = (JobPropertyImpl)((Job)src).getProperty(JobPropertyImpl.class)) != null) { File[] subdirs = ((JobPropertyImpl)prop).getRootDir().listFiles(new FileFilter() { public boolean accept(File child) { return child.isDirectory(); } }); if (subdirs != null) { prop = (JobPropertyImpl)((Job)item).getProperty(JobPropertyImpl.class); for (File subdir : subdirs) try { Util.copyFile(new File(subdir, "config.xml"), new File(prop.getRootDirFor(subdir.getName()), "config.xml")); } catch (Exception e) { Logger.getLogger(CopyListener.class.getName()).log(Level.WARNING, "Failed to copy/load promotion " + subdir + " into new job", e); } // Trigger loading of these files prop.setOwner(prop.getOwner()); } } } }