mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 06:53:25 +00:00
As several archived streams may have the same new name, it is essential to verify whether any stream, regardless of its current status (active or archived), already has that name before executing any renaming operation.
57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
import hashlib
|
|
|
|
from django.db import migrations
|
|
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
|
|
from django.db.migrations.state import StateApps
|
|
|
|
|
|
def remove_prefix_from_archived_streams(
|
|
apps: StateApps, schema_editor: BaseDatabaseSchemaEditor
|
|
) -> None:
|
|
Stream = apps.get_model("zerver", "Stream")
|
|
archived_streams = Stream.objects.filter(deactivated=True)
|
|
|
|
for archived_stream in archived_streams:
|
|
old_prefix = "!DEACTIVATED:"
|
|
streamID = str(archived_stream.id)
|
|
stream_id_hash_object = hashlib.sha512(streamID.encode())
|
|
hashed_stream_id = stream_id_hash_object.hexdigest()[0:7]
|
|
prefix = hashed_stream_id + old_prefix
|
|
prefix_length = len(prefix)
|
|
old_name = archived_stream.name
|
|
new_name = old_name
|
|
if old_name.startswith(prefix):
|
|
new_name = old_name[prefix_length:]
|
|
|
|
# Check for archived streams before commit 1b6f68b.
|
|
elif old_prefix in old_name:
|
|
prefix_end_index = old_name.find(old_prefix) + len(old_prefix)
|
|
new_name = old_name[prefix_end_index:]
|
|
|
|
else:
|
|
continue
|
|
|
|
# Check if there's an active stream or another archived stream with the new name
|
|
if not Stream.objects.filter(realm=archived_stream.realm, name=new_name).exists():
|
|
archived_stream.name = new_name
|
|
archived_stream.save(update_fields=["name"])
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
atomic = False
|
|
|
|
dependencies = [
|
|
(
|
|
"zerver",
|
|
"0616_userprofile_can_change_user_emails",
|
|
),
|
|
]
|
|
|
|
operations = [
|
|
migrations.RunPython(
|
|
remove_prefix_from_archived_streams,
|
|
reverse_code=migrations.RunPython.noop,
|
|
elidable=True,
|
|
),
|
|
]
|