changeset 1109:e3fd42482b1b

fix TW-79815: retrieve the changed files with help of hg status command
author pavel.sher
date Mon, 10 Jul 2023 15:42:48 +0200
parents 255677cf31fb
children 153015dd0389 317b39467feb
files mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerHgRepo.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CollectChangesWithRevsets.java
diffstat 2 files changed, 21 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerHgRepo.java	Wed Apr 27 15:11:54 2022 +0200
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ServerHgRepo.java	Mon Jul 10 15:42:48 2023 +0200
@@ -37,6 +37,7 @@
 public class ServerHgRepo extends HgRepo {
 
   public final static HgVersion REVSET_HG_VERSION = new HgVersion(1, 7, 0);
+  public final static HgVersion MERGE_WITHOUT_CHANGED_FILES_VERSION = new HgVersion(5, 2, 0);
   private final CommandSettingsFactory myCommandSettingsFactory;
   private final ServerPluginConfig myConfig;
   protected final MercurialClasspathTemplate myLogTemplate = new MercurialClasspathTemplate("/buildServerResources/log.template", "hg.log.template");
@@ -99,6 +100,12 @@
     return hgVersion.isEqualsOrGreaterThan(REVSET_HG_VERSION);
   }
 
+  // mercurial > 5.1 no longer reports changed files for the merge commits, see https://youtrack.jetbrains.com/issue/TW-79815
+  public boolean supportsChangedFilesForMerges() throws VcsException {
+    HgVersion hgVersion = getHgVersion();
+    return hgVersion.isLessThan(MERGE_WITHOUT_CHANGED_FILES_VERSION);
+  }
+
   private HgVersion getHgVersion() throws VcsException {
     if (myContext != null)
       return myContext.getHgVersion(this);
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CollectChangesWithRevsets.java	Wed Apr 27 15:11:54 2022 +0200
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CollectChangesWithRevsets.java	Mon Jul 10 15:42:48 2023 +0200
@@ -52,9 +52,22 @@
         revsets.append(" + ").append(from);
       }
     }
-    return myRepo.log(myRoot)
+    List<ChangeSet> result = myRepo.log(myRoot)
             .showCommitsFromAllBranches()
             .withRevsets(revsets.toString())
             .call();
+
+    if (!myRepo.supportsChangedFilesForMerges()) {
+      for (ChangeSet cs: result) {
+        if (cs.getParents().size() > 1) {
+          // new version of Mercurial does not include merge commit changed files into the log
+          // let's fetch the files with a separate command (https://youtrack.jetbrains.com/issue/TW-79815)
+          final List<FileStatus> files = myRepo.status().fromRevision(cs.getParents().get(0).getId()).toRevision(cs.getId()).call();
+          cs.setModifiedFiles(files);
+        }
+      }
+    }
+
+    return result;
   }
 }