package hudson.plugins.jira.selector.perforce; import java.util.List; import java.util.Set; import java.util.logging.Logger; import org.jenkinsci.plugins.p4.changes.P4ChangeEntry; import org.kohsuke.stapler.DataBoundConstructor; import com.perforce.p4java.core.IFix; import hudson.Extension; import hudson.model.Descriptor; import hudson.model.Run; import hudson.model.TaskListener; import hudson.plugins.jira.JiraSite; import hudson.plugins.jira.Messages; import hudson.plugins.jira.RunScmChangeExtractor; import hudson.plugins.jira.selector.AbstractIssueSelector; import hudson.scm.ChangeLogSet; import hudson.scm.ChangeLogSet.Entry; /** * Job selector for Perforce Software SCM plugin (P4) * * @author Jacek Tomaka * @since 2.3 */ public class P4JobIssueSelector extends JobIssueSelector { private static final Logger LOGGER = Logger.getLogger(P4JobIssueSelector.class.getName()); @Extension(optional = true) public static final class DescriptorImpl extends Descriptor<AbstractIssueSelector> { @Override public String getDisplayName() { return Messages.P4JobIssueSelector_DisplayName(); } } @DataBoundConstructor public P4JobIssueSelector() { } @Override protected void addJobIdsFromChangeLog(Run<?, ?> build, JiraSite site, TaskListener listener, Set<String> issueIds) { getLogger().finer("Searching for JIRA issues in perforce jobs in " + build); for (ChangeLogSet<? extends Entry> set : RunScmChangeExtractor.getChanges(build)) { for (Entry change : set) { getLogger().fine("Looking for JIRA IDs as Perforce Jobs in " + change.getMsg()); if (P4ChangeEntry.class.isAssignableFrom(change.getClass())) { P4ChangeEntry p4ChangeEntry = (P4ChangeEntry) change; List<IFix> jobs = p4ChangeEntry.getJobs(); if (jobs != null) { for (IFix job : jobs) { String jobId = job.getJobId(); if (issueIds.add(jobId)) { getLogger().finer("Added perforce job id " + jobId + " from build " + build); } } } } } } } @Override protected Logger getLogger() { return LOGGER; } }