DPDK CI discussions
 help / color / mirror / Atom feed
* [PATCH] pw_maintainers_cli: enhance tree selection
@ 2023-09-29  8:34 pbhagavatula
  2023-09-29  9:21 ` Pavan Nikhilesh Bhagavatula
  2023-09-29 13:17 ` [PATCH v2] pw_maintainers_cli: enhance ci " pbhagavatula
  0 siblings, 2 replies; 13+ messages in thread
From: pbhagavatula @ 2023-09-29  8:34 UTC (permalink / raw)
  To: jerinj, alialnu, aconole; +Cc: ci, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

When longest prefix match doesnt find a suitable tree, pick the
tree which has the highest modified file count instead of defauting
to main tree.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 tools/pw_maintainers_cli.py | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/tools/pw_maintainers_cli.py b/tools/pw_maintainers_cli.py
index c7b5ba0..4aa46ae 100755
--- a/tools/pw_maintainers_cli.py
+++ b/tools/pw_maintainers_cli.py
@@ -46,6 +46,7 @@ import re
 import argparse
 import fnmatch
 
+from collections import Counter
 from requests.exceptions import HTTPError
 
 from git_pw import config
@@ -276,6 +277,7 @@ class Maintainers(object):
           dpdk-next-crypto + dpdk-next-virtio = dpdk
           dpdk-next-net-intel + dpdk-next-net-mlx = dpdk-next-net
         """
+        highest_tree = Counter(tree_list).most_common(1)[0][0]
         # Make sure the list is unique.
         tree_list = list(set(tree_list))
 
@@ -287,7 +289,9 @@ class Maintainers(object):
             os.path.commonprefix(_tree_list).rstrip('-').replace(
                     'dpdk-next-net-virtio', 'dpdk-next-virtio')
         # There is no 'dpdk-next' named tree.
-        if common_prefix.endswith('dpdk-next') or common_prefix.endswith('/'):
+        if common_prefix.endswith('dpdk-next'):
+            common_prefix = highest_tree
+        elif common_prefix.endswith('/'):
             common_prefix = 'git://dpdk.org/dpdk'
         return common_prefix
 
-- 
2.25.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* RE: [PATCH] pw_maintainers_cli: enhance tree selection
  2023-09-29  8:34 [PATCH] pw_maintainers_cli: enhance tree selection pbhagavatula
@ 2023-09-29  9:21 ` Pavan Nikhilesh Bhagavatula
  2023-09-29  9:40   ` David Marchand
  2023-09-29 10:21   ` Thomas Monjalon
  2023-09-29 13:17 ` [PATCH v2] pw_maintainers_cli: enhance ci " pbhagavatula
  1 sibling, 2 replies; 13+ messages in thread
From: Pavan Nikhilesh Bhagavatula @ 2023-09-29  9:21 UTC (permalink / raw)
  To: Pavan Nikhilesh Bhagavatula, Jerin Jacob Kollanukkaran, alialnu, aconole
  Cc: ci



> -----Original Message-----
> From: pbhagavatula@marvell.com <pbhagavatula@marvell.com>
> Sent: Friday, September 29, 2023 2:05 PM
> To: Jerin Jacob Kollanukkaran <jerinj@marvell.com>; alialnu@nvidia.com;
> aconole@redhat.com
> Cc: ci@dpdk.org; Pavan Nikhilesh Bhagavatula <pbhagavatula@marvell.com>
> Subject: [PATCH] pw_maintainers_cli: enhance tree selection
> 
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> 
> When longest prefix match doesnt find a suitable tree, pick the
> tree which has the highest modified file count instead of defauting
> to main tree.
> 

This change is need to find the correct branch when a patch has a specification
Change followed by a implementation of driver layer example:

https://patches.dpdk.org/project/dpdk/list/?series=29675

> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> ---
>  tools/pw_maintainers_cli.py | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/pw_maintainers_cli.py b/tools/pw_maintainers_cli.py
> index c7b5ba0..4aa46ae 100755
> --- a/tools/pw_maintainers_cli.py
> +++ b/tools/pw_maintainers_cli.py
> @@ -46,6 +46,7 @@ import re
>  import argparse
>  import fnmatch
> 
> +from collections import Counter
>  from requests.exceptions import HTTPError
> 
>  from git_pw import config
> @@ -276,6 +277,7 @@ class Maintainers(object):
>            dpdk-next-crypto + dpdk-next-virtio = dpdk
>            dpdk-next-net-intel + dpdk-next-net-mlx = dpdk-next-net
>          """
> +        highest_tree = Counter(tree_list).most_common(1)[0][0]
>          # Make sure the list is unique.
>          tree_list = list(set(tree_list))
> 
> @@ -287,7 +289,9 @@ class Maintainers(object):
>              os.path.commonprefix(_tree_list).rstrip('-').replace(
>                      'dpdk-next-net-virtio', 'dpdk-next-virtio')
>          # There is no 'dpdk-next' named tree.
> -        if common_prefix.endswith('dpdk-next') or
> common_prefix.endswith('/'):
> +        if common_prefix.endswith('dpdk-next'):
> +            common_prefix = highest_tree
> +        elif common_prefix.endswith('/'):
>              common_prefix = 'git://dpdk.org/dpdk'
>          return common_prefix
> 
> --
> 2.25.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] pw_maintainers_cli: enhance tree selection
  2023-09-29  9:21 ` Pavan Nikhilesh Bhagavatula
@ 2023-09-29  9:40   ` David Marchand
  2023-09-29 10:16     ` [EXT] " Pavan Nikhilesh Bhagavatula
  2023-09-29 10:21   ` Thomas Monjalon
  1 sibling, 1 reply; 13+ messages in thread
