~edwargix/git.sr.ht

687dde9ee8445e15101cc0a2a16d75fe3b0cdad4 — Drew DeVault 6 years ago fce89b0
Add cascades for repo deletion
A gitsrht/alembic/versions/8d26b98e7d44_add_cascades_for_repo_deletion.py => gitsrht/alembic/versions/8d26b98e7d44_add_cascades_for_repo_deletion.py +94 -0
@@ 0,0 1,94 @@
"""Add cascades for repo deletion

Revision ID: 8d26b98e7d44
Revises: ce3a03ec34a5
Create Date: 2018-07-11 07:15:41.973647

"""

# revision identifiers, used by Alembic.
revision = '8d26b98e7d44'
down_revision = 'ce3a03ec34a5'

from alembic import op
import sqlalchemy as sa


def upgrade():
    op.drop_constraint(
            constraint_name="redirect_new_repo_id_fkey",
            table_name="redirect",
            type_="foreignkey")
    op.create_foreign_key(
            constraint_name="redirect_new_repo_id_fkey",
            source_table="redirect",
            referent_table="repository",
            local_cols=["new_repo_id"],
            remote_cols=["id"],
            ondelete="CASCADE")
    op.drop_constraint(
            constraint_name="access_repo_id_fkey",
            table_name="access",
            type_="foreignkey")
    op.create_foreign_key(
            constraint_name="access_repo_id_fkey",
            source_table="access",
            referent_table="repository",
            local_cols=["repo_id"],
            remote_cols=["id"],
            ondelete="CASCADE")
    op.drop_constraint(
            constraint_name="webhook_repo_id_fkey",
            table_name="webhook",
            type_="foreignkey")
    op.create_foreign_key(
            constraint_name="webhook_repo_id_fkey",
            source_table="webhook",
            referent_table="repository",
            local_cols=["repo_id"],
            remote_cols=["id"],
            ondelete="CASCADE")
    op.drop_constraint(
            constraint_name="webhook_oauth_token_id_fkey",
            table_name="webhook",
            type_="foreignkey")
    op.create_foreign_key(
            constraint_name="webhook_oauth_token_id_fkey",
            source_table="webhook",
            referent_table="oauthtoken",
            local_cols=["oauth_token_id"],
            remote_cols=["id"],
            ondelete="CASCADE")


def downgrade():
    op.drop_constraint(
            constraint_name="redirect_new_repo_id_fkey",
            table_name="redirect",
            type_="foreignkey")
    op.create_foreign_key(
            constraint_name="redirect_new_repo_id_fkey",
            source_table="redirect",
            referent_table="repository",
            local_cols=["new_repo_id"],
            remote_cols=["id"])
    op.drop_constraint(
            constraint_name="access_repo_id_fkey",
            table_name="access",
            type_="foreignkey")
    op.create_foreign_key(
            constraint_name="access_repo_id_fkey",
            source_table="access",
            referent_table="repository",
            local_cols=["repo_id"],
            remote_cols=["id"])
    op.drop_constraint(
            constraint_name="webhook_repo_id_fkey",
            table_name="webhook",
            type_="foreignkey")
    op.create_foreign_key(
            constraint_name="webhook_repo_id_fkey",
            source_table="webhook",
            referent_table="repository",
            local_cols=["repo_id"],
            remote_cols=["id"])

M gitsrht/repos.py => gitsrht/repos.py +4 -1
@@ 88,6 88,9 @@ def rename_repo(owner, repo, valid):
    return repo

def delete_repo(repo):
    shutil.rmtree(repo.path)
    try:
        shutil.rmtree(repo.path)
    except FileNotFoundError:
        pass
    db.session.delete(repo)
    db.session.commit()

M gitsrht/types/access.py => gitsrht/types/access.py +9 -4
@@ 12,13 12,18 @@ class Access(Base):
    id = sa.Column(sa.Integer, primary_key=True)
    created = sa.Column(sa.DateTime, nullable=False)
    updated = sa.Column(sa.DateTime, nullable=False)
    repo_id = sa.Column(sa.Integer, sa.ForeignKey('repository.id'), nullable=False)
    repo = sa.orm.relationship('Repository', backref='access_grants')
    user_id = sa.Column(sa.Integer, sa.ForeignKey('user.id'), nullable=False)
    user = sa.orm.relationship('User', backref='access_grants')
    mode = sa.Column(sau.ChoiceType(AccessMode, impl=sa.String()),
            nullable=False, default=AccessMode.ro)

    user_id = sa.Column(sa.Integer, sa.ForeignKey('user.id'), nullable=False)
    user = sa.orm.relationship('User', backref='access_grants')

    repo_id = sa.Column(sa.Integer,
            sa.ForeignKey('repository.id', ondelete="CASCADE"),
            nullable=False)
    repo = sa.orm.relationship('Repository',
            backref=sa.orm.backref('access_grants', cascade="all, delete"))

    def __repr__(self):
        return '<Access {} {}->{}:{}>'.format(
                self.id, self.user_id, self.repo_id, self.mode)

M gitsrht/types/redirect.py => gitsrht/types/redirect.py +2 -1
@@ 11,8 11,9 @@ class Redirect(Base):
    owner_id = sa.Column(sa.Integer, sa.ForeignKey('user.id'), nullable=False)
    owner = sa.orm.relationship('User')
    path = sa.Column(sa.Unicode(1024))

    new_repo_id = sa.Column(
            sa.Integer,
            sa.ForeignKey('repository.id'),
            sa.ForeignKey('repository.id', ondelete="CASCADE"),
            nullable=False)
    new_repo = sa.orm.relationship('Repository')

M gitsrht/types/webhook.py => gitsrht/types/webhook.py +6 -4
@@ 9,16 9,18 @@ class Webhook(Base):
    updated = sa.Column(sa.DateTime, nullable=False)
    description = sa.Column(sa.Unicode(1024))

    oauth_token_id = sa.Column(sa.Integer, sa.ForeignKey("oauthtoken.id"))
    oauth_token_id = sa.Column(sa.Integer,
            sa.ForeignKey("oauthtoken.id", ondelete="CASCADE"))
    oauth_token = sa.orm.relationship("OAuthToken",
            backref=sa.orm.backref("webhooks"))
            backref=sa.orm.backref("webhooks", cascade="all, delete"))

    user_id = sa.Column(sa.Integer, sa.ForeignKey("user.id"), nullable=False)
    user = sa.orm.relationship("User", backref=sa.orm.backref("webhooks"))

    repo_id = sa.Column(sa.Integer, sa.ForeignKey("repository.id"))
    repo_id = sa.Column(sa.Integer,
            sa.ForeignKey("repository.id", ondelete="CASCADE"))
    repository = sa.orm.relationship("Repository",
            backref=sa.orm.backref("webhooks"))
            backref=sa.orm.backref("webhooks", cascade="all, delete"))

    url = sa.Column(sa.Unicode(2048), nullable=False)
    validate_ssl = sa.Column(sa.Boolean, nullable=False, default=True)