Message ID | 20250130195643.757559-2-ahassick@iol.unh.edu |
---|---|
State | Accepted |
Headers | show |
Series | Add support for series dependencies | expand |
Adam Hassick <ahassick@iol.unh.edu> writes: > * Add a ManyToMany field to represent a dependency relationship between > patch series and a helper method to add dependencies. > * Add the parse_dependency field to the Project model. > > Signed-off-by: Adam Hassick <ahassick@iol.unh.edu> > --- Acked-by: Aaron Conole <aconole@redhat.com> > .../migrations/0048_series_dependencies.py | 32 +++++++++++++++++++ > patchwork/models.py | 30 +++++++++++++++++ > 2 files changed, 62 insertions(+) > create mode 100644 patchwork/migrations/0048_series_dependencies.py > > diff --git a/patchwork/migrations/0048_series_dependencies.py b/patchwork/migrations/0048_series_dependencies.py > new file mode 100644 > index 0000000..56493e8 > --- /dev/null > +++ b/patchwork/migrations/0048_series_dependencies.py > @@ -0,0 +1,32 @@ > +# Generated by Django 5.0.6 on 2024-06-07 02:58 > + > +from django.db import migrations, models > + > + > +class Migration(migrations.Migration): > + dependencies = [ > + ('patchwork', '0047_add_database_indexes'), > + ] > + > + operations = [ > + migrations.AddField( > + model_name='series', > + name='dependencies', > + field=models.ManyToManyField( > + blank=True, > + help_text='Optional dependencies on this patch.', > + related_name='dependents', > + related_query_name='dependent', > + to='patchwork.series', > + ), > + ), > + migrations.AddField( > + model_name='project', > + name='parse_dependencies', > + field=models.BooleanField( > + default=False, > + help_text='Enable parsing dependencies on patches and cover ' > + 'letters.', > + ), > + ), > + ] > diff --git a/patchwork/models.py b/patchwork/models.py > index a05db7f..fd11bb8 100644 > --- a/patchwork/models.py > +++ b/patchwork/models.py > @@ -100,6 +100,10 @@ class Project(models.Model): > # configuration options > > send_notifications = models.BooleanField(default=False) > + parse_dependencies = models.BooleanField( > + default=False, > + help_text='Enable parsing dependencies on patches and cover letters.', > + ) > use_tags = models.BooleanField(default=True) > > def is_editable(self, user): > @@ -840,6 +844,16 @@ class Series(FilenameMixin, models.Model): > Cover, related_name='series', null=True, on_delete=models.CASCADE > ) > > + # dependencies > + dependencies = models.ManyToManyField( > + 'self', > + symmetrical=False, > + blank=True, > + help_text='Optional dependencies on this patch.', > + related_name='dependents', > + related_query_name='dependent', > + ) > + > # metadata > name = models.CharField( > max_length=255, > @@ -880,6 +894,22 @@ class Series(FilenameMixin, models.Model): > def received_all(self): > return self.total <= self.received_total > > + def add_dependencies(self, dependencies): > + """Add dependencies to this series. > + > + Helper method to add any found dependencies to this series. > + The method will filter out self and any series not from the > + same project. > + """ > + self.dependencies.add( > + *( > + dep > + for dep in dependencies > + if dep.id != self.id and dep.project == self.project > + ) > + ) > + self.save() > + > def add_cover_letter(self, cover): > """Add a cover letter to the series.
On Thu, 2025-01-30 at 14:56 -0500, Adam Hassick wrote: > * Add a ManyToMany field to represent a dependency relationship between > patch series and a helper method to add dependencies. > * Add the parse_dependency field to the Project model. > > Signed-off-by: Adam Hassick <ahassick@iol.unh.edu> Reviewed-by: Stephen Finucane <stephen@that.guru>
diff --git a/patchwork/migrations/0048_series_dependencies.py b/patchwork/migrations/0048_series_dependencies.py new file mode 100644 index 0000000..56493e8 --- /dev/null +++ b/patchwork/migrations/0048_series_dependencies.py @@ -0,0 +1,32 @@ +# Generated by Django 5.0.6 on 2024-06-07 02:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('patchwork', '0047_add_database_indexes'), + ] + + operations = [ + migrations.AddField( + model_name='series', + name='dependencies', + field=models.ManyToManyField( + blank=True, + help_text='Optional dependencies on this patch.', + related_name='dependents', + related_query_name='dependent', + to='patchwork.series', + ), + ), + migrations.AddField( + model_name='project', + name='parse_dependencies', + field=models.BooleanField( + default=False, + help_text='Enable parsing dependencies on patches and cover ' + 'letters.', + ), + ), + ] diff --git a/patchwork/models.py b/patchwork/models.py index a05db7f..fd11bb8 100644 --- a/patchwork/models.py +++ b/patchwork/models.py @@ -100,6 +100,10 @@ class Project(models.Model): # configuration options send_notifications = models.BooleanField(default=False) + parse_dependencies = models.BooleanField( + default=False, + help_text='Enable parsing dependencies on patches and cover letters.', + ) use_tags = models.BooleanField(default=True) def is_editable(self, user): @@ -840,6 +844,16 @@ class Series(FilenameMixin, models.Model): Cover, related_name='series', null=True, on_delete=models.CASCADE ) + # dependencies + dependencies = models.ManyToManyField( + 'self', + symmetrical=False, + blank=True, + help_text='Optional dependencies on this patch.', + related_name='dependents', + related_query_name='dependent', + ) + # metadata name = models.CharField( max_length=255, @@ -880,6 +894,22 @@ class Series(FilenameMixin, models.Model): def received_all(self): return self.total <= self.received_total + def add_dependencies(self, dependencies): + """Add dependencies to this series. + + Helper method to add any found dependencies to this series. + The method will filter out self and any series not from the + same project. + """ + self.dependencies.add( + *( + dep + for dep in dependencies + if dep.id != self.id and dep.project == self.project + ) + ) + self.save() + def add_cover_letter(self, cover): """Add a cover letter to the series.
* Add a ManyToMany field to represent a dependency relationship between patch series and a helper method to add dependencies. * Add the parse_dependency field to the Project model. Signed-off-by: Adam Hassick <ahassick@iol.unh.edu> --- .../migrations/0048_series_dependencies.py | 32 +++++++++++++++++++ patchwork/models.py | 30 +++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 patchwork/migrations/0048_series_dependencies.py