Merge "GroupBundle: allow to switch audits comparision off"
diff --git a/java/com/google/gerrit/server/group/Rebuild.java b/java/com/google/gerrit/server/group/Rebuild.java
index fcf873c..d3d59f8 100644
--- a/java/com/google/gerrit/server/group/Rebuild.java
+++ b/java/com/google/gerrit/server/group/Rebuild.java
@@ -103,7 +103,7 @@
 
       GroupBundle noteDbBundle = bundleFactory.fromNoteDb(repo, uuid);
 
-      List<String> diffs = GroupBundle.compare(reviewDbBundle, noteDbBundle);
+      List<String> diffs = GroupBundle.compareWithAudits(reviewDbBundle, noteDbBundle);
       if (diffs.isEmpty()) {
         return BinaryResult.create("No differences between ReviewDb and NoteDb");
       }
diff --git a/java/com/google/gerrit/server/group/db/GroupBundle.java b/java/com/google/gerrit/server/group/db/GroupBundle.java
index 03bb1fd..5d339c0 100644
--- a/java/com/google/gerrit/server/group/db/GroupBundle.java
+++ b/java/com/google/gerrit/server/group/db/GroupBundle.java
@@ -259,8 +259,18 @@
     return new AutoValue_GroupBundle.Builder().members().memberAudit().byId().byIdAudit();
   }
 
-  public static ImmutableList<String> compare(
+  public static ImmutableList<String> compareWithAudits(
       GroupBundle reviewDbBundle, GroupBundle noteDbBundle) {
+    return compare(reviewDbBundle, noteDbBundle, true);
+  }
+
+  public static ImmutableList<String> compareWithoutAudits(
+      GroupBundle reviewDbBundle, GroupBundle noteDbBundle) {
+    return compare(reviewDbBundle, noteDbBundle, false);
+  }
+
+  private static ImmutableList<String> compare(
+      GroupBundle reviewDbBundle, GroupBundle noteDbBundle, boolean compareAudits) {
     // Normalize the ReviewDb bundle to what we expect in NoteDb. This means that values in error
     // messages will not reflect the actual data in ReviewDb, but it will make it easier for humans
     // to see the difference.
@@ -293,7 +303,9 @@
               + ("ReviewDb: " + reviewDbBundle.members() + "\n")
               + ("NoteDb  : " + noteDbBundle.members()));
     }
