diff --git a/core/src/main/java/hudson/maven/MavenModuleSetBuild.java b/core/src/main/java/hudson/maven/MavenModuleSetBuild.java index 1e61fe7ac1e1e7d25b67197b2df265b6f265220a..c80fe1421cad354d8a7374d60df8742447948ae7 100644 --- a/core/src/main/java/hudson/maven/MavenModuleSetBuild.java +++ b/core/src/main/java/hudson/maven/MavenModuleSetBuild.java @@ -6,6 +6,7 @@ import hudson.FilePath.FileCallable; import hudson.Launcher; import hudson.Util; import hudson.maven.MavenBuild.ProxyImpl2; +import hudson.maven.reporters.MavenFingerprinter; import hudson.model.AbstractBuild; import hudson.model.AbstractProject; import hudson.model.Action; @@ -393,6 +394,14 @@ public final class MavenModuleSetBuild extends AbstractBuild records = new HashMap(); + for (List builds : mmsb.getModuleBuilds().values()) { + for (MavenBuild build : builds) { + FingerprintAction fa = build.getAction(FingerprintAction.class); + if(fa!=null) + records.putAll(fa.getRecords()); + } + } + if(!records.isEmpty()) { + FingerprintMap map = Hudson.getInstance().getFingerprintMap(); + for (Entry e : records.entrySet()) + map.getOrCreate(null, e.getKey(), e.getValue()).add(mmsb); + mmsb.addAction(new FingerprintAction(mmsb,records)); + } + } + private static final long serialVersionUID = 1L; } diff --git a/core/src/main/java/hudson/tasks/Fingerprinter.java b/core/src/main/java/hudson/tasks/Fingerprinter.java index bb3adb948d73585e381bcfd7a3df1e9eef99c6fc..dbb45db3351bcb55f135a456aa88ad8ff68f42fa 100644 --- a/core/src/main/java/hudson/tasks/Fingerprinter.java +++ b/core/src/main/java/hudson/tasks/Fingerprinter.java @@ -244,6 +244,13 @@ public class Fingerprinter extends Publisher implements Serializable { return build; } + /** + * Obtains the raw data. + */ + public Map getRecords() { + return Collections.unmodifiableMap(record); + } + /** * Map from file names of the fingerprinted file to its fingerprint record. */ @@ -283,11 +290,14 @@ public class Fingerprinter extends Publisher implements Serializable { BuildPtr bp = fp.getOriginal(); if(bp==null) continue; // outside Hudson if(bp.is(build)) continue; // we are the owner + AbstractProject job = bp.getJob(); + if(job!=null && job.getParent()==build.getParent()) + continue; // we are the parent of the build owner, that is almost like we are the owner - Integer existing = r.get(bp.getJob()); + Integer existing = r.get(job); if(existing!=null && existing>bp.getNumber()) continue; // the record in the map is already up to date - r.put(bp.getJob(),bp.getNumber()); + r.put(job,bp.getNumber()); } return r;