From: David Marchand @ 2023-09-29  9:40 UTC (permalink / raw)
  To: Pavan Nikhilesh Bhagavatula
  Cc: Jerin Jacob Kollanukkaran, alialnu, aconole, ci, Thomas Monjalon

On Fri, Sep 29, 2023 at 11:21 AM Pavan Nikhilesh Bhagavatula
<pbhagavatula@marvell.com> wrote:
> > -----Original Message-----
> > From: pbhagavatula@marvell.com <pbhagavatula@marvell.com>
> > Sent: Friday, September 29, 2023 2:05 PM
> > To: Jerin Jacob Kollanukkaran <jerinj@marvell.com>; alialnu@nvidia.com;
> > aconole@redhat.com
> > Cc: ci@dpdk.org; Pavan Nikhilesh Bhagavatula <pbhagavatula@marvell.com>
> > Subject: [PATCH] pw_maintainers_cli: enhance tree selection
> >
> > From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >
> > When longest prefix match doesnt find a suitable tree, pick the
> > tree which has the highest modified file count instead of defauting
> > to main tree.
> >

This script helps with the delegation but nothing prevents submitters
or maintainers from updating this in patchwork themselves.

I did not test it but this heuristic seems complex in how it is
affected by existing git history.
It makes this script harder to understand / predict the outcome.
I fear side effects.


>
> This change is need to find the correct branch when a patch has a specification
> Change followed by a implementation of driver layer example:

This should be in the commitlog from the start as it exposes the need,
rather than the solution implemented by the patch.

>
> https://patches.dpdk.org/project/dpdk/list/?series=29675



-- 
David Marchand


^ permalink raw reply	[flat|nested] 13+ messages in thread

* RE: [EXT] Re: [PATCH] pw_maintainers_cli: enhance tree selection
  2023-09-29  9:40   ` David Marchand
@ 2023-09-29 10:16     ` Pavan Nikhilesh Bhagavatula
  0 siblings, 0 replies; 13+ messages in thread
From: Pavan Nikhilesh Bhagavatula @ 2023-09-29 10:16 UTC (permalink / raw)
  To: David Marchand
  Cc: Jerin Jacob Kollanukkaran, alialnu, aconole, ci, Thomas Monjalon

> On Fri, Sep 29, 2023 at 11:21 AM Pavan Nikhilesh Bhagavatula
> <pbhagavatula@marvell.com> wrote:
> > > -----Original Message-----
> > > From: pbhagavatula@marvell.com <pbhagavatula@marvell.com>
> > > Sent: Friday, September 29, 2023 2:05 PM
> > > To: Jerin Jacob Kollanukkaran <jerinj@marvell.com>; alialnu@nvidia.com;
> > > aconole@redhat.com
> > > Cc: ci@dpdk.org; Pavan Nikhilesh Bhagavatula
> <pbhagavatula@marvell.com>
> > > Subject: [PATCH] pw_maintainers_cli: enhance tree selection
> > >
> > > From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > >
> > > When longest prefix match doesnt find a suitable tree, pick the
> > > tree which has the highest modified file count instead of defauting
> > > to main tree.
> > >
> 
> This script helps with the delegation but nothing prevents submitters
> or maintainers from updating this in patchwork themselves.
>

The script is used by CI to decide which branch to apply the patches on
and run the tests.

For example in the CI run http://mails.dpdk.org/archives/test-report/2023-September/468555.html
the script incorrectly picks dpdk main tree instead of dpdk-next-event and fails.

 
> I did not test it but this heuristic seems complex in how it is
> affected by existing git history.
> It makes this script harder to understand / predict the outcome.
> I fear side effects.
> 

It is not based on git history, It picks the tree based on the files that were changed in the patch.
Also, it only effects the case where its not able to find the common tree.

> 
> >
> > This change is need to find the correct branch when a patch has a
> specification
> > Change followed by a implementation of driver layer example:
> 
> This should be in the commitlog from the start as it exposes the need,
> rather than the solution implemented by the patch.
> 

I can change this in the next version.

> >
> > https://urldefense.proofpoint.com/v2/url?u=https-
> 3A__patches.dpdk.org_project_dpdk_list_-3Fseries-
> 3D29675&d=DwIFaQ&c=nKjWec2b6R0mOyPaz7xtfQ&r=E3SgYMjtKCMVsB-
> fmvgGV3o-
> g_fjLhk5Pupi9ijohpc&m=QbsEVS0vy8B7ZVY0WPAMjlHbfOxASgG_XP4P7_pri
> aunQeURVo3SJaIvt3GsjfMe&s=kdARtlZA5zKbOuliw3uJFntF-
> IjXGY8OXli9SkD2rDg&e=
> 
> 
> 
> --
> David Marchand


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] pw_maintainers_cli: enhance tree selection
  2023-09-29  9:21 ` Pavan Nikhilesh Bhagavatula
  2023-09-29  9:40   ` David Marchand
@ 2023-09-29 10:21   ` Thomas Monjalon
  2023-09-29 10:54     ` [EXT] " Pavan Nikhilesh Bhagavatula
  1 sibling, 1 reply; 13+ messages in thread
From: Thomas Monjalon @ 2023-09-29 10:21 UTC (permalink / raw)
  To: Pavan Nikhilesh Bhagavatula, Jerin Jacob Kollanukkaran, alialnu,
	aconole, ci, Pavan Nikhilesh Bhagavatula

