summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn O. Pearce <sop@google.com>2009-01-26 12:39:23 -0800
committerShawn O. Pearce <sop@google.com>2009-01-26 13:55:19 -0800
commit4679770f9a96ffea2c283d25c9fa1e1732f60b83 (patch)
treef9594193a07335fd21de920efba27970a3e3c1fe
parent59a9145fd976f03d93cfeb74a231dbd18747ec01 (diff)
Don't permit the same commit twice on the same change
Repeated uses of "repo upload --replace" for the same change id and commit, without changing the commit SHA-1, would create more than one patch set with identical content. This is confusing to read and review. Disallowing it simplifies things for any reader. Caused-by: jbq Signed-off-by: Shawn O. Pearce <sop@google.com>
-rw-r--r--appjar/src/main/java/com/google/gerrit/client/reviewdb/PatchSetAccess.java4
-rw-r--r--appjar/src/main/java/com/google/gerrit/server/ssh/Receive.java9
2 files changed, 13 insertions, 0 deletions
diff --git a/appjar/src/main/java/com/google/gerrit/client/reviewdb/PatchSetAccess.java b/appjar/src/main/java/com/google/gerrit/client/reviewdb/PatchSetAccess.java
index 811b60a1f0..2819b873b1 100644
--- a/appjar/src/main/java/com/google/gerrit/client/reviewdb/PatchSetAccess.java
+++ b/appjar/src/main/java/com/google/gerrit/client/reviewdb/PatchSetAccess.java
@@ -27,6 +27,10 @@ public interface PatchSetAccess extends Access<PatchSet, PatchSet.Id> {
@Query("WHERE id.changeId = ? ORDER BY id.patchSetId")
ResultSet<PatchSet> byChange(Change.Id id) throws OrmException;
+ @Query("WHERE id.changeId = ? AND revision = ?")
+ ResultSet<PatchSet> byChangeRevision(Change.Id id, RevId rev)
+ throws OrmException;
+
@Query("WHERE revision = ? LIMIT 2")
ResultSet<PatchSet> byRevision(RevId rev) throws OrmException;
diff --git a/appjar/src/main/java/com/google/gerrit/server/ssh/Receive.java b/appjar/src/main/java/com/google/gerrit/server/ssh/Receive.java
index 1706a0c6ce..2798fccf2c 100644
--- a/appjar/src/main/java/com/google/gerrit/server/ssh/Receive.java
+++ b/appjar/src/main/java/com/google/gerrit/server/ssh/Receive.java
@@ -28,6 +28,7 @@ import com.google.gerrit.client.reviewdb.ChangeMessage;
import com.google.gerrit.client.reviewdb.ContactInformation;
import com.google.gerrit.client.reviewdb.ContributorAgreement;
import com.google.gerrit.client.reviewdb.PatchSet;
+import com.google.gerrit.client.reviewdb.RevId;
import com.google.gerrit.client.reviewdb.ReviewDb;
import com.google.gerrit.client.rpc.Common;
import com.google.gerrit.git.PatchSetImporter;
@@ -597,6 +598,14 @@ class Receive extends AbstractGitCommand {
change = changeCache.get(changeId);
}
+ // Don't allow the same commit to appear twice on the same change
+ //
+ if (!db.patchSets().byChangeRevision(changeId,
+ new RevId(cmd.getNewId().name())).toList().isEmpty()) {
+ reject(cmd, "patch set exists");
+ return null;
+ }
+
final PatchSet ps = new PatchSet(change.newPatchSetId());
ps.setCreatedOn(new Timestamp(System.currentTimeMillis()));
ps.setUploader(userAccount.getId());