diff mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java @ 90:5d9c34cb543a Darjeeling-5.0.x

improving merge commits reporting
author Pavel.Sher
date Wed, 09 Dec 2009 01:28:10 +0300
parents 948a35b430e1
children 6c1cff1f61cc
line wrap: on
line diff
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java	Tue Dec 08 20:21:08 2009 +0300
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java	Wed Dec 09 01:28:10 2009 +0300
@@ -103,14 +103,30 @@
     for (ChangeSet cur : changeSets) {
       if (cur.getId().equals(fromId)) continue; // skip already reported changeset
 
-      st.setFromRevId(prev.getId());
-      st.setToRevId(cur.getId());
-      List<ModifiedFile> modifiedFiles = st.execute();
+      String prevId = prev.getId();
+      List<ChangeSetRevision> curParents = cur.getParents();
+      boolean merge = curParents != null && curParents.size() > 1;
+      if (curParents != null && !merge) {
+        prevId = curParents.get(0).getId();
+      }
+
+      List<ModifiedFile> modifiedFiles = new ArrayList<ModifiedFile>();
+      if (merge) {
+        modifiedFiles.addAll(computeModifiedFilesForMergeCommit(settings, cur));
+      } else {
+        st.setFromRevId(prevId);
+        st.setToRevId(cur.getId());
+        modifiedFiles = st.execute();
+      }
+
       // changeset full version will be set into VcsChange structure and
       // stored in database (note that getContent method will be invoked with this version)
       List<VcsChange> files = toVcsChanges(modifiedFiles, prev.getFullVersion(), cur.getFullVersion(), includeRule);
-      if (files.isEmpty()) continue;
-      ModificationData md = new ModificationData(cur.getTimestamp(), files, cur.getSummary(), cur.getUser(), root, cur.getFullVersion(), cur.getId());
+      if (files.isEmpty() && !merge) continue;
+      ModificationData md = new ModificationData(cur.getTimestamp(), files, cur.getDescription(), cur.getUser(), root, cur.getFullVersion(), cur.getId());
+      if (merge) {
+        md.setCanBeIgnored(false);
+      }
       result.add(md);
       prev = cur;
     }
@@ -118,6 +134,14 @@
     return result;
   }
 
+  private Collection<ModifiedFile> computeModifiedFilesForMergeCommit(final Settings settings, final ChangeSet cur) throws VcsException {
+    if (!cur.containsFiles()) return Collections.emptyList();
+
+    ChangedFilesCommand cfc = new ChangedFilesCommand(settings);
+    cfc.setRevId(cur.getId());
+    return cfc.execute();
+  }
+
   private List<VcsChange> toVcsChanges(final List<ModifiedFile> modifiedFiles, String prevVer, String curVer, final IncludeRule includeRule) {
     List<VcsChange> files = new ArrayList<VcsChange>();
     for (ModifiedFile mf: modifiedFiles) {