From f612429d111af6fba58bb047fed44e054bcb6d9d Mon Sep 17 00:00:00 2001 From: Michael Lex Date: Thu, 1 May 2014 14:19:33 +0200 Subject: [PATCH] [JENKINS-20392] Fix "Recent History" for merge jobs. To compute the recent-history, jenkins uses a hashmap of branch-names and commit-ids. The bug has two sources: 1) To fill the hashmap, jenkins uses only the branch-name and commit-ids of those commits, that triggered the build. The merge-commits created by jenkins are ignored (see BuildData.java#L129). 2) To calculate the "Recent Changes", jenkins searches for the branch-names of the commit, that was built. But jenkins considers the merge-commit not part of any branch (the call to getRevisionsForSHA1 in PreBuildMerge.java#L93 returns a Revision without associated branches). The patch fixes this bug by 1) including the branches of the current commit in the recent-changes-hashmap and 2) associating the current commit with the correct branch-name. --- .../hudson/plugins/git/extensions/impl/PreBuildMerge.java | 5 ++++- src/main/java/hudson/plugins/git/util/BuildData.java | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/hudson/plugins/git/extensions/impl/PreBuildMerge.java b/src/main/java/hudson/plugins/git/extensions/impl/PreBuildMerge.java index 81df102003..b54a7437b1 100644 --- a/src/main/java/hudson/plugins/git/extensions/impl/PreBuildMerge.java +++ b/src/main/java/hudson/plugins/git/extensions/impl/PreBuildMerge.java @@ -7,6 +7,7 @@ import hudson.plugins.git.GitException; import hudson.plugins.git.GitSCM; import hudson.plugins.git.Revision; +import hudson.plugins.git.Branch; import hudson.plugins.git.UserMergeOptions; import hudson.plugins.git.extensions.GitClientType; import hudson.plugins.git.extensions.GitSCMExtension; @@ -90,7 +91,9 @@ public Revision decorateRevisionToBuild(GitSCM scm, AbstractBuild build, G build.addAction(new MergeRecord(remoteBranchRef,target.getName())); - return new GitUtils(listener,git).getRevisionForSHA1(git.revParse(HEAD)); + Revision mergeRevision = new GitUtils(listener,git).getRevisionForSHA1(git.revParse(HEAD)); + mergeRevision.getBranches().add(new Branch(remoteBranchRef, target)); + return mergeRevision; } @Override diff --git a/src/main/java/hudson/plugins/git/util/BuildData.java b/src/main/java/hudson/plugins/git/util/BuildData.java index 34b2c97433..108bac4572 100644 --- a/src/main/java/hudson/plugins/git/util/BuildData.java +++ b/src/main/java/hudson/plugins/git/util/BuildData.java @@ -131,6 +131,9 @@ public void saveBuild(Build build) { for(Branch branch : build.marked.getBranches()) { buildsByBranchName.put(fixNull(branch.getName()), build); } + for(Branch branch : build.revision.getBranches()) { + buildsByBranchName.put(fixNull(branch.getName()), build); + } } public Build getLastBuildOfBranch(String branch) {