29/09/2023 11:21, Pavan Nikhilesh Bhagavatula:
> 
> > -----Original Message-----
> > From: pbhagavatula@marvell.com <pbhagavatula@marvell.com>
> > Sent: Friday, September 29, 2023 2:05 PM
> > To: Jerin Jacob Kollanukkaran <jerinj@marvell.com>; alialnu@nvidia.com;
> > aconole@redhat.com
> > Cc: ci@dpdk.org; Pavan Nikhilesh Bhagavatula <pbhagavatula@marvell.com>
> > Subject: [PATCH] pw_maintainers_cli: enhance tree selection
> > 
> > From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > 
> > When longest prefix match doesnt find a suitable tree, pick the
> > tree which has the highest modified file count instead of defauting
> > to main tree.
> > 
> 
> This change is need to find the correct branch when a patch has a specification
> Change followed by a implementation of driver layer example:
> 
> https://patches.dpdk.org/project/dpdk/list/?series=29675

That's expected: when a series touches more than a tree scope,
it goes to main.
But that's not the issue here.
Both eventdev lib, test and drivers belong to the eventdev tree.
So why it is not already delegated to eventdev?
Please dig more.




^ permalink raw reply	[flat|nested] 13+ messages in thread

* RE: [EXT] Re: [PATCH] pw_maintainers_cli: enhance tree selection
  2023-09-29 10:21   ` Thomas Monjalon
@ 2023-09-29 10:54     ` Pavan Nikhilesh Bhagavatula
  2023-09-29 11:09       ` Thomas Monjalon
  0 siblings, 1 reply; 13+ messages in thread
From: Pavan Nikhilesh Bhagavatula @ 2023-09-29 10:54 UTC (permalink / raw)
  To: Thomas Monjalon, Jerin Jacob Kollanukkaran, alialnu, aconole, ci

> >
> > > -----Original Message-----
> > > From: pbhagavatula@marvell.com <pbhagavatula@marvell.com>
> > > Sent: Friday, September 29, 2023 2:05 PM
> > > To: Jerin Jacob Kollanukkaran <jerinj@marvell.com>; alialnu@nvidia.com;
> > > aconole@redhat.com
> > > Cc: ci@dpdk.org; Pavan Nikhilesh Bhagavatula
> <pbhagavatula@marvell.com>
> > > Subject: [PATCH] pw_maintainers_cli: enhance tree selection
> > >
> > > From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > >
> > > When longest prefix match doesnt find a suitable tree, pick the
> > > tree which has the highest modified file count instead of defauting
> > > to main tree.
> > >
> >
> > This change is need to find the correct branch when a patch has a
> specification
> > Change followed by a implementation of driver layer example:
> >
> > https://urldefense.proofpoint.com/v2/url?u=https-
> 3A__patches.dpdk.org_project_dpdk_list_-3Fseries-
> 3D29675&d=DwICAg&c=nKjWec2b6R0mOyPaz7xtfQ&r=E3SgYMjtKCMVsB-
> fmvgGV3o-g_fjLhk5Pupi9ijohpc&m=WKN1erKSjH9MuEyyRs-
> R3jYC5geZeUeNipx2GQlQpQSuQQCet70Torr1oSdZNvZp&s=6XFs2Ggg5G0VFd
> YEaRexumEXM5JKc2vs5dmrRNcIUZw&e=
> 
> That's expected: when a series touches more than a tree scope,
> it goes to main.
> But that's not the issue here.
> Both eventdev lib, test and drivers belong to the eventdev tree.
> So why it is not already delegated to eventdev?
> Please dig more.
> 
> 

The main issue is the driver implementation touches common/cnxk which ties it to 
next-net-mrvl tree which causes the conflict.

We have few options here, 
1. Based on max number of files touched per tree (Current patch)
2. Ignore  driver/common from tree selection when there is a conflict with other tree.
3. When there is a conflict between trees choose the common tree instead of company specific tree 
    Example, dpdk-next-eventdev + dpdk-next-net-mrvl = dpdk-next-eventdev






^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [EXT] Re: [PATCH] pw_maintainers_cli: enhance tree selection
  2023-09-29 10:54     ` [EXT] " Pavan Nikhilesh Bhagavatula
@ 2023-09-29 11:09       ` Thomas Monjalon
  2023-09-29 11:13         ` Jerin Jacob Kollanukkaran
  0 siblings, 1 reply; 13+ messages in thread
From: Thomas Monjalon @ 2023-09-29 11:09 UTC (permalink / raw)
  To: Jerin Jacob Kollanukkaran, alialnu, aconole, ci,
	Pavan Nikhilesh Bhagavatula

29/09/2023 12:54, Pavan Nikhilesh Bhagavatula:
> > > From: pbhagavatula@marvell.com <pbhagavatula@marvell.com>
> > > > From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > > >
> > > > When longest prefix match doesnt find a suitable tree, pick the
> > > > tree which has the highest modified file count instead of defauting
> > > > to main tree.
> > > >
> > >
> > > This change is need to find the correct branch when a patch has a
> > specification
> > > Change followed by a implementation of driver layer example:
> > >
> > > https://urldefense.proofpoint.com/v2/url?u=https-
> > 3A__patches.dpdk.org_project_dpdk_list_-3Fseries-
> > 3D29675&d=DwICAg&c=nKjWec2b6R0mOyPaz7xtfQ&r=E3SgYMjtKCMVsB-
> > fmvgGV3o-g_fjLhk5Pupi9ijohpc&m=WKN1erKSjH9MuEyyRs-
> > R3jYC5geZeUeNipx2GQlQpQSuQQCet70Torr1oSdZNvZp&s=6XFs2Ggg5G0VFd
> > YEaRexumEXM5JKc2vs5dmrRNcIUZw&e=
> > 
> > That's expected: when a series touches more than a tree scope,
> > it goes to main.
> > But that's not the issue here.
> > Both eventdev lib, test and drivers belong to the eventdev tree.
> > So why it is not already delegated to eventdev?
> > Please dig more.
> > 
> > 
> 
> The main issue is the driver implementation touches common/cnxk which ties it to 
> next-net-mrvl tree which causes the conflict.
> 
> We have few options here, 
> 1. Based on max number of files touched per tree (Current patch)
> 2. Ignore  driver/common from tree selection when there is a conflict with other tree.
> 3. When there is a conflict between trees choose the common tree instead of company specific tree 
>     Example, dpdk-next-eventdev + dpdk-next-net-mrvl = dpdk-next-eventdev

