Merge changes Idf5a3bed,Ia27043f7
* changes: CommitValidators: uniformize argument ordering for creation methods ReceiveCommits: provide banned commits to forReceiveCommits
This commit is contained in:
@@ -552,8 +552,6 @@ public class ChangeInserter implements InsertChangeOp {
|
||||
return;
|
||||
}
|
||||
|
||||
PermissionBackend.ForRef perm =
|
||||
permissionBackend.user(ctx.getUser()).project(ctx.getProject()).ref(refName);
|
||||
try {
|
||||
try (CommitReceivedEvent event =
|
||||
new CommitReceivedEvent(
|
||||
@@ -565,7 +563,7 @@ public class ChangeInserter implements InsertChangeOp {
|
||||
ctx.getIdentifiedUser())) {
|
||||
commitValidatorsFactory
|
||||
.forGerritCommits(
|
||||
perm,
|
||||
permissionBackend.user(ctx.getUser()).project(ctx.getProject()),
|
||||
new Branch.NameKey(ctx.getProject(), refName),
|
||||
ctx.getIdentifiedUser(),
|
||||
new NoSshInfo(),
|
||||
|
||||
@@ -323,9 +323,6 @@ public class PatchSetInserter implements BatchUpdateOp {
|
||||
return;
|
||||
}
|
||||
|
||||
PermissionBackend.ForRef perm =
|
||||
permissionBackend.user(ctx.getUser()).ref(origNotes.getChange().getDest());
|
||||
|
||||
String refName = getPatchSetId().toRefName();
|
||||
try (CommitReceivedEvent event =
|
||||
new CommitReceivedEvent(
|
||||
@@ -340,7 +337,7 @@ public class PatchSetInserter implements BatchUpdateOp {
|
||||
ctx.getIdentifiedUser())) {
|
||||
commitValidatorsFactory
|
||||
.forGerritCommits(
|
||||
perm,
|
||||
permissionBackend.user(ctx.getUser()).project(ctx.getProject()),
|
||||
origNotes.getChange().getDest(),
|
||||
ctx.getIdentifiedUser(),
|
||||
new NoSshInfo(),
|
||||
|
||||
@@ -1911,13 +1911,15 @@ class ReceiveCommits {
|
||||
}
|
||||
|
||||
try {
|
||||
NoteMap rejectCommits = BanCommit.loadRejectCommitsMap(repo, receivePack.getRevWalk());
|
||||
if (validCommit(
|
||||
receivePack.getRevWalk().getObjectReader(),
|
||||
changeEnt.getDest(),
|
||||
cmd,
|
||||
newCommit,
|
||||
false,
|
||||
changeEnt)) {
|
||||
changeEnt,
|
||||
rejectCommits)) {
|
||||
logger.atFine().log("Replacing change %s", changeEnt.getId());
|
||||
requestReplace(cmd, true, changeEnt, newCommit);
|
||||
}
|
||||
@@ -1966,6 +1968,10 @@ class ReceiveCommits {
|
||||
}
|
||||
}
|
||||
|
||||
private NoteMap loadRejectCommits() throws IOException {
|
||||
return BanCommit.loadRejectCommitsMap(repo, receivePack.getRevWalk());
|
||||
}
|
||||
|
||||
private List<CreateRequest> selectNewAndReplacedChangesFromMagicBranch(Task newProgress) {
|
||||
logger.atFine().log("Finding new and replaced changes");
|
||||
List<CreateRequest> newChanges = new ArrayList<>();
|
||||
@@ -1975,6 +1981,7 @@ class ReceiveCommits {
|
||||
GroupCollector.create(changeRefsById(), db, psUtil, notesFactory, project.getNameKey());
|
||||
|
||||
try {
|
||||
NoteMap rejectCommits = loadRejectCommits();
|
||||
RevCommit start = setUpWalkForSelectingChanges();
|
||||
if (start == null) {
|
||||
return Collections.emptyList();
|
||||
@@ -2079,7 +2086,8 @@ class ReceiveCommits {
|
||||
magicBranch.cmd,
|
||||
c,
|
||||
magicBranch.merged,
|
||||
null)) {
|
||||
null,
|
||||
loadRejectCommits())) {
|
||||
// Not a change the user can propose? Abort as early as possible.
|
||||
logger.atFine().log("Aborting early due to invalid commit");
|
||||
return Collections.emptyList();
|
||||
@@ -3043,6 +3051,8 @@ class ReceiveCommits {
|
||||
walk.reset();
|
||||
walk.sort(RevSort.NONE);
|
||||
try {
|
||||
NoteMap rejectCommits = loadRejectCommits();
|
||||
|
||||
RevObject parsedObject = walk.parseAny(cmd.getNewId());
|
||||
if (!(parsedObject instanceof RevCommit)) {
|
||||
return;
|
||||
@@ -3065,7 +3075,7 @@ class ReceiveCommits {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!validCommit(walk.getObjectReader(), branch, cmd, c, false, null)) {
|
||||
if (!validCommit(walk.getObjectReader(), branch, cmd, c, false, null, rejectCommits)) {
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -3102,9 +3112,9 @@ class ReceiveCommits {
|
||||
ReceiveCommand cmd,
|
||||
RevCommit commit,
|
||||
boolean isMerged,
|
||||
@Nullable Change change)
|
||||
@Nullable Change change,
|
||||
NoteMap rejectCommits)
|
||||
throws IOException {
|
||||
PermissionBackend.ForRef perm = permissions.ref(branch.get());
|
||||
|
||||
ValidCommitKey key = new AutoValue_ReceiveCommits_ValidCommitKey(commit.copy(), branch);
|
||||
if (validCommits.contains(key)) {
|
||||
@@ -3113,18 +3123,21 @@ class ReceiveCommits {
|
||||
|
||||
try (CommitReceivedEvent receiveEvent =
|
||||
new CommitReceivedEvent(cmd, project, branch.get(), objectReader, commit, user)) {
|
||||
CommitValidators validators =
|
||||
isMerged
|
||||
? commitValidatorsFactory.forMergedCommits(
|
||||
project.getNameKey(), perm, user.asIdentifiedUser())
|
||||
: commitValidatorsFactory.forReceiveCommits(
|
||||
perm,
|
||||
CommitValidators validators;
|
||||
if (isMerged) {
|
||||
validators =
|
||||
commitValidatorsFactory.forMergedCommits(permissions, branch, user.asIdentifiedUser());
|
||||
} else {
|
||||
validators =
|
||||
commitValidatorsFactory.forReceiveCommits(
|
||||
permissions,
|
||||
branch,
|
||||
user.asIdentifiedUser(),
|
||||
sshInfo,
|
||||
repo,
|
||||
rejectCommits,
|
||||
receiveEvent.revWalk,
|
||||
change);
|
||||
}
|
||||
|
||||
for (CommitValidationMessage m : validators.validate(receiveEvent)) {
|
||||
messages.add(
|
||||
|
||||
@@ -35,7 +35,6 @@ import com.google.gerrit.reviewdb.client.BooleanProjectConfig;
|
||||
import com.google.gerrit.reviewdb.client.Branch;
|
||||
import com.google.gerrit.reviewdb.client.Branch.NameKey;
|
||||
import com.google.gerrit.reviewdb.client.Change;
|
||||
import com.google.gerrit.reviewdb.client.Project;
|
||||
import com.google.gerrit.reviewdb.client.RefNames;
|
||||
import com.google.gerrit.server.GerritPersonIdent;
|
||||
import com.google.gerrit.server.IdentifiedUser;
|
||||
@@ -45,11 +44,9 @@ import com.google.gerrit.server.config.AllUsersName;
|
||||
import com.google.gerrit.server.config.CanonicalWebUrl;
|
||||
import com.google.gerrit.server.config.GerritServerConfig;
|
||||
import com.google.gerrit.server.events.CommitReceivedEvent;
|
||||
import com.google.gerrit.server.git.BanCommit;
|
||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
||||
import com.google.gerrit.server.git.ValidationError;
|
||||
import com.google.gerrit.server.permissions.PermissionBackend;
|
||||
import com.google.gerrit.server.permissions.PermissionBackend.ForRef;
|
||||
import com.google.gerrit.server.permissions.PermissionBackendException;
|
||||
import com.google.gerrit.server.permissions.RefPermission;
|
||||
import com.google.gerrit.server.project.ProjectCache;
|
||||
@@ -123,15 +120,15 @@ public class CommitValidators {
|
||||
}
|
||||
|
||||
public CommitValidators forReceiveCommits(
|
||||
PermissionBackend.ForRef perm,
|
||||
PermissionBackend.ForProject forProject,
|
||||
Branch.NameKey branch,
|
||||
IdentifiedUser user,
|
||||
SshInfo sshInfo,
|
||||
Repository repo,
|
||||
NoteMap rejectCommits,
|
||||
RevWalk rw,
|
||||
@Nullable Change change)
|
||||
throws IOException {
|
||||
NoteMap rejectCommits = BanCommit.loadRejectCommitsMap(repo, rw);
|
||||
PermissionBackend.ForRef perm = forProject.ref(branch.get());
|
||||
ProjectState projectState = projectCache.checkedGet(branch.getParentKey());
|
||||
return new CommitValidators(
|
||||
ImmutableList.of(
|
||||
@@ -157,13 +154,14 @@ public class CommitValidators {
|
||||
}
|
||||
|
||||
public CommitValidators forGerritCommits(
|
||||
ForRef perm,
|
||||
PermissionBackend.ForProject forProject,
|
||||
NameKey branch,
|
||||
IdentifiedUser user,
|
||||
SshInfo sshInfo,
|
||||
RevWalk rw,
|
||||
@Nullable Change change)
|
||||
throws IOException {
|
||||
PermissionBackend.ForRef perm = forProject.ref(branch.get());
|
||||
ProjectState projectState = projectCache.checkedGet(branch.getParentKey());
|
||||
return new CommitValidators(
|
||||
ImmutableList.of(
|
||||
@@ -187,7 +185,7 @@ public class CommitValidators {
|
||||
}
|
||||
|
||||
public CommitValidators forMergedCommits(
|
||||
Project.NameKey project, PermissionBackend.ForRef perm, IdentifiedUser user)
|
||||
PermissionBackend.ForProject forProject, Branch.NameKey branch, IdentifiedUser user)
|
||||
throws IOException {
|
||||
// Generally only include validators that are based on permissions of the
|
||||
// user creating a change for a merged commit; generally exclude
|
||||
@@ -202,10 +200,11 @@ public class CommitValidators {
|
||||
// discuss what to do about it.
|
||||
// - Plugin validators may do things like require certain commit message
|
||||
// formats, so we play it safe and exclude them.
|
||||
PermissionBackend.ForRef perm = forProject.ref(branch.get());
|
||||
return new CommitValidators(
|
||||
ImmutableList.of(
|
||||
new UploadMergesPermissionValidator(perm),
|
||||
new ProjectStateValidationListener(projectCache.checkedGet(project)),
|
||||
new ProjectStateValidationListener(projectCache.checkedGet(branch.getParentKey())),
|
||||
new AuthorUploaderValidator(user, perm, canonicalWebUrl),
|
||||
new CommitterUploaderValidator(user, perm, canonicalWebUrl)));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user