changeset 474:6b447cd40492 Faradi-7.1.x

TW-10076 allow to ignore commits where all files excluded by checkout rules Since 7.1 hg-plugin marks empty commits as cannot be ignored. We do that in order to show empty commits which close the branch. Since hg log doesn't contain any signs that commit closes branch, hg-plugin detects it by checking if commit has no changed files. We did that after applying checkout rules, as a result some commits with all files excluded were marked as cannot be ignored which is wrong. Now hg-plugin checks if commit is empty before applying checkout rules.
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Mon, 10 Sep 2012 20:02:07 +0400
parents 6d4ce78234c5
children 797fadbf2a9b aa19481a91c3
files mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupportTest.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/UnrelatedResitoriesTest.java mercurial-tests/testData/README mercurial-tests/testData/rep2/hg/dirstate mercurial-tests/testData/rep2/hg/store/00changelog.i mercurial-tests/testData/rep2/hg/store/00manifest.i mercurial-tests/testData/rep2/hg/store/data/.hgtags.i mercurial-tests/testData/rep2/hg/store/fncache mercurial-tests/testData/rep2/hg/store/undo mercurial-tests/testData/rep2/hg/undo.dirstate
diffstat 11 files changed, 37 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java	Fri Sep 07 16:50:49 2012 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java	Mon Sep 10 20:02:07 2012 +0400
@@ -614,16 +614,16 @@
     for (ChangeSetRevision parent : parents) {
       result.addParentRevision(parent.getId());
     }
-    setCanBeIgnored(result);
+    setCanBeIgnored(result, cset);
     return result;
   }
 
 
-  private void setCanBeIgnored(@NotNull ModificationData md) {
+  private void setCanBeIgnored(@NotNull ModificationData md, @NotNull ChangeSet cset) {
     if (md.getParentRevisions().size() > 1) {
       //don't ignore merge commits
       md.setCanBeIgnored(false);
-    } else if (md.getChangeCount() == 0) {
+    } else if (cset.getModifiedFiles().isEmpty()) {
       //don't ignore empty commits
       md.setCanBeIgnored(false);
     }
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupportTest.java	Fri Sep 07 16:50:49 2012 +0400
+++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupportTest.java	Mon Sep 10 20:02:07 2012 +0400
@@ -17,6 +17,7 @@
 
 import com.intellij.execution.configurations.GeneralCommandLine;
 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.*;
+import jetbrains.buildServer.util.TestFor;
 import jetbrains.buildServer.vcs.*;
 import jetbrains.buildServer.vcs.impl.VcsRootImpl;
 import junit.framework.Assert;
@@ -279,6 +280,25 @@
   }
 
 
+  @TestFor(issues = "TW-10076")
+  public void should_allow_to_ignore_changes_where_all_files_excluded() throws Exception {
+    VcsRootImpl root = createVcsRoot(myRep2Path);
+    List<ModificationData> changes = myVcs.collectChanges(root, "43023ea3f13b", "a2672ee13212", new CheckoutRules("-:.hgtags"));
+    assertEquals(changes.size(), 1);
+    assertTrue(changes.get(0).isCanBeIgnored());
+  }
+
+
+  @TestFor(issues = "TW-10076")
+  public void should_not_allow_to_ignore_close_branch_commits() throws Exception {
+    VcsRootImpl root = createVcsRoot(myRep2Path);
+    List<ModificationData> changes = myVcs.collectChanges(root, "df04faa7575a", "43023ea3f13b", CheckoutRules.DEFAULT);
+    assertEquals(changes.size(), 2);
+    assertEquals(changes.get(1).getChangeCount(), 0);
+    assertFalse(changes.get(1).isCanBeIgnored());
+  }
+
+
   public void test_tag_with_specified_username() throws IOException, VcsException {
     final String customUserForTag = "John Doe <john@some.org>";
     File repository = copyRepository(myTempFiles, simpleRepo());
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/UnrelatedResitoriesTest.java	Fri Sep 07 16:50:49 2012 +0400
+++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/UnrelatedResitoriesTest.java	Mon Sep 10 20:02:07 2012 +0400
@@ -25,7 +25,7 @@
 @Test
 public class UnrelatedResitoriesTest {
 
-  private final static String CURRENT_VERSION_OF_NEW_REPO = "df04faa7575a";
+  private final static String CURRENT_VERSION_OF_NEW_REPO = "a2672ee13212";
   private MercurialVcsSupport myVcs;
   private TempFiles myTempFiles;
   private File myRepositoryLocation;
--- a/mercurial-tests/testData/README	Fri Sep 07 16:50:49 2012 +0400
+++ b/mercurial-tests/testData/README	Mon Sep 10 20:02:07 2012 +0400
@@ -24,8 +24,14 @@
 
 rep2 history:
 
-@    18:df04faa7575a merge personal-branch tip
+o    21:a2672ee13212 Tag for test //add tag t1 on 43023ea3f13b
+|
+o    20:43023ea3f13b  Merge closed personal-branch
 |\
+| o  19:ca64c523f54c Close personal-branch
+| |
+@ |  18:df04faa7575a merge personal-branch tip
+|\|
 | o  17:9ec402c74298 another change to file.txt in personal-branch (personal-branch)
 | |
 o |  16:505c5b9d01e6 change file.txt back
Binary file mercurial-tests/testData/rep2/hg/dirstate has changed
Binary file mercurial-tests/testData/rep2/hg/store/00changelog.i has changed
Binary file mercurial-tests/testData/rep2/hg/store/00manifest.i has changed
Binary file mercurial-tests/testData/rep2/hg/store/data/.hgtags.i has changed
--- a/mercurial-tests/testData/rep2/hg/store/fncache	Fri Sep 07 16:50:49 2012 +0400
+++ b/mercurial-tests/testData/rep2/hg/store/fncache	Mon Sep 10 20:02:07 2012 +0400
@@ -1,10 +1,11 @@
-data/file.txt.i
+data/dir4/file4.txt.i
 data/dir3/file3.txt.i
 data/dir1/file1.txt.i
+data/file.txt.i
+data/.hgtags.i
+data/dir4/file42.txt.i
+data/dir5/file5.txt.i
 data/dir2/file2.txt.i
-data/dir4/file4.txt.i
+data/dir4/file43.txt.i
 data/dir4/file41.txt.i
-data/dir4/file42.txt.i
-data/dir4/file43.txt.i
-data/dir5/file5.txt.i
 data/dir6/file6.txt.i
Binary file mercurial-tests/testData/rep2/hg/store/undo has changed
Binary file mercurial-tests/testData/rep2/hg/undo.dirstate has changed