Skip to content

Commit 682fec1

Browse files
committed
File Tree Diff: allow users to ignore files
Add a field to allow users to tell us what files should be ignored when comparing versions. This is going to be used by the front-end to don't expose these files in the list of added/modified/deleted files. Closes #11694
1 parent 9b1e784 commit 682fec1

File tree

4 files changed

+61
-0
lines changed

4 files changed

+61
-0
lines changed

readthedocs/projects/forms.py

+29
Original file line numberDiff line numberDiff line change
@@ -652,11 +652,36 @@ def __init__(self, *args, **kwargs):
652652
self.fields.pop("external_builds_privacy_level")
653653

654654

655+
class OnePerLineList(forms.Field):
656+
widget = forms.Textarea(
657+
attrs={
658+
"placeholder": "\n".join(
659+
[
660+
"/whatsnew.html",
661+
"/guides/getting-started.html",
662+
"/changelog.html",
663+
]
664+
),
665+
},
666+
)
667+
668+
def to_python(self, value):
669+
"""Convert a text area into a list of items (one per line)"""
670+
if not value:
671+
return []
672+
return value.splitlines()
673+
674+
def prepare_value(self, value):
675+
"""Convert a list of items into a text area (one per line)"""
676+
return "\n".join(value)
677+
678+
655679
class AddonsConfigForm(forms.ModelForm):
656680

657681
"""Form to opt-in into new addons."""
658682

659683
project = forms.CharField(widget=forms.HiddenInput(), required=False)
684+
filetreediff_ignored_files = OnePerLineList(required=False)
660685

661686
class Meta:
662687
model = AddonsConfig
@@ -666,6 +691,8 @@ class Meta:
666691
"options_root_selector",
667692
"analytics_enabled",
668693
"doc_diff_enabled",
694+
"filetreediff_enabled",
695+
"filetreediff_ignored_files",
669696
"flyout_enabled",
670697
"flyout_sorting",
671698
"flyout_sorting_latest_stable_at_beginning",
@@ -682,6 +709,8 @@ class Meta:
682709
labels = {
683710
"enabled": _("Enable Addons"),
684711
"doc_diff_enabled": _("Visual diff enabled"),
712+
"filetreediff_enabled": _("Enabled"),
713+
"filetreediff_ignored_files": _("Ignored files"),
685714
"notifications_show_on_external": _(
686715
"Show a notification on builds from pull requests"
687716
),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Generated by Django 4.2.18 on 2025-02-05 11:33
2+
3+
from django.db import migrations, models
4+
from django_safemigrate import Safe
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
safe = Safe.before_deploy
10+
11+
dependencies = [
12+
('projects', '0145_alter_importedfile_id'),
13+
]
14+
15+
operations = [
16+
migrations.AddField(
17+
model_name='addonsconfig',
18+
name='filetreediff_ignored_files',
19+
field=models.JSONField(blank=True, help_text='List of ignored files. One per line.', null=True),
20+
),
21+
migrations.AddField(
22+
model_name='historicaladdonsconfig',
23+
name='filetreediff_ignored_files',
24+
field=models.JSONField(blank=True, help_text='List of ignored files. One per line.', null=True),
25+
),
26+
]

readthedocs/projects/models.py

+5
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,11 @@ class AddonsConfig(TimeStampedModel):
195195

196196
# File Tree Diff
197197
filetreediff_enabled = models.BooleanField(default=False, null=True, blank=True)
198+
filetreediff_ignored_files = models.JSONField(
199+
help_text=_("List of ignored files. One per line."),
200+
null=True,
201+
blank=True,
202+
)
198203

199204
# Flyout
200205
flyout_enabled = models.BooleanField(

readthedocs/proxito/views/hosting.py

+1
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,7 @@ def _v1(self, project, version, build, filename, url, request):
541541
},
542542
"filetreediff": {
543543
"enabled": project.addons.filetreediff_enabled,
544+
"ignored_files": project.addons.filetreediff_ignored_files,
544545
},
545546
},
546547
}

0 commit comments

Comments
 (0)