-    if (!areMemberAuditsConsideredEqual(reviewDbBundle.memberAudit(), noteDbBundle.memberAudit())) {
+    if (compareAudits
+        && !areMemberAuditsConsideredEqual(
+            reviewDbBundle.memberAudit(), noteDbBundle.memberAudit())) {
       result.add(
           "AccountGroupMemberAudits differ\n"
               + ("ReviewDb: " + reviewDbBundle.memberAudit() + "\n")
@@ -305,7 +317,8 @@
               + ("ReviewDb: " + reviewDbBundle.byId() + "\n")
               + ("NoteDb  : " + noteDbBundle.byId()));
     }
-    if (!areByIdAuditsConsideredEqual(reviewDbBundle.byIdAudit(), noteDbBundle.byIdAudit())) {
+    if (compareAudits
+        && !areByIdAuditsConsideredEqual(reviewDbBundle.byIdAudit(), noteDbBundle.byIdAudit())) {
       result.add(
           "AccountGroupByIdAudits differ\n"
               + ("ReviewDb: " + reviewDbBundle.byIdAudit() + "\n")
diff --git a/javatests/com/google/gerrit/acceptance/api/group/GroupRebuilderIT.java b/javatests/com/google/gerrit/acceptance/api/group/GroupRebuilderIT.java
index d331471..6b8eb14 100644
--- a/javatests/com/google/gerrit/acceptance/api/group/GroupRebuilderIT.java
+++ b/javatests/com/google/gerrit/acceptance/api/group/GroupRebuilderIT.java
@@ -214,7 +214,7 @@
   }
 
   private void assertMigratedCleanly(GroupBundle noteDbBundle, GroupBundle expectedReviewDbBundle) {
-    assertThat(GroupBundle.compare(expectedReviewDbBundle, noteDbBundle)).isEmpty();
+    assertThat(GroupBundle.compareWithAudits(expectedReviewDbBundle, noteDbBundle)).isEmpty();
   }
 
   private ImmutableList<CommitInfo> log(GroupInfo g) throws Exception {
diff --git a/javatests/com/google/gerrit/server/group/db/GroupBundleTest.java b/javatests/com/google/gerrit/server/group/db/GroupBundleTest.java
index 6c67877..b449090 100644
--- a/javatests/com/google/gerrit/server/group/db/GroupBundleTest.java
+++ b/javatests/com/google/gerrit/server/group/db/GroupBundleTest.java
@@ -66,7 +66,7 @@
     AccountGroup g2 = new AccountGroup(reviewDbBundle.group());
     g2.setDescription("Hello!");
     GroupBundle noteDbBundle = GroupBundle.builder().source(Source.NOTE_DB).group(g2).build();
-    assertThat(GroupBundle.compare(reviewDbBundle, noteDbBundle))
+    assertThat(GroupBundle.compareWithAudits(reviewDbBundle, noteDbBundle))
         .containsExactly(
             "AccountGroups differ\n"
                 + ("ReviewDb: AccountGroup{name=group, groupId=1, description=null,"
@@ -94,10 +94,31 @@
   }
 
   @Test
+  public void compareIgnoreAudits() throws Exception {
+    GroupBundle reviewDbBundle = newBundle().source(Source.REVIEW_DB).build();
+    AccountGroup group = new AccountGroup(reviewDbBundle.group());
+
+    AccountGroupMember member =
+        new AccountGroupMember(new AccountGroupMember.Key(new Account.Id(1), group.getId()));
+    AccountGroupMemberAudit memberAudit =
+        new AccountGroupMemberAudit(member, new Account.Id(2), ts);
+    AccountGroupById byId =
+        new AccountGroupById(
+            new AccountGroupById.Key(group.getId(), new AccountGroup.UUID("subgroup-2")));
+    AccountGroupByIdAud byIdAudit = new AccountGroupByIdAud(byId, new Account.Id(3), ts);
+
+    GroupBundle noteDbBundle =
+        newBundle().source(Source.NOTE_DB).memberAudit(memberAudit).byIdAudit(byIdAudit).build();
+
+    assertThat(GroupBundle.compareWithAudits(reviewDbBundle, noteDbBundle)).isNotEmpty();
+    assertThat(GroupBundle.compareWithoutAudits(reviewDbBundle, noteDbBundle)).isEmpty();
+  }
+
+  @Test
   public void compareEqual() throws Exception {
     GroupBundle reviewDbBundle = newBundle().source(Source.REVIEW_DB).build();
     GroupBundle noteDbBundle = newBundle().source(Source.NOTE_DB).build();
-    assertThat(GroupBundle.compare(reviewDbBundle, noteDbBundle)).isEmpty();
+    assertThat(GroupBundle.compareWithAudits(reviewDbBundle, noteDbBundle)).isEmpty();
   }
 
   private GroupBundle.Builder newBundle() {
diff --git a/javatests/com/google/gerrit/server/group/db/GroupRebuilderTest.java b/javatests/com/google/gerrit/server/group/db/GroupRebuilderTest.java
index bf97083..51cf987 100644
--- a/javatests/com/google/gerrit/server/group/db/GroupRebuilderTest.java
+++ b/javatests/com/google/gerrit/server/group/db/GroupRebuilderTest.java
@@ -592,7 +592,7 @@
   }
 
   private void assertMigratedCleanly(GroupBundle noteDbBundle, GroupBundle expectedReviewDbBundle) {
-    assertThat(GroupBundle.compare(expectedReviewDbBundle, noteDbBundle)).isEmpty();
+    assertThat(GroupBundle.compareWithAudits(expectedReviewDbBundle, noteDbBundle)).isEmpty();
   }
 
   private AccountGroup newGroup(String name) {