Allow replication of refs that point to non-commit objects Bug: Issue 15425 Change-Id: I3c5f6fae8bf0c2d2be542aade899392ff95cff04
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/RevisionReader.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/RevisionReader.java index 5718249..a99256f 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/RevisionReader.java +++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/RevisionReader.java
@@ -34,6 +34,7 @@ import org.eclipse.jgit.errors.LargeObjectException; import org.eclipse.jgit.errors.MissingObjectException; import org.eclipse.jgit.errors.RepositoryNotFoundException; +import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectLoader; import org.eclipse.jgit.lib.Ref; @@ -73,6 +74,13 @@ totalRefSize += commitLoader.getSize(); verifySize(totalRefSize, commitLoader); + if (commitLoader.getType() != Constants.OBJ_COMMIT) { + repLog.trace( + "Ref %s for project %s points to an object type %d", + refName, project, commitLoader.getType()); + return Optional.empty(); + } + RevCommit commit = RevCommit.parse(commitLoader.getCachedBytes()); RevisionObjectData commitRev = new RevisionObjectData(commit.getType(), commitLoader.getCachedBytes());
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/pull/RevisionReaderIT.java b/src/test/java/com/googlesource/gerrit/plugins/replication/pull/RevisionReaderIT.java index d1a4c85..fdd63d2 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/replication/pull/RevisionReaderIT.java +++ b/src/test/java/com/googlesource/gerrit/plugins/replication/pull/RevisionReaderIT.java
@@ -18,6 +18,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.truth.Truth8; import com.google.gerrit.acceptance.LightweightPluginDaemonTest; import com.google.gerrit.acceptance.PushOneCommit.Result; import com.google.gerrit.acceptance.TestPlugin; @@ -29,6 +30,7 @@ import com.google.gerrit.extensions.api.changes.ReviewInput.CommentInput; import com.google.gerrit.extensions.client.Comment; import com.google.gerrit.extensions.config.FactoryModule; +import com.google.gerrit.server.notedb.Sequences; import com.google.inject.Scopes; import com.googlesource.gerrit.plugins.replication.ReplicationConfig; import com.googlesource.gerrit.plugins.replication.ReplicationFileBasedConfig; @@ -104,6 +106,15 @@ assertThat(blobObject.getContent()).isNotEmpty(); } + @Test + public void shouldNotReadRefsSequences() throws Exception { + createChange().assertOkStatus(); + Optional<RevisionData> revisionDataOption = + objectUnderTest.read(allProjects, RefNames.REFS_SEQUENCES + Sequences.NAME_CHANGES); + + Truth8.assertThat(revisionDataOption).isEmpty(); + } + private CommentInput createCommentInput( int startLine, int startCharacter, int endLine, int endCharacter, String message) { CommentInput comment = new CommentInput();