I have a preference for option 2.





^ permalink raw reply	[flat|nested] 13+ messages in thread

* RE: [EXT] Re: [PATCH] pw_maintainers_cli: enhance tree selection
  2023-09-29 11:09       ` Thomas Monjalon
@ 2023-09-29 11:13         ` Jerin Jacob Kollanukkaran
  0 siblings, 0 replies; 13+ messages in thread
From: Jerin Jacob Kollanukkaran @ 2023-09-29 11:13 UTC (permalink / raw)
  To: Thomas Monjalon, alialnu, aconole, ci, Pavan Nikhilesh Bhagavatula

> -----Original Message-----
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: Friday, September 29, 2023 4:40 PM
> To: Jerin Jacob Kollanukkaran <jerinj@marvell.com>; alialnu@nvidia.com;
> aconole@redhat.com; ci@dpdk.org; Pavan Nikhilesh Bhagavatula
> <pbhagavatula@marvell.com>
> Subject: Re: [EXT] Re: [PATCH] pw_maintainers_cli: enhance tree selection
> 
> 29/09/2023 12:54, Pavan Nikhilesh Bhagavatula:
> > > > From: pbhagavatula@marvell.com <pbhagavatula@marvell.com>
> > > > > From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > > > >
> > > > > When longest prefix match doesnt find a suitable tree, pick the
> > > > > tree which has the highest modified file count instead of
> > > > > defauting to main tree.
> > > > >
> > > >
> > > > This change is need to find the correct branch when a patch has a
> > > specification
> > > > Change followed by a implementation of driver layer example:
> > > >
> > > > https://urldefense.proofpoint.com/v2/url?u=https-
> > > 3A__patches.dpdk.org_project_dpdk_list_-3Fseries-
> > > 3D29675&d=DwICAg&c=nKjWec2b6R0mOyPaz7xtfQ&r=E3SgYMjtKCMVsB-
> > > fmvgGV3o-g_fjLhk5Pupi9ijohpc&m=WKN1erKSjH9MuEyyRs-
> > >
> R3jYC5geZeUeNipx2GQlQpQSuQQCet70Torr1oSdZNvZp&s=6XFs2Ggg5G0VFd
> > > YEaRexumEXM5JKc2vs5dmrRNcIUZw&e=
> > >
> > > That's expected: when a series touches more than a tree scope, it
> > > goes to main.
> > > But that's not the issue here.
> > > Both eventdev lib, test and drivers belong to the eventdev tree.
> > > So why it is not already delegated to eventdev?
> > > Please dig more.
> > >
> > >
> >
> > The main issue is the driver implementation touches common/cnxk which
> > ties it to next-net-mrvl tree which causes the conflict.
> >
> > We have few options here,
> > 1. Based on max number of files touched per tree (Current patch) 2.
> > Ignore  driver/common from tree selection when there is a conflict with other
> tree.
> > 3. When there is a conflict between trees choose the common tree instead of
> company specific tree
> >     Example, dpdk-next-eventdev + dpdk-next-net-mrvl =
> > dpdk-next-eventdev
> 
> I have a preference for option 2.

+1 for option 2.

> 
> 
> 


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2] pw_maintainers_cli: enhance ci tree selection
  2023-09-29  8:34 [PATCH] pw_maintainers_cli: enhance tree selection pbhagavatula
  2023-09-29  9:21 ` Pavan Nikhilesh Bhagavatula
@ 2023-09-29 13:17 ` pbhagavatula
  2023-10-12 12:59   ` Aaron Conole
  1 sibling, 1 reply; 13+ messages in thread
From: pbhagavatula @ 2023-09-29 13:17 UTC (permalink / raw)
  To: jerinj, alialnu, aconole, thomas, david.marchand; +Cc: ci, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

When longest prefix match doesnt find a suitable tree, remove the
trees of files belonging to 'drivers/common' and check if there
is any unique tree for the patchset.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 v2 Chnages:
 - Find tree by removing 'drivers/common' instead of count based
 approach.

 tools/pw_maintainers_cli.py | 31 ++++++++++++++++++++++++++-----
 1 file changed, 26 insertions(+), 5 deletions(-)

diff --git a/tools/pw_maintainers_cli.py b/tools/pw_maintainers_cli.py
index c7b5ba0..ef60df8 100755
--- a/tools/pw_maintainers_cli.py
+++ b/tools/pw_maintainers_cli.py
@@ -203,13 +203,15 @@ class Maintainers(object):
         """
         Return a git tree that matches a list of files."""
         tree_list = []
+        file_tree_map = {}
         for _file in files:
             _tree = self._get_tree(_file)
             # Having no tree means that we accept those changes going through a
             # subtree (e.g. release notes).
             if _tree:
                 tree_list.append(_tree)
-        tree = self.get_common_denominator(tree_list)
+                file_tree_map[_file] = _tree
+        tree = self.get_common_denominator(tree_list, file_tree_map)
         if not tree:
             tree = 'git://dpdk.org/dpdk'
         return tree
@@ -268,7 +270,7 @@ class Maintainers(object):
         self.matched[matching_pattern] = tree
         return tree

-    def get_common_denominator(self, tree_list):
+    def get_common_denominator(self, tree_list, file_tree_map):
         """Finds a common tree by finding the longest common prefix.
         Examples for expected output:
           dpdk-next-virtio + dpdk = dpdk
@@ -278,7 +280,6 @@ class Maintainers(object):
         """
         # Make sure the list is unique.
         tree_list = list(set(tree_list))
-
         # Rename dpdk-next-virtio internally to match dpdk-next-net
         _tree_list = [
                 tree.replace('dpdk-next-virtio', 'dpdk-next-net-virtio')
@@ -286,11 +287,31 @@ class Maintainers(object):
         common_prefix = \
             os.path.commonprefix(_tree_list).rstrip('-').replace(
                     'dpdk-next-net-virtio', 'dpdk-next-virtio')
-        # There is no 'dpdk-next' named tree.
-        if common_prefix.endswith('dpdk-next') or common_prefix.endswith('/'):
+        # There is no 'dpdk-next' named tree, remove files that belong
+        # to 'drivers/common' and see if we find a tree.
+        if common_prefix.endswith('dpdk-next'):
+            common_prefix = self.get_filtered_tree(file_tree_map)
+        elif common_prefix.endswith('/'):
             common_prefix = 'git://dpdk.org/dpdk'
         return common_prefix

+    def get_common_files(self, files):
+        match_list = []
+        for f in files:
+            if re.match(r"drivers\/common", f) is not None:
+                match_list.append(f)
+        return match_list
+
+    def get_filtered_tree(self, file_tree_map):
+        # Get list of files that are in 'drivers/common'
+        common_list = self.get_common_files(file_tree_map.keys())
+        for c in common_list:
+            file_tree_map.pop(c, None)
+        tree_list = list(set(file_tree_map.values()))
+        if len(tree_list) == 1:
+            return tree_list[0]
+        return None
+

 if __name__ == '__main__':
     """Main procedure."""
--
2.25.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2] pw_maintainers_cli: enhance ci tree selection
  2023-09-29 13:17 ` [PATCH v2] pw_maintainers_cli: enhance ci " pbhagavatula
