Discontinue draft workflow
Migration is implemented to either replace draft changes with private (default) or work-in-progress changes. We bump the change index version to trigger online reindexing. That's needed because we don't support reindexing during init step, and we need to reindex all changes, because DRAFT is removed from the Change.Status enum and index still contains the old references to the changes that were migrated to private or work-in-progress changes. To make online reindexing work, draft status is replaced with the new change status. PolyGerrit UI is not addressed in this change and will be done in a follow-up change. User branches are not updated in this change to clean-up My-Menu entry in user preferences. This will be done in a follow-up change. refs/meta/config is not updated in this change to clean-up draft related permissions. This will be done in a follow-up change. ChangeControl#isPatchVisible() call sites are migrated to the ChangeControl#isVisible() and isVisible() is made public again. This and other temporary changes to ChangeControl class will be cleaned up in follow up changes. Bug: Issue 6880 Change-Id: Icfcb34efe1ff0ea1d39e94ed500db776f5770d8f
This commit is contained in:
committed by
Changcheng Xiao
parent
80522c3e22
commit
6ffb7d9358
@@ -0,0 +1,61 @@
|
||||
// Copyright (C) 2017 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.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
import com.google.gwtorm.server.StatementExecutor;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
|
||||
/** Migrate draft changes to private or wip changes. */
|
||||
public class Schema_159 extends SchemaVersion {
|
||||
|
||||
private static enum DraftWorkflowMigrationStrategy {
|
||||
PRIVATE,
|
||||
WORK_IN_PROGRESS
|
||||
}
|
||||
|
||||
@Inject
|
||||
Schema_159(Provider<Schema_158> prior) {
|
||||
super(prior);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void migrateData(ReviewDb db, UpdateUI ui) throws OrmException {
|
||||
DraftWorkflowMigrationStrategy strategy = DraftWorkflowMigrationStrategy.PRIVATE;
|
||||
if (ui.yesno(
|
||||
false, "Migrate draft changes to work-in-progress changes (default is private)?")) {
|
||||
strategy = DraftWorkflowMigrationStrategy.WORK_IN_PROGRESS;
|
||||
}
|
||||
ui.message(
|
||||
String.format("Replace draft changes with %s changes ...", strategy.name().toLowerCase()));
|
||||
try (StatementExecutor e = newExecutor(db)) {
|
||||
String column =
|
||||
strategy == DraftWorkflowMigrationStrategy.PRIVATE ? "is_private" : "work_in_progress";
|
||||
// Mark changes private/wip if changes have status draft or
|
||||
// if they have any draft patch sets.
|
||||
e.execute(
|
||||
String.format(
|
||||
"UPDATE changes SET %s = 'Y' WHERE status = 'd' OR "
|
||||
+ "EXISTS (SELECT * FROM patch_sets WHERE "
|
||||
+ "patch_sets.change_id = changes.change_id AND patch_sets.draft = 'Y')",
|
||||
column));
|
||||
// Change change status from draft to new.
|
||||
e.execute("UPDATE changes SET status = 'n' WHERE status = 'd'");
|
||||
}
|
||||
ui.message("done");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user