diff mbox series

[v4,1/7] models: Add fields for series dependencies

Message ID 20250130195643.757559-2-ahassick@iol.unh.edu
State Accepted
Headers show
Series Add support for series dependencies | expand

Commit Message

Adam Hassick Jan. 30, 2025, 7:56 p.m. UTC
* 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

Comments

Aaron Conole Feb. 7, 2025, 2:58 p.m. UTC | #1
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.
Stephen Finucane March 8, 2025, 10:39 a.m. UTC | #2
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 mbox series

Patch

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.