1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-25 14:50:29 +00:00

clear invalid repo data by commond (#1928)

This commit is contained in:
zMingGit
2017-12-05 22:37:02 -05:00
committed by xiez
parent 7694ecd819
commit 97fa8bf774

View File

@@ -1,22 +1,42 @@
from django.core.management.base import BaseCommand
from seaserv import seafile_api
from seahub.revision_tag.models import RevisionTags
from seahub.tags.models import FileUUIDMap
from seahub.base.models import UserStarredFiles
from seahub.revision_tag.models import RevisionTags
from seahub.wiki.models import PersonalWiki, GroupWiki
from seahub.share.models import ExtraGroupsSharePermission, \
ExtraSharePermission, UploadLinkShare
class Command(BaseCommand):
help = "Clear invalid data when repo deleted"
def handle(self, *args, **kwargs):
all_repo= [repo.repo_id for repo in seafile_api.get_repo_list(-1, -1)]
self.stdout.write('Start to get all existing repo')
self.all_repo= [repo.repo_id for repo in seafile_api.get_repo_list(-1, -1)]
trash_repo = [repo.repo_id for repo in seafile_api.get_trash_repo_list(-1, -1)]
all_repo.extend(trash_repo)
#on_delete is CASCADE, so FileTag will be deleted
fup_repo_ids = FileUUIDMap.objects.all().values_list('repo_id', flat=True)
FileUUIDMap.objects.filter(repo_id__in=list(set(fup_repo_ids) - set(all_repo))).delete()
rt_repo_ids = RevisionTags.objects.all().values_list('repo_id', flat=True)
RevisionTags.objects.filter(repo_id__in=list(set(rt_repo_ids) - set(all_repo))).delete()
self.all_repo.extend(trash_repo)
self.stdout.write('Successly get all existing repos')
#on_delete is CASCADE, so FileTag/FileComment will be deleted
self.tables = {'FileUUIDMap': FileUUIDMap, 'RevisionTags': RevisionTags,
'PersonalWiki': PersonalWiki, 'GroupWiki': GroupWiki,
'UserStarredFiles': UserStarredFiles,
'ExtraGroupsSharePermission': ExtraGroupsSharePermission,
'ExtraSharePermission': ExtraSharePermission,
'UploadLinkShare': UploadLinkShare}
self.stdout.write('Invalid repo data deleted')
for table in self.tables.items():
self.clear_table(table[0], table[1])
self.stdout.write('All invalid repo data are deleted')
def clear_table(self, table_name, table_model):
""" clear invalid data on table
table must has `repo_id` column and without foreign relationship
"""
self.stdout.write('Start to clear %s table' % table_name)
tb_repo_ids = table_model.objects.all().values_list('repo_id', flat=True)
table_model.objects.filter(repo_id__in=list(set(tb_repo_ids) - set(self.all_repo))).delete()
self.stdout.write('%s table has been clear' % table_name)