diff options
author | Shawn O. Pearce <sop@google.com> | 2009-01-26 12:39:23 -0800 |
---|---|---|
committer | Shawn O. Pearce <sop@google.com> | 2009-01-26 13:55:19 -0800 |
commit | 4679770f9a96ffea2c283d25c9fa1e1732f60b83 (patch) | |
tree | f9594193a07335fd21de920efba27970a3e3c1fe | |
parent | 59a9145fd976f03d93cfeb74a231dbd18747ec01 (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.java | 4 | ||||
-rw-r--r-- | appjar/src/main/java/com/google/gerrit/server/ssh/Receive.java | 9 |
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()); |