From a11b59c424345078b2c86c865159c8b51a1eb9b4 Mon Sep 17 00:00:00 2001 From: Dave Borowitz Date: Mon, 14 Sep 2015 12:23:38 -0400 Subject: [PATCH] Store push certificate in patch set during ReceiveCommits Push certificates for new/updated changes contain commands for refs/for/*, even though that ref is not created. This means if we store such certificates in PushCertificateStore, we can't use the history of push certs on that ref to reconstruct anything like a reflog. It would be confusing to see in refs/meta/push-certs a push cert mentioning refs/for/* either on that ref (which doesn't exist) or refs/changes/* (which is a completely unrelated refname). Pushing to refs/for/* and having the data become a patch set is a detail of the Gerrit model, so it makes sense to store the cert in the same place as the patch set SHA-1 itself, namely the PatchSets table. Change-Id: I51924054742fbd31b1abcce1ccdcf9bce76642ac --- .../gerrit/reviewdb/client/PatchSet.java | 12 +++++++++ .../gerrit/server/git/ReceiveCommits.java | 4 +++ .../gerrit/server/schema/SchemaVersion.java | 2 +- .../gerrit/server/schema/Schema_113.java | 25 +++++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_113.java diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/PatchSet.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/PatchSet.java index 7fc140cb13..13ca7aac94 100644 --- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/PatchSet.java +++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/PatchSet.java @@ -199,6 +199,10 @@ public final class PatchSet { @Column(id = 6, notNull = false) protected String groups; + /** Certificate sent with a push that created this patch set. */ + @Column(id = 7, notNull = false) + protected String pushCertficate; + protected PatchSet() { } @@ -258,6 +262,14 @@ public final class PatchSet { return id.toRefName(); } + public String getPushCertificate() { + return pushCertficate; + } + + public void setPushCertificate(String cert) { + pushCertficate = cert; + } + @Override public String toString() { return "[PatchSet " + getId().toString() + "]"; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java index 02c6d1329e..2d7793e5f3 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java @@ -2075,6 +2075,10 @@ public class ReceiveCommits { newPatchSet.setUploader(currentUser.getAccountId()); newPatchSet.setRevision(toRevId(newCommit)); newPatchSet.setGroups(groups); + if (rp.getPushCertificate() != null) { + newPatchSet.setPushCertificate( + rp.getPushCertificate().toTextWithSignature()); + } if (magicBranch != null && magicBranch.draft) { newPatchSet.setDraft(true); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/schema/SchemaVersion.java b/gerrit-server/src/main/java/com/google/gerrit/server/schema/SchemaVersion.java index 9022bfe224..a4a7ddc949 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/schema/SchemaVersion.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/schema/SchemaVersion.java @@ -32,7 +32,7 @@ import java.util.List; /** A version of the database schema. */ public abstract class SchemaVersion { /** The current schema version. */ - public static final Class C = Schema_112.class; + public static final Class C = Schema_113.class; public static int getBinaryVersion() { return guessVersion(C); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_113.java b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_113.java new file mode 100644 index 0000000000..32d655e63e --- /dev/null +++ b/gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_113.java @@ -0,0 +1,25 @@ +// Copyright (C) 2015 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.server.schema; + +import com.google.inject.Inject; +import com.google.inject.Provider; + +public class Schema_113 extends SchemaVersion { + @Inject + Schema_113(Provider prior) { + super(prior); + } +}