Skip to content

Commit 6f13b4a

Browse files
committed
Allow users to change version slug
1 parent 2280a19 commit 6f13b4a

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

readthedocs/builds/forms.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class Meta:
3030
states_fields = ["active", "hidden"]
3131
privacy_fields = ["privacy_level"]
3232
fields = (
33+
"slug",
3334
*states_fields,
3435
*privacy_fields,
3536
)
@@ -88,8 +89,22 @@ def _is_default_version(self):
8889
project = self.instance.project
8990
return project.default_version == self.instance.slug
9091

92+
def clean_slug(self):
93+
slug = self.cleaned_data["slug"]
94+
if "slug" in self.changed_data and self.instance.machine:
95+
raise forms.ValidationError(
96+
_("The slug cannot be changed."),
97+
)
98+
# TODO: check for unique slug instead of having django 500.
99+
return slug
100+
91101
def save(self, commit=True):
92102
obj = super().save(commit=commit)
103+
104+
if "slug" in self.changed_data and self._was_active and self.instance.active:
105+
obj.recreate()
106+
return obj
107+
93108
obj.post_save(was_active=self._was_active)
94109
return obj
95110

readthedocs/builds/models.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,11 @@ def post_save(self, was_active=False):
440440
trigger_build(project=self.project, version=self)
441441
# Purge the cache from the CDN.
442442
version_changed.send(sender=self.__class__, version=self)
443+
444+
def recreate(self):
445+
self.clean_resources()
446+
trigger_build(project=self.project, version=self)
447+
version_changed.send(sender=self.__class__, version=self)
443448

444449
@property
445450
def identifier_friendly(self):

0 commit comments

Comments
 (0)