@ 2023-10-12 12:59   ` Aaron Conole
  2023-10-13  5:55     ` [EXT] " Pavan Nikhilesh Bhagavatula
  0 siblings, 1 reply; 13+ messages in thread
From: Aaron Conole @ 2023-10-12 12:59 UTC (permalink / raw)
  To: pbhagavatula; +Cc: jerinj, alialnu, thomas, david.marchand, ci

<pbhagavatula@marvell.com> writes:

> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>
> When longest prefix match doesnt find a suitable tree, remove the
> trees of files belonging to 'drivers/common' and check if there
> is any unique tree for the patchset.
>
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> ---
>  v2 Chnages:
>  - Find tree by removing 'drivers/common' instead of count based
>  approach.
>
>  tools/pw_maintainers_cli.py | 31 ++++++++++++++++++++++++++-----
>  1 file changed, 26 insertions(+), 5 deletions(-)
>
> diff --git a/tools/pw_maintainers_cli.py b/tools/pw_maintainers_cli.py
> index c7b5ba0..ef60df8 100755
> --- a/tools/pw_maintainers_cli.py
> +++ b/tools/pw_maintainers_cli.py
> @@ -203,13 +203,15 @@ class Maintainers(object):
>          """
>          Return a git tree that matches a list of files."""
>          tree_list = []
> +        file_tree_map = {}
>          for _file in files:
>              _tree = self._get_tree(_file)
>              # Having no tree means that we accept those changes going through a
>              # subtree (e.g. release notes).
>              if _tree:
>                  tree_list.append(_tree)
> -        tree = self.get_common_denominator(tree_list)
> +                file_tree_map[_file] = _tree
> +        tree = self.get_common_denominator(tree_list, file_tree_map)
>          if not tree:
>              tree = 'git://dpdk.org/dpdk'
>          return tree
> @@ -268,7 +270,7 @@ class Maintainers(object):
>          self.matched[matching_pattern] = tree
>          return tree
>
> -    def get_common_denominator(self, tree_list):
> +    def get_common_denominator(self, tree_list, file_tree_map):
>          """Finds a common tree by finding the longest common prefix.
>          Examples for expected output:
>            dpdk-next-virtio + dpdk = dpdk
> @@ -278,7 +280,6 @@ class Maintainers(object):
>          """
>          # Make sure the list is unique.
>          tree_list = list(set(tree_list))
> -
>          # Rename dpdk-next-virtio internally to match dpdk-next-net
>          _tree_list = [
>                  tree.replace('dpdk-next-virtio', 'dpdk-next-net-virtio')

Any reason why this whitespace is dropped here?  Otherwise, the patch
looks okay - but I don't think this line should be dropped.

If you agree, I can correct when I merge it.

> @@ -286,11 +287,31 @@ class Maintainers(object):
>          common_prefix = \
>              os.path.commonprefix(_tree_list).rstrip('-').replace(
>                      'dpdk-next-net-virtio', 'dpdk-next-virtio')
> -        # There is no 'dpdk-next' named tree.
> -        if common_prefix.endswith('dpdk-next') or common_prefix.endswith('/'):
> +        # There is no 'dpdk-next' named tree, remove files that belong
> +        # to 'drivers/common' and see if we find a tree.
> +        if common_prefix.endswith('dpdk-next'):
> +            common_prefix = self.get_filtered_tree(file_tree_map)
> +        elif common_prefix.endswith('/'):
>              common_prefix = 'git://dpdk.org/dpdk'
>          return common_prefix
>
> +    def get_common_files(self, files):
> +        match_list = []
> +        for f in files:
> +            if re.match(r"drivers\/common", f) is not None:
> +                match_list.append(f)
> +        return match_list
> +
> +    def get_filtered_tree(self, file_tree_map):
> +        # Get list of files that are in 'drivers/common'
> +        common_list = self.get_common_files(file_tree_map.keys())
> +        for c in common_list:
> +            file_tree_map.pop(c, None)
> +        tree_list = list(set(file_tree_map.values()))
> +        if len(tree_list) == 1:
> +            return tree_list[0]
> +        return None
> +
>
>  if __name__ == '__main__':
>      """Main procedure."""
> --
> 2.25.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* RE: [EXT] Re: [PATCH v2] pw_maintainers_cli: enhance ci tree selection
  2023-10-12 12:59   ` Aaron Conole
@ 2023-10-13  5:55     ` Pavan Nikhilesh Bhagavatula
  2023-12-07 13:33       ` Pavan Nikhilesh Bhagavatula
  0 siblings, 1 reply; 13+ messages in thread
From: Pavan Nikhilesh Bhagavatula @ 2023-10-13  5:55 UTC (permalink / raw)
  To: Aaron Conole
  Cc: Jerin Jacob Kollanukkaran, alialnu, thomas, david.marchand, ci

> > From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >
> > When longest prefix match doesnt find a suitable tree, remove the
> > trees of files belonging to 'drivers/common' and check if there
> > is any unique tree for the patchset.
> >
> > Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > ---
> >  v2 Chnages:
> >  - Find tree by removing 'drivers/common' instead of count based
> >  approach.
> >
> >  tools/pw_maintainers_cli.py | 31 ++++++++++++++++++++++++++-----
> >  1 file changed, 26 insertions(+), 5 deletions(-)
> >
> > diff --git a/tools/pw_maintainers_cli.py b/tools/pw_maintainers_cli.py
> > index c7b5ba0..ef60df8 100755
> > --- a/tools/pw_maintainers_cli.py
> > +++ b/tools/pw_maintainers_cli.py
> > @@ -203,13 +203,15 @@ class Maintainers(object):
> >          """
> >          Return a git tree that matches a list of files."""
> >          tree_list = []
> > +        file_tree_map = {}
> >          for _file in files:
> >              _tree = self._get_tree(_file)
> >              # Having no tree means that we accept those changes going through
> a
> >              # subtree (e.g. release notes).
> >              if _tree:
> >                  tree_list.append(_tree)
> > -        tree = self.get_common_denominator(tree_list)
> > +                file_tree_map[_file] = _tree
> > +        tree = self.get_common_denominator(tree_list, file_tree_map)
> >          if not tree:
> >              tree = 'git://dpdk.org/dpdk'
> >          return tree
> > @@ -268,7 +270,7 @@ class Maintainers(object):
> >          self.matched[matching_pattern] = tree
> >          return tree
> >
> > -    def get_common_denominator(self, tree_list):
> > +    def get_common_denominator(self, tree_list, file_tree_map):
> >          """Finds a common tree by finding the longest common prefix.
> >          Examples for expected output:
> >            dpdk-next-virtio + dpdk = dpdk
> > @@ -278,7 +280,6 @@ class Maintainers(object):
> >          """
> >          # Make sure the list is unique.
> >          tree_list = list(set(tree_list))
> > -
> >          # Rename dpdk-next-virtio internally to match dpdk-next-net
> >          _tree_list = [
> >                  tree.replace('dpdk-next-virtio', 'dpdk-next-net-virtio')
> 
> Any reason why this whitespace is dropped here?  Otherwise, the patch
> looks okay - but I don't think this line should be dropped.

The new line removal can be ignored.

> 
> If you agree, I can correct when I merge it.
> 

Yes, please.

Thanks, 
Pavan.

> > @@ -286,11 +287,31 @@ class Maintainers(object):
> >          common_prefix = \
> >              os.path.commonprefix(_tree_list).rstrip('-').replace(
> >                      'dpdk-next-net-virtio', 'dpdk-next-virtio')
> > -        # There is no 'dpdk-next' named tree.
> > -        if common_prefix.endswith('dpdk-next') or
> common_prefix.endswith('/'):
> > +        # There is no 'dpdk-next' named tree, remove files that belong
> > +        # to 'drivers/common' and see if we find a tree.
> > +        if common_prefix.endswith('dpdk-next'):
> > +            common_prefix = self.get_filtered_tree(file_tree_map)
> > +        elif common_prefix.endswith('/'):
> >              common_prefix = 'git://dpdk.org/dpdk'
> >          return common_prefix
> >
> > +    def get_common_files(self, files):
> > +        match_list = []
> > +        for f in files:
> > +            if re.match(r"drivers\/common", f) is not None:
> > +                match_list.append(f)
> > +        return match_list
> > +
> > +    def get_filtered_tree(self, file_tree_map):
> > +        # Get list of files that are in 'drivers/common'
> > +        common_list = self.get_common_files(file_tree_map.keys())
> > +        for c in common_list:
> > +            file_tree_map.pop(c, None)
> > +        tree_list = list(set(file_tree_map.values()))
> > +        if len(tree_list) == 1:
> > +            return tree_list[0]
> > +        return None
> > +
> >
> >  if __name__ == '__main__':
> >      """Main procedure."""
> > --
> > 2.25.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* RE: [EXT] Re: [PATCH v2] pw_maintainers_cli: enhance ci tree selection
  2023-10-13  5:55     ` [EXT] " Pavan Nikhilesh Bhagavatula
@ 2023-12-07 13:33       ` Pavan Nikhilesh Bhagavatula
  2023-12-07 13:44         ` Aaron Conole
  0 siblings, 1 reply; 13+ messages in thread
From: Pavan Nikhilesh Bhagavatula @ 2023-12-07 13:33 UTC (permalink / raw)
  To: Pavan Nikhilesh Bhagavatula, Aaron Conole
  Cc: Jerin Jacob Kollanukkaran, alialnu, thomas, david.marchand, ci



> -----Original Message-----
> From: Pavan Nikhilesh Bhagavatula <pbhagavatula@marvell.com>
> Sent: Friday, October 13, 2023 11:25 AM
> To: Aaron Conole <aconole@redhat.com>
> Cc: Jerin Jacob Kollanukkaran <jerinj@marvell.com>; alialnu@nvidia.com;
> thomas@monjalon.net; david.marchand@redhat.com; ci@dpdk.org
> Subject: RE: [EXT] Re: [PATCH v2] pw_maintainers_cli: enhance ci tree
> selection
> 
> > > From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > >
> > > When longest prefix match doesnt find a suitable tree, remove the
> > > trees of files belonging to 'drivers/common' and check if there
> > > is any unique tree for the patchset.
> > >
> > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > > ---
> > >  v2 Chnages:
> > >  - Find tree by removing 'drivers/common' instead of count based
> > >  approach.
> > >
> > >  tools/pw_maintainers_cli.py | 31 ++++++++++++++++++++++++++-----
> > >  1 file changed, 26 insertions(+), 5 deletions(-)
> > >
> > > diff --git a/tools/pw_maintainers_cli.py b/tools/pw_maintainers_cli.py
> > > index c7b5ba0..ef60df8 100755
> > > --- a/tools/pw_maintainers_cli.py
> > > +++ b/tools/pw_maintainers_cli.py
> > > @@ -203,13 +203,15 @@ class Maintainers(object):
> > >          """
> > >          Return a git tree that matches a list of files."""
> > >          tree_list = []
> > > +        file_tree_map = {}
> > >          for _file in files:
> > >              _tree = self._get_tree(_file)
> > >              # Having no tree means that we accept those changes going
> through
> > a
> > >              # subtree (e.g. release notes).
> > >              if _tree:
> > >                  tree_list.append(_tree)
> > > -        tree = self.get_common_denominator(tree_list)
> > > +                file_tree_map[_file] = _tree
> > > +        tree = self.get_common_denominator(tree_list, file_tree_map)
> > >          if not tree:
> > >              tree = 'git://dpdk.org/dpdk'
> > >          return tree
> > > @@ -268,7 +270,7 @@ class Maintainers(object):
> > >          self.matched[matching_pattern] = tree
> > >          return tree
> > >
> > > -    def get_common_denominator(self, tree_list):
> > > +    def get_common_denominator(self, tree_list, file_tree_map):
> > >          """Finds a common tree by finding the longest common prefix.
> > >          Examples for expected output:
> > >            dpdk-next-virtio + dpdk = dpdk
> > > @@ -278,7 +280,6 @@ class Maintainers(object):
> > >          """
> > >          # Make sure the list is unique.
> > >          tree_list = list(set(tree_list))
> > > -
> > >          # Rename dpdk-next-virtio internally to match dpdk-next-net
> > >          _tree_list = [
> > >                  tree.replace('dpdk-next-virtio', 'dpdk-next-net-virtio')
> >
> > Any reason why this whitespace is dropped here?  Otherwise, the patch
> > looks okay - but I don't think this line should be dropped.
> 
> The new line removal can be ignored.
> 
> >
> > If you agree, I can correct when I merge it.
> >
> 
> Yes, please.
> 

Ping

> Thanks,
> Pavan.
> 
> > > @@ -286,11 +287,31 @@ class Maintainers(object):
> > >          common_prefix = \
> > >              os.path.commonprefix(_tree_list).rstrip('-').replace(
> > >                      'dpdk-next-net-virtio', 'dpdk-next-virtio')
> > > -        # There is no 'dpdk-next' named tree.
> > > -        if common_prefix.endswith('dpdk-next') or
> > common_prefix.endswith('/'):
> > > +        # There is no 'dpdk-next' named tree, remove files that belong
> > > +        # to 'drivers/common' and see if we find a tree.
> > > +        if common_prefix.endswith('dpdk-next'):
> > > +            common_prefix = self.get_filtered_tree(file_tree_map)
> > > +        elif common_prefix.endswith('/'):
> > >              common_prefix = 'git://dpdk.org/dpdk'
> > >          return common_prefix
> > >
> > > +    def get_common_files(self, files):
> > > +        match_list = []
> > > +        for f in files:
> > > +            if re.match(r"drivers\/common", f) is not None:
> > > +                match_list.append(f)
> > > +        return match_list
> > > +
> > > +    def get_filtered_tree(self, file_tree_map):
> > > +        # Get list of files that are in 'drivers/common'
> > > +        common_list = self.get_common_files(file_tree_map.keys())
> > > +        for c in common_list:
> > > +            file_tree_map.pop(c, None)
> > > +        tree_list = list(set(file_tree_map.values()))
> > > +        if len(tree_list) == 1:
> > > +            return tree_list[0]
> > > +        return None
> > > +
> > >
> > >  if __name__ == '__main__':
> > >      """Main procedure."""
> > > --
> > > 2.25.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [EXT] Re: [PATCH v2] pw_maintainers_cli: enhance ci tree selection
  2023-12-07 13:33       ` Pavan Nikhilesh Bhagavatula
@ 2023-12-07 13:44         ` Aaron Conole
  0 siblings, 0 replies; 13+ messages in thread
From: Aaron Conole @ 2023-12-07 13:44 UTC (permalink / raw)
  To: Pavan Nikhilesh Bhagavatula
  Cc: Jerin Jacob Kollanukkaran, alialnu, thomas, david.marchand, ci

Pavan Nikhilesh Bhagavatula <pbhagavatula@marvell.com> writes:

>> -----Original Message-----
>> From: Pavan Nikhilesh Bhagavatula <pbhagavatula@marvell.com>
>> Sent: Friday, October 13, 2023 11:25 AM
>> To: Aaron Conole <aconole@redhat.com>
>> Cc: Jerin Jacob Kollanukkaran <jerinj@marvell.com>; alialnu@nvidia.com;
>> thomas@monjalon.net; david.marchand@redhat.com; ci@dpdk.org
>> Subject: RE: [EXT] Re: [PATCH v2] pw_maintainers_cli: enhance ci tree
>> selection
>> 
>> > > From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>> > >
>> > > When longest prefix match doesnt find a suitable tree, remove the
>> > > trees of files belonging to 'drivers/common' and check if there
>> > > is any unique tree for the patchset.
>> > >
>> > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
>> > > ---
>> > >  v2 Chnages:
>> > >  - Find tree by removing 'drivers/common' instead of count based
>> > >  approach.
>> > >
>> > >  tools/pw_maintainers_cli.py | 31 ++++++++++++++++++++++++++-----
>> > >  1 file changed, 26 insertions(+), 5 deletions(-)
>> > >
>> > > diff --git a/tools/pw_maintainers_cli.py b/tools/pw_maintainers_cli.py
>> > > index c7b5ba0..ef60df8 100755
>> > > --- a/tools/pw_maintainers_cli.py
>> > > +++ b/tools/pw_maintainers_cli.py
>> > > @@ -203,13 +203,15 @@ class Maintainers(object):
>> > >          """
>> > >          Return a git tree that matches a list of files."""
>> > >          tree_list = []
>> > > +        file_tree_map = {}
>> > >          for _file in files:
>> > >              _tree = self._get_tree(_file)
>> > >              # Having no tree means that we accept those changes going
>> through
>> > a
>> > >              # subtree (e.g. release notes).
>> > >              if _tree:
>> > >                  tree_list.append(_tree)
>> > > -        tree = self.get_common_denominator(tree_list)
>> > > +                file_tree_map[_file] = _tree
>> > > +        tree = self.get_common_denominator(tree_list, file_tree_map)
>> > >          if not tree:
>> > >              tree = 'git://dpdk.org/dpdk'
>> > >          return tree
>> > > @@ -268,7 +270,7 @@ class Maintainers(object):
>> > >          self.matched[matching_pattern] = tree
>> > >          return tree
>> > >
>> > > -    def get_common_denominator(self, tree_list):
>> > > +    def get_common_denominator(self, tree_list, file_tree_map):
>> > >          """Finds a common tree by finding the longest common prefix.
>> > >          Examples for expected output:
>> > >            dpdk-next-virtio + dpdk = dpdk
>> > > @@ -278,7 +280,6 @@ class Maintainers(object):
>> > >          """
>> > >          # Make sure the list is unique.
>> > >          tree_list = list(set(tree_list))
>> > > -
>> > >          # Rename dpdk-next-virtio internally to match dpdk-next-net
>> > >          _tree_list = [
>> > >                  tree.replace('dpdk-next-virtio', 'dpdk-next-net-virtio')
>> >
>> > Any reason why this whitespace is dropped here?  Otherwise, the patch
>> > looks okay - but I don't think this line should be dropped.
>> 
>> The new line removal can be ignored.
>> 
>> >
>> > If you agree, I can correct when I merge it.
>> >
>> 
>> Yes, please.
>> 
>
> Ping

Apologies - applied, Thanks!

>> Thanks,
>> Pavan.
>> 
>> > > @@ -286,11 +287,31 @@ class Maintainers(object):
>> > >          common_prefix = \
>> > >              os.path.commonprefix(_tree_list).rstrip('-').replace(
>> > >                      'dpdk-next-net-virtio', 'dpdk-next-virtio')
>> > > -        # There is no 'dpdk-next' named tree.
>> > > -        if common_prefix.endswith('dpdk-next') or
>> > common_prefix.endswith('/'):
>> > > +        # There is no 'dpdk-next' named tree, remove files that belong
>> > > +        # to 'drivers/common' and see if we find a tree.
>> > > +        if common_prefix.endswith('dpdk-next'):
>> > > +            common_prefix = self.get_filtered_tree(file_tree_map)
>> > > +        elif common_prefix.endswith('/'):
>> > >              common_prefix = 'git://dpdk.org/dpdk'
>> > >          return common_prefix
>> > >
>> > > +    def get_common_files(self, files):
>> > > +        match_list = []
>> > > +        for f in files:
>> > > +            if re.match(r"drivers\/common", f) is not None:
>> > > +                match_list.append(f)
>> > > +        return match_list
>> > > +
>> > > +    def get_filtered_tree(self, file_tree_map):
>> > > +        # Get list of files that are in 'drivers/common'
>> > > +        common_list = self.get_common_files(file_tree_map.keys())
>> > > +        for c in common_list:
>> > > +            file_tree_map.pop(c, None)
>> > > +        tree_list = list(set(file_tree_map.values()))
>> > > +        if len(tree_list) == 1:
>> > > +            return tree_list[0]
>> > > +        return None
>> > > +
>> > >
>> > >  if __name__ == '__main__':
>> > >      """Main procedure."""
>> > > --
>> > > 2.25.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2023-12-07 13:44 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-29  8:34 [PATCH] pw_maintainers_cli: enhance tree selection pbhagavatula
2023-09-29  9:21 ` Pavan Nikhilesh Bhagavatula
2023-09-29  9:40   ` David Marchand
2023-09-29 10:16     ` [EXT] " Pavan Nikhilesh Bhagavatula
2023-09-29 10:21   ` Thomas Monjalon
2023-09-29 10:54     ` [EXT] " Pavan Nikhilesh Bhagavatula
2023-09-29 11:09       ` Thomas Monjalon
2023-09-29 11:13         ` Jerin Jacob Kollanukkaran
2023-09-29 13:17 ` [PATCH v2] pw_maintainers_cli: enhance ci " pbhagavatula
2023-10-12 12:59   ` Aaron Conole
2023-10-13  5:55     ` [EXT] " Pavan Nikhilesh Bhagavatula
2023-12-07 13:33       ` Pavan Nikhilesh Bhagavatula
2023-12-07 13:44         ` Aaron Conole

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).