mirror of https://github.com/zulip/zulip.git
migration: Rename previously archived streams to their original names.
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.
This commit is contained in:
parent
40da0e44fb
commit
e25bbe1005
|
@ -0,0 +1,56 @@
|
|||
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,
|
||||
),
|
||||
]
|
Loading…
Reference in New Issue