CreateChange: Store for empty revisions that they do not contain conflicts If a change is created for an empty commit, we know that this revision doesn't contain any conflicts. Hence we can store this information and make it available to callers. Storing conflict information for revisions has been added in change I15e48ba87. In this case ours/theirs in ConflictsInfo is not set, since the revision was not created by performing a Git merge. Not setting ours/theirs when containsConflicts is false, is OK, since change I15e48ba87 already implemented and documented these fields as optional. Bug: Google b/373350443 Release-Notes: skip Change-Id: Icaa5ff613c67efdc5b51a6dd83ea5c0496cb5ddb Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/java/com/google/gerrit/server/git/CodeReviewCommit.java b/java/com/google/gerrit/server/git/CodeReviewCommit.java index 3e4a5f1..2990aa8 100644 --- a/java/com/google/gerrit/server/git/CodeReviewCommit.java +++ b/java/com/google/gerrit/server/git/CodeReviewCommit.java
@@ -172,6 +172,12 @@ this.statusMessage = Optional.ofNullable(statusMessage); } + public void setNoConflicts() { + this.conflicts = + PatchSet.Conflicts.create( + Optional.empty(), Optional.empty(), /* containsConflicts= */ false); + } + public void setConflicts( ObjectId ours, ObjectId theirs, @Nullable Set<String> filesWithGitConflicts) { if (filesWithGitConflicts != null && !filesWithGitConflicts.isEmpty()) {
diff --git a/java/com/google/gerrit/server/restapi/change/CreateChange.java b/java/com/google/gerrit/server/restapi/change/CreateChange.java index bc15148..57be320 100644 --- a/java/com/google/gerrit/server/restapi/change/CreateChange.java +++ b/java/com/google/gerrit/server/restapi/change/CreateChange.java
@@ -707,9 +707,12 @@ ObjectId treeId = mergeTip == null ? emptyTreeId(oi) : mergeTip.getTree().getId(); logger.atFine().log("Tree ID of empty commit: %s", treeId.name()); List<RevCommit> parents = mergeTip == null ? ImmutableList.of() : ImmutableList.of(mergeTip); - return rw.parseCommit( - CommitUtil.createCommitWithTree( - oi, authorIdent, committerIdent, parents, commitMessage, treeId)); + CodeReviewCommit commit = + rw.parseCommit( + CommitUtil.createCommitWithTree( + oi, authorIdent, committerIdent, parents, commitMessage, treeId)); + commit.setNoConflicts(); + return commit; } private static CodeReviewCommit createCommitWithSuppliedTree(
diff --git a/javatests/com/google/gerrit/acceptance/rest/change/CreateChangeIT.java b/javatests/com/google/gerrit/acceptance/rest/change/CreateChangeIT.java index 35874e9..7704b1f 100644 --- a/javatests/com/google/gerrit/acceptance/rest/change/CreateChangeIT.java +++ b/javatests/com/google/gerrit/acceptance/rest/change/CreateChangeIT.java
@@ -224,11 +224,12 @@ assertThat(messages).hasSize(1); assertThat(Iterables.getOnlyElement(messages).message).isEqualTo("Uploaded patch set 1."); - // Verify that no conflicts information is set (conflicts information is only set for merge - // commits) RevisionInfo currentRevision = gApi.changes().id(info.id).get(CURRENT_REVISION, CURRENT_COMMIT).getCurrentRevision(); - assertThat(currentRevision.conflicts).isNull(); + assertThat(currentRevision.conflicts).isNotNull(); + assertThat(currentRevision.conflicts.containsConflicts).isFalse(); + assertThat(currentRevision.conflicts.ours).isNull(); + assertThat(currentRevision.conflicts.theirs).isNull(); } @Test