unrhodecode/rhodecode/lib/dbmigrate/versions/116_version_5_7_0.py
2025-06-26 13:57:05 +02:00

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()