Add support for deleting change message
This commit adds a new REST endpoint to support deletion of a change message, which is similar to Icaeb3c24f. The deletion for NoteDb is implemented by rewriting the change meta branch, which will replace the whole change message with a sentence like "Change message removed by:... ". Messages like "(N comments)" and quotes will also be replaced as they are part of a change message. To be able to delete a change message, a user must hold the "Administrate Server" global capability. Change-Id: I439b00fcf03a629d9a33c401cf4d8cdd49705ace
This commit is contained in:
@@ -33,6 +33,7 @@ import com.google.common.base.Strings;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.jimfs.Jimfs;
|
||||
import com.google.common.primitives.Chars;
|
||||
import com.google.gerrit.acceptance.AcceptanceTestRequestScope.Context;
|
||||
@@ -63,6 +64,7 @@ import com.google.gerrit.extensions.client.ProjectWatchInfo;
|
||||
import com.google.gerrit.extensions.client.SubmitType;
|
||||
import com.google.gerrit.extensions.common.ChangeInfo;
|
||||
import com.google.gerrit.extensions.common.ChangeType;
|
||||
import com.google.gerrit.extensions.common.CommentInfo;
|
||||
import com.google.gerrit.extensions.common.DiffInfo;
|
||||
import com.google.gerrit.extensions.common.EditInfo;
|
||||
import com.google.gerrit.extensions.restapi.BinaryResult;
|
||||
@@ -76,6 +78,7 @@ import com.google.gerrit.reviewdb.client.Account;
|
||||
import com.google.gerrit.reviewdb.client.AccountGroup;
|
||||
import com.google.gerrit.reviewdb.client.BooleanProjectConfig;
|
||||
import com.google.gerrit.reviewdb.client.Branch;
|
||||
import com.google.gerrit.reviewdb.client.Change;
|
||||
import com.google.gerrit.reviewdb.client.PatchSet;
|
||||
import com.google.gerrit.reviewdb.client.Project;
|
||||
import com.google.gerrit.reviewdb.client.RefNames;
|
||||
@@ -148,6 +151,7 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -167,6 +171,7 @@ import org.eclipse.jgit.lib.PersonIdent;
|
||||
import org.eclipse.jgit.lib.Ref;
|
||||
import org.eclipse.jgit.lib.Repository;
|
||||
import org.eclipse.jgit.revwalk.RevCommit;
|
||||
import org.eclipse.jgit.revwalk.RevSort;
|
||||
import org.eclipse.jgit.revwalk.RevTree;
|
||||
import org.eclipse.jgit.revwalk.RevWalk;
|
||||
import org.eclipse.jgit.transport.FetchResult;
|
||||
@@ -1695,4 +1700,29 @@ public abstract class AbstractDaemonTest {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected List<RevCommit> getChangeMetaCommitsInReverseOrder(Change.Id changeId)
|
||||
throws IOException {
|
||||
try (Repository repo = repoManager.openRepository(project);
|
||||
RevWalk revWalk = new RevWalk(repo)) {
|
||||
revWalk.sort(RevSort.TOPO);
|
||||
revWalk.sort(RevSort.REVERSE);
|
||||
Ref metaRef = repo.exactRef(RefNames.changeMetaRef(changeId));
|
||||
revWalk.markStart(revWalk.parseCommit(metaRef.getObjectId()));
|
||||
return Lists.newArrayList(revWalk);
|
||||
}
|
||||
}
|
||||
|
||||
protected List<CommentInfo> getChangeSortedComments(int changeNum) throws Exception {
|
||||
List<CommentInfo> comments = new ArrayList<>();
|
||||
Map<String, List<CommentInfo>> commentsMap = gApi.changes().id(changeNum).comments();
|
||||
for (Map.Entry<String, List<CommentInfo>> e : commentsMap.entrySet()) {
|
||||
for (CommentInfo c : e.getValue()) {
|
||||
c.path = e.getKey(); // Set the comment's path field.
|
||||
comments.add(c);
|
||||
}
|
||||
}
|
||||
comments.sort(Comparator.comparing(c -> c.id));
|
||||
return comments;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user