75 lines
2.3 KiB
Python
75 lines
2.3 KiB
Python
import json
|
|
import logging
|
|
from sqlalchemy import *
|
|
from sqlalchemy.engine import reflection
|
|
|
|
from alembic.migration import MigrationContext
|
|
from alembic.operations import Operations
|
|
|
|
from rhodecode.lib.dbmigrate.versions import _reset_base
|
|
from rhodecode.lib.jsonalchemy import MutationObj, JsonType
|
|
from rhodecode.model import meta, init_model_encryption
|
|
|
|
|
|
def upgrade(migrate_engine):
|
|
"""
|
|
Upgrade operations go here.
|
|
Don't create your own engine; bind migrate_engine to your metadata
|
|
"""
|
|
_reset_base(migrate_engine)
|
|
|
|
from rhodecode.lib.dbmigrate.schema import db_4_20_0_0 as db
|
|
|
|
init_model_encryption(db)
|
|
|
|
context = MigrationContext.configure(migrate_engine.connect())
|
|
op = Operations(context)
|
|
|
|
pr_table = db.PullRequest.__table__
|
|
with op.batch_alter_table(pr_table.name) as batch_op:
|
|
new_column = Column(
|
|
"settings_json",
|
|
MutationObj.as_mutable(
|
|
JsonType(dialect_map=dict(mysql=UnicodeText(16384))),
|
|
),
|
|
default=dict,
|
|
)
|
|
batch_op.add_column(new_column)
|
|
|
|
pr_version_table = db.PullRequestVersion.__table__
|
|
with op.batch_alter_table(pr_version_table.name) as batch_op:
|
|
new_column = Column(
|
|
"settings_json",
|
|
MutationObj.as_mutable(
|
|
JsonType(dialect_map=dict(mysql=UnicodeText(16384))),
|
|
),
|
|
default=dict,
|
|
)
|
|
batch_op.add_column(new_column)
|
|
|
|
_inherit_settings(db, meta.Session, op)
|
|
|
|
|
|
def downgrade(migrate_engine):
|
|
pass
|
|
|
|
|
|
def _inherit_settings(models, _SESSION, op):
|
|
for pr in _SESSION.query(models.PullRequest).all():
|
|
repo = pr.target_repo
|
|
repo_type = repo.repo_type
|
|
close_branch_before_merging = False
|
|
|
|
if repo_type in ["git", "hg"]:
|
|
close_branch_before_merging = getattr(repo, f"{repo_type}_close_branch_before_merging", False)
|
|
|
|
json_settings = {"close_branch_before_merging": close_branch_before_merging}
|
|
params = {"id": pr.pull_request_id, "value": json.dumps(json_settings)}
|
|
query = text(
|
|
"""UPDATE pull_requests
|
|
SET settings_json = :value
|
|
WHERE pull_request_id = :id"""
|
|
).bindparams(**params)
|
|
op.execute(query)
|
|
|
|
_SESSION().commit()
|