summaryrefslogtreecommitdiffstats
path: root/gitsrht
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2018-07-11 07:22:46 -0400
committerDrew DeVault <sir@cmpwn.com>2018-07-11 07:22:46 -0400
commit687dde9ee8445e15101cc0a2a16d75fe3b0cdad4 (patch)
tree71b88929f54724ceecf14e813f201d9f53562f5d /gitsrht
parentfce89b045078d2a08bdd3a6bd949e641f3f52291 (diff)
Add cascades for repo deletion
Diffstat (limited to 'gitsrht')
-rw-r--r--gitsrht/alembic/versions/8d26b98e7d44_add_cascades_for_repo_deletion.py94
-rw-r--r--gitsrht/repos.py5
-rw-r--r--gitsrht/types/access.py13
-rw-r--r--gitsrht/types/redirect.py3
-rw-r--r--gitsrht/types/webhook.py10
5 files changed, 115 insertions, 10 deletions
diff --git a/gitsrht/alembic/versions/8d26b98e7d44_add_cascades_for_repo_deletion.py b/gitsrht/alembic/versions/8d26b98e7d44_add_cascades_for_repo_deletion.py
new file mode 100644
index 0000000..212044b
--- /dev/null
+++ b/gitsrht/alembic/versions/8d26b98e7d44_add_cascades_for_repo_deletion.py
@@ -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"])
diff --git a/gitsrht/repos.py b/gitsrht/repos.py
index 366590d..0ed6fb7 100644
--- a/gitsrht/repos.py
+++ b/gitsrht/repos.py
@@ -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()
diff --git a/gitsrht/types/access.py b/gitsrht/types/access.py
index cce8525..526e049 100644
--- a/gitsrht/types/access.py
+++ b/gitsrht/types/access.py
@@ -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)
diff --git a/gitsrht/types/redirect.py b/gitsrht/types/redirect.py
index f78184b..c519914 100644
--- a/gitsrht/types/redirect.py
+++ b/gitsrht/types/redirect.py
@@ -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')
diff --git a/gitsrht/types/webhook.py b/gitsrht/types/webhook.py
index 8d75100..1aa877b 100644
--- a/gitsrht/types/webhook.py
+++ b/gitsrht/types/webhook.py
@@ -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)