All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/4] patman: Speed up some operations
@ 2023-02-19 23:50 Simon Glass
  2023-02-19 23:50 ` [PATCH v2 1/4] patman: Drop an incorrect comment about git am Simon Glass
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Simon Glass @ 2023-02-19 23:50 UTC (permalink / raw)
  To: U-Boot Mailing List; +Cc: Doug Anderson, Simon Glass, Maxim Cournoyer

This little series updates patman to run the get_maintainer.py script in
parallel for each commit. It also does the same with checkpatch.

In some cases this can make a dramatic different to the speed.

Changes in v2:
- Fix 'uncorrect' typo in subject
- Fix missing 'f' on format string

Simon Glass (4):
  patman: Drop an incorrect comment about git am
  patman: Refactor MakeCcFile() into two functions
  patman: Run get_maintainer.pl in parallel
  patman: Check patches in parallel

 tools/patmanu/checkpatch.py |  46 +++++++++-------
 tools/patmanu/control.py    |   2 +-
 tools/patmanu/func_test.py  |   2 +
 tools/patmanu/series.py     | 107 ++++++++++++++++++++++++++++--------
 4 files changed, 112 insertions(+), 45 deletions(-)

-- 
2.39.2.637.g21b0678d19-goog


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

* [PATCH v2 1/4] patman: Drop an incorrect comment about git am
  2023-02-19 23:50 [PATCH v2 0/4] patman: Speed up some operations Simon Glass
@ 2023-02-19 23:50 ` Simon Glass
  2023-03-01 22:12   ` Doug Anderson
  2023-02-19 23:50 ` [PATCH v2 2/4] patman: Refactor MakeCcFile() into two functions Simon Glass
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Simon Glass @ 2023-02-19 23:50 UTC (permalink / raw)
  To: U-Boot Mailing List; +Cc: Doug Anderson, Simon Glass, Maxim Cournoyer

Patman does not do this anymore, so drop the comment.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v2:
- Fix 'uncorrect' typo in subject

 tools/patmanu/control.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/patmanu/control.py b/tools/patmanu/control.py
index b1e23870d9d..6ff94776da9 100644
--- a/tools/patmanu/control.py
+++ b/tools/patmanu/control.py
@@ -85,7 +85,7 @@ def check_patches(series, patch_files, run_checkpatch, verbose, use_tree):
     # Do a few checks on the series
     series.DoChecks()
 
-    # Check the patches, and run them through 'git am' just to be sure
+    # Check the patches
     if run_checkpatch:
         ok = checkpatch.check_patches(verbose, patch_files, use_tree)
     else:
-- 
2.39.2.637.g21b0678d19-goog


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

* [PATCH v2 2/4] patman: Refactor MakeCcFile() into two functions
  2023-02-19 23:50 [PATCH v2 0/4] patman: Speed up some operations Simon Glass
  2023-02-19 23:50 ` [PATCH v2 1/4] patman: Drop an incorrect comment about git am Simon Glass
@ 2023-02-19 23:50 ` Simon Glass
  2023-03-01 22:13   ` Doug Anderson
  2023-02-19 23:50 ` [PATCH v2 3/4] patman: Run get_maintainer.pl in parallel Simon Glass
  2023-02-19 23:50 ` [PATCH v2 4/4] patman: Check patches " Simon Glass
  3 siblings, 1 reply; 9+ messages in thread
From: Simon Glass @ 2023-02-19 23:50 UTC (permalink / raw)
  To: U-Boot Mailing List; +Cc: Doug Anderson, Simon Glass, Maxim Cournoyer

This function is quite long. Moving the handling of a commit into a
separate function. This will make it easier to do the work in parallel.

Update function comments while we are here.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v2:
- Fix missing 'f' on format string

 tools/patmanu/series.py | 80 ++++++++++++++++++++++++++++-------------
 1 file changed, 56 insertions(+), 24 deletions(-)

diff --git a/tools/patmanu/series.py b/tools/patmanu/series.py
index f2d415609d2..8ead87ef53e 100644
--- a/tools/patmanu/series.py
+++ b/tools/patmanu/series.py
@@ -234,6 +234,48 @@ class Series(dict):
             str = 'Change log exists, but no version is set'
             print(col.build(col.RED, str))
 
+    def GetCcForCommit(self, commit, process_tags, warn_on_error,
+                       add_maintainers, limit, get_maintainer_script,
+                       all_skips):
+        """Get the email CCs to use with a particular commit
+
+        Uses subject tags and get_maintainers.pl script to find people to cc
+        on a patch
+
+        Args:
+            commit (Commit): Commit to process
+            process_tags (bool): Process tags as if they were aliases
+            warn_on_error (bool): True to print a warning when an alias fails to
+                match, False to ignore it.
+            add_maintainers (bool or list of str): Either:
+                True/False to call the get_maintainers to CC maintainers
+                List of maintainers to include (for testing)
+            limit (int): Limit the length of the Cc list (None if no limit)
+            get_maintainer_script (str): The file name of the get_maintainer.pl
+                script (or compatible).
+            all_skips (set of str): Set of bouncing email address that were
+                dropped from the output
+
+        Returns:
+            list of str: List of email addresses to cc
+        """
+        cc = []
+        if process_tags:
+            cc += gitutil.build_email_list(commit.tags,
+                                           warn_on_error=warn_on_error)
+        cc += gitutil.build_email_list(commit.cc_list,
+                                       warn_on_error=warn_on_error)
+        if type(add_maintainers) == type(cc):
+            cc += add_maintainers
+        elif add_maintainers:
+            cc += get_maintainer.get_maintainer(get_maintainer_script,
+                                                commit.patch)
+        all_skips |= set(cc) & set(settings.bounces)
+        cc = list(set(cc) - set(settings.bounces))
+        if limit is not None:
+            cc = cc[:limit]
+        return cc
+
     def MakeCcFile(self, process_tags, cover_fname, warn_on_error,
                    add_maintainers, limit, get_maintainer_script):
         """Make a cc file for us to use for per-commit Cc automation
@@ -241,15 +283,15 @@ class Series(dict):
         Also stores in self._generated_cc to make ShowActions() faster.
 
         Args:
-            process_tags: Process tags as if they were aliases
-            cover_fname: If non-None the name of the cover letter.
-            warn_on_error: True to print a warning when an alias fails to match,
-                False to ignore it.
-            add_maintainers: Either:
+            process_tags (bool): Process tags as if they were aliases
+            cover_fname (str): If non-None the name of the cover letter.
+            warn_on_error (bool): True to print a warning when an alias fails to
+                match, False to ignore it.
+            add_maintainers (bool or list of str): Either:
                 True/False to call the get_maintainers to CC maintainers
                 List of maintainers to include (for testing)
-            limit: Limit the length of the Cc list (None if no limit)
-            get_maintainer_script: The file name of the get_maintainer.pl
+            limit (int): Limit the length of the Cc list (None if no limit)
+            get_maintainer_script (str): The file name of the get_maintainer.pl
                 script (or compatible).
         Return:
             Filename of temp file created
@@ -259,28 +301,18 @@ class Series(dict):
         fname = '/tmp/patman.%d' % os.getpid()
         fd = open(fname, 'w', encoding='utf-8')
         all_ccs = []
+        all_skips = set()
         for commit in self.commits:
-            cc = []
-            if process_tags:
-                cc += gitutil.build_email_list(commit.tags,
-                                               warn_on_error=warn_on_error)
-            cc += gitutil.build_email_list(commit.cc_list,
-                                           warn_on_error=warn_on_error)
-            if type(add_maintainers) == type(cc):
-                cc += add_maintainers
-            elif add_maintainers:
-
-                cc += get_maintainer.get_maintainer(get_maintainer_script,
-                                                    commit.patch)
-            for x in set(cc) & set(settings.bounces):
-                print(col.build(col.YELLOW, 'Skipping "%s"' % x))
-            cc = list(set(cc) - set(settings.bounces))
-            if limit is not None:
-                cc = cc[:limit]
+            cc = self.GetCcForCommit(commit, process_tags, warn_on_error,
+                                     add_maintainers, limit,
+                                     get_maintainer_script, all_skips)
             all_ccs += cc
             print(commit.patch, '\0'.join(sorted(set(cc))), file=fd)
             self._generated_cc[commit.patch] = cc
 
+        for x in sorted(list(all_skips)):
+            print(col.build(col.YELLOW, f'Skipping "{x}"'))
+
         if cover_fname:
             cover_cc = gitutil.build_email_list(self.get('cover_cc', ''))
             cover_cc = list(set(cover_cc + all_ccs))
-- 
2.39.2.637.g21b0678d19-goog


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

* [PATCH v2 3/4] patman: Run get_maintainer.pl in parallel
  2023-02-19 23:50 [PATCH v2 0/4] patman: Speed up some operations Simon Glass
  2023-02-19 23:50 ` [PATCH v2 1/4] patman: Drop an incorrect comment about git am Simon Glass
  2023-02-19 23:50 ` [PATCH v2 2/4] patman: Refactor MakeCcFile() into two functions Simon Glass
@ 2023-02-19 23:50 ` Simon Glass
  2023-03-01 22:13   ` Doug Anderson
  2023-02-19 23:50 ` [PATCH v2 4/4] patman: Check patches " Simon Glass
  3 siblings, 1 reply; 9+ messages in thread
From: Simon Glass @ 2023-02-19 23:50 UTC (permalink / raw)
  To: U-Boot Mailing List; +Cc: Doug Anderson, Simon Glass, Maxim Cournoyer

This script can take ages on some series. Try to limit the time by
using threads. If a few stubborn patches remain, show progress so the
user has some idea what is going on.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

(no changes since v1)

 tools/patmanu/func_test.py |  2 ++
 tools/patmanu/series.py    | 33 ++++++++++++++++++++++++++++++---
 2 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/tools/patmanu/func_test.py b/tools/patmanu/func_test.py
index 238fd5b6100..48109ae5725 100644
--- a/tools/patmanu/func_test.py
+++ b/tools/patmanu/func_test.py
@@ -240,6 +240,8 @@ class TestFunctional(unittest.TestCase):
         self.assertEqual('Change log missing for v3', next(lines))
         self.assertEqual('Change log for unknown version v4', next(lines))
         self.assertEqual("Alias 'pci' not found", next(lines))
+        while next(lines) != 'Cc processing complete':
+            pass
         self.assertIn('Dry run', next(lines))
         self.assertEqual('', next(lines))
         self.assertIn('Send a total of %d patches' % count, next(lines))
diff --git a/tools/patmanu/series.py b/tools/patmanu/series.py
index 8ead87ef53e..e7a5f91da87 100644
--- a/tools/patmanu/series.py
+++ b/tools/patmanu/series.py
@@ -5,8 +5,11 @@
 from __future__ import print_function
 
 import collections
+import concurrent.futures
 import itertools
 import os
+import sys
+import time
 
 from patmanu import get_maintainer
 from patmanu import gitutil
@@ -302,10 +305,34 @@ class Series(dict):
         fd = open(fname, 'w', encoding='utf-8')
         all_ccs = []
         all_skips = set()
+        with concurrent.futures.ThreadPoolExecutor(max_workers=16) as executor:
+            for i, commit in enumerate(self.commits):
+                commit.seq = i
+                commit.future = executor.submit(
+                    self.GetCcForCommit, commit, process_tags, warn_on_error,
+                    add_maintainers, limit, get_maintainer_script, all_skips)
+
+            # Show progress any commits that are taking forever
+            lastlen = 0
+            while True:
+                left = [commit for commit in self.commits
+                        if not commit.future.done()]
+                if not left:
+                    break
+                names = ', '.join(f'{c.seq + 1}:{c.subject}'
+                                  for c in left[:2])
+                out = f'\r{len(left)} remaining: {names}'[:79]
+                spaces = ' ' * (lastlen - len(out))
+                if lastlen:  # Don't print anything the first time
+                    print(out, spaces, end='')
+                    sys.stdout.flush()
+                lastlen = len(out)
+                time.sleep(.25)
+            print(f'\rdone{" " * lastlen}\r', end='')
+            print('Cc processing complete')
+
         for commit in self.commits:
-            cc = self.GetCcForCommit(commit, process_tags, warn_on_error,
-                                     add_maintainers, limit,
-                                     get_maintainer_script, all_skips)
+            cc = commit.future.result()
             all_ccs += cc
             print(commit.patch, '\0'.join(sorted(set(cc))), file=fd)
             self._generated_cc[commit.patch] = cc
-- 
2.39.2.637.g21b0678d19-goog


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

* [PATCH v2 4/4] patman: Check patches in parallel
  2023-02-19 23:50 [PATCH v2 0/4] patman: Speed up some operations Simon Glass
                   ` (2 preceding siblings ...)
  2023-02-19 23:50 ` [PATCH v2 3/4] patman: Run get_maintainer.pl in parallel Simon Glass
@ 2023-02-19 23:50 ` Simon Glass
  2023-03-01 22:13   ` Doug Anderson
  3 siblings, 1 reply; 9+ messages in thread
From: Simon Glass @ 2023-02-19 23:50 UTC (permalink / raw)
  To: U-Boot Mailing List; +Cc: Doug Anderson, Simon Glass, Maxim Cournoyer

For large series this can take a while. Run checkpatch in parallel to
try to reduce the time. The checkpatch information is still reported in
sequential order, so a very slow patch at the start can still slow
things down. But overall this gives good results.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

(no changes since v1)

 tools/patmanu/checkpatch.py | 46 +++++++++++++++++++++----------------
 1 file changed, 26 insertions(+), 20 deletions(-)

diff --git a/tools/patmanu/checkpatch.py b/tools/patmanu/checkpatch.py
index 55d962f536f..1317f50b464 100644
--- a/tools/patmanu/checkpatch.py
+++ b/tools/patmanu/checkpatch.py
@@ -3,6 +3,7 @@
 #
 
 import collections
+import concurrent.futures
 import os
 import re
 import sys
@@ -244,26 +245,31 @@ def check_patches(verbose, args, use_tree):
     error_count, warning_count, check_count = 0, 0, 0
     col = terminal.Color()
 
-    for fname in args:
-        result = check_patch(fname, verbose, use_tree=use_tree)
-        if not result.ok:
-            error_count += result.errors
-            warning_count += result.warnings
-            check_count += result.checks
-            print('%d errors, %d warnings, %d checks for %s:' % (result.errors,
-                    result.warnings, result.checks, col.build(col.BLUE, fname)))
-            if (len(result.problems) != result.errors + result.warnings +
-                    result.checks):
-                print("Internal error: some problems lost")
-            # Python seems to get confused by this
-            # pylint: disable=E1133
-            for item in result.problems:
-                sys.stderr.write(
-                    get_warning_msg(col, item.get('type', '<unknown>'),
-                        item.get('file', '<unknown>'),
-                        item.get('line', 0), item.get('msg', 'message')))
-            print
-            #print(stdout)
+    with concurrent.futures.ThreadPoolExecutor(max_workers=16) as executor:
+        futures = []
+        for fname in args:
+            f = executor.submit(check_patch, fname, verbose, use_tree=use_tree)
+            futures.append(f)
+
+        for fname, f in zip(args, futures):
+            result = f.result()
+            if not result.ok:
+                error_count += result.errors
+                warning_count += result.warnings
+                check_count += result.checks
+                print('%d errors, %d warnings, %d checks for %s:' % (result.errors,
+                        result.warnings, result.checks, col.build(col.BLUE, fname)))
+                if (len(result.problems) != result.errors + result.warnings +
+                        result.checks):
+                    print("Internal error: some problems lost")
+                # Python seems to get confused by this
+                # pylint: disable=E1133
+                for item in result.problems:
+                    sys.stderr.write(
+                        get_warning_msg(col, item.get('type', '<unknown>'),
+                            item.get('file', '<unknown>'),
+                            item.get('line', 0), item.get('msg', 'message')))
+                print
     if error_count or warning_count or check_count:
         str = 'checkpatch.pl found %d error(s), %d warning(s), %d checks(s)'
         color = col.GREEN
-- 
2.39.2.637.g21b0678d19-goog


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

* Re: [PATCH v2 1/4] patman: Drop an incorrect comment about git am
  2023-02-19 23:50 ` [PATCH v2 1/4] patman: Drop an incorrect comment about git am Simon Glass
@ 2023-03-01 22:12   ` Doug Anderson
  0 siblings, 0 replies; 9+ messages in thread
From: Doug Anderson @ 2023-03-01 22:12 UTC (permalink / raw)
  To: Simon Glass; +Cc: U-Boot Mailing List, Maxim Cournoyer

Hi,

On Sun, Feb 19, 2023 at 3:50 PM Simon Glass <sjg@chromium.org> wrote:
>
> Patman does not do this anymore, so drop the comment.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
> Changes in v2:
> - Fix 'uncorrect' typo in subject
>
>  tools/patmanu/control.py | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

I guess this is as-of commit 7428dc14b0f2 ("patman: Remove the -a
option") ? It would be nice to mention that in the commit message...

Reviewed-by: Douglas Anderson <dianders@chromium.org>

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

* Re: [PATCH v2 2/4] patman: Refactor MakeCcFile() into two functions
  2023-02-19 23:50 ` [PATCH v2 2/4] patman: Refactor MakeCcFile() into two functions Simon Glass
@ 2023-03-01 22:13   ` Doug Anderson
  0 siblings, 0 replies; 9+ messages in thread
From: Doug Anderson @ 2023-03-01 22:13 UTC (permalink / raw)
  To: Simon Glass; +Cc: U-Boot Mailing List, Maxim Cournoyer

Hi,

On Sun, Feb 19, 2023 at 3:50 PM Simon Glass <sjg@chromium.org> wrote:
>
> @@ -234,6 +234,48 @@ class Series(dict):
>              str = 'Change log exists, but no version is set'
>              print(col.build(col.RED, str))
>
> +    def GetCcForCommit(self, commit, process_tags, warn_on_error,
> +                       add_maintainers, limit, get_maintainer_script,
> +                       all_skips):
> +        """Get the email CCs to use with a particular commit
> +
> +        Uses subject tags and get_maintainers.pl script to find people to cc
> +        on a patch
> +
> +        Args:
> +            commit (Commit): Commit to process
> +            process_tags (bool): Process tags as if they were aliases
> +            warn_on_error (bool): True to print a warning when an alias fails to
> +                match, False to ignore it.
> +            add_maintainers (bool or list of str): Either:
> +                True/False to call the get_maintainers to CC maintainers
> +                List of maintainers to include (for testing)
> +            limit (int): Limit the length of the Cc list (None if no limit)
> +            get_maintainer_script (str): The file name of the get_maintainer.pl
> +                script (or compatible).
> +            all_skips (set of str): Set of bouncing email address that were
> +                dropped from the output

It wouldn't hurt to mention that "all_skips" is essentially a return
value from this function (this function updates it to include the
email addresses that were skipped).


> @@ -259,28 +301,18 @@ class Series(dict):
>          fname = '/tmp/patman.%d' % os.getpid()
>          fd = open(fname, 'w', encoding='utf-8')
>          all_ccs = []
> +        all_skips = set()
>          for commit in self.commits:
> -            cc = []
> -            if process_tags:
> -                cc += gitutil.build_email_list(commit.tags,
> -                                               warn_on_error=warn_on_error)
> -            cc += gitutil.build_email_list(commit.cc_list,
> -                                           warn_on_error=warn_on_error)
> -            if type(add_maintainers) == type(cc):
> -                cc += add_maintainers
> -            elif add_maintainers:
> -
> -                cc += get_maintainer.get_maintainer(get_maintainer_script,
> -                                                    commit.patch)
> -            for x in set(cc) & set(settings.bounces):
> -                print(col.build(col.YELLOW, 'Skipping "%s"' % x))
> -            cc = list(set(cc) - set(settings.bounces))
> -            if limit is not None:
> -                cc = cc[:limit]
> +            cc = self.GetCcForCommit(commit, process_tags, warn_on_error,
> +                                     add_maintainers, limit,
> +                                     get_maintainer_script, all_skips)
>              all_ccs += cc
>              print(commit.patch, '\0'.join(sorted(set(cc))), file=fd)
>              self._generated_cc[commit.patch] = cc
>
> +        for x in sorted(list(all_skips)):

Why "sorted(list(all_skips))" and not just "sorted(all_skips)"?

Both of the above are nits, so I'm OK w/:

Reviewed-by: Douglas Anderson <dianders@chromium.org>

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

* Re: [PATCH v2 3/4] patman: Run get_maintainer.pl in parallel
  2023-02-19 23:50 ` [PATCH v2 3/4] patman: Run get_maintainer.pl in parallel Simon Glass
@ 2023-03-01 22:13   ` Doug Anderson
  0 siblings, 0 replies; 9+ messages in thread
From: Doug Anderson @ 2023-03-01 22:13 UTC (permalink / raw)
  To: Simon Glass; +Cc: U-Boot Mailing List, Maxim Cournoyer

Hi,

On Sun, Feb 19, 2023 at 3:50 PM Simon Glass <sjg@chromium.org> wrote:
>
> This script can take ages on some series. Try to limit the time by
> using threads. If a few stubborn patches remain, show progress so the
> user has some idea what is going on.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
> (no changes since v1)
>
>  tools/patmanu/func_test.py |  2 ++
>  tools/patmanu/series.py    | 33 ++++++++++++++++++++++++++++++---
>  2 files changed, 32 insertions(+), 3 deletions(-)
>
> diff --git a/tools/patmanu/func_test.py b/tools/patmanu/func_test.py
> index 238fd5b6100..48109ae5725 100644
> --- a/tools/patmanu/func_test.py
> +++ b/tools/patmanu/func_test.py
> @@ -240,6 +240,8 @@ class TestFunctional(unittest.TestCase):
>          self.assertEqual('Change log missing for v3', next(lines))
>          self.assertEqual('Change log for unknown version v4', next(lines))
>          self.assertEqual("Alias 'pci' not found", next(lines))
> +        while next(lines) != 'Cc processing complete':
> +            pass
>          self.assertIn('Dry run', next(lines))
>          self.assertEqual('', next(lines))
>          self.assertIn('Send a total of %d patches' % count, next(lines))
> diff --git a/tools/patmanu/series.py b/tools/patmanu/series.py
> index 8ead87ef53e..e7a5f91da87 100644
> --- a/tools/patmanu/series.py
> +++ b/tools/patmanu/series.py
> @@ -5,8 +5,11 @@
>  from __future__ import print_function
>
>  import collections
> +import concurrent.futures
>  import itertools
>  import os
> +import sys
> +import time
>
>  from patmanu import get_maintainer
>  from patmanu import gitutil
> @@ -302,10 +305,34 @@ class Series(dict):
>          fd = open(fname, 'w', encoding='utf-8')
>          all_ccs = []
>          all_skips = set()
> +        with concurrent.futures.ThreadPoolExecutor(max_workers=16) as executor:
> +            for i, commit in enumerate(self.commits):
> +                commit.seq = i
> +                commit.future = executor.submit(
> +                    self.GetCcForCommit, commit, process_tags, warn_on_error,
> +                    add_maintainers, limit, get_maintainer_script, all_skips)
> +
> +            # Show progress any commits that are taking forever
> +            lastlen = 0
> +            while True:
> +                left = [commit for commit in self.commits
> +                        if not commit.future.done()]
> +                if not left:
> +                    break
> +                names = ', '.join(f'{c.seq + 1}:{c.subject}'
> +                                  for c in left[:2])
> +                out = f'\r{len(left)} remaining: {names}'[:79]
> +                spaces = ' ' * (lastlen - len(out))
> +                if lastlen:  # Don't print anything the first time
> +                    print(out, spaces, end='')
> +                    sys.stdout.flush()
> +                lastlen = len(out)
> +                time.sleep(.25)
> +            print(f'\rdone{" " * lastlen}\r', end='')
> +            print('Cc processing complete')
> +
>          for commit in self.commits:
> -            cc = self.GetCcForCommit(commit, process_tags, warn_on_error,
> -                                     add_maintainers, limit,
> -                                     get_maintainer_script, all_skips)
> +            cc = commit.future.result()

I've never used "concurrent.futures" before, but looks reasonable to me.

Reviewed-by: Douglas Anderson <dianders@chromium.org>

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

* Re: [PATCH v2 4/4] patman: Check patches in parallel
  2023-02-19 23:50 ` [PATCH v2 4/4] patman: Check patches " Simon Glass
@ 2023-03-01 22:13   ` Doug Anderson
  0 siblings, 0 replies; 9+ messages in thread
From: Doug Anderson @ 2023-03-01 22:13 UTC (permalink / raw)
  To: Simon Glass; +Cc: U-Boot Mailing List, Maxim Cournoyer

Hi,

On Sun, Feb 19, 2023 at 3:50 PM Simon Glass <sjg@chromium.org> wrote:
>
> For large series this can take a while. Run checkpatch in parallel to
> try to reduce the time. The checkpatch information is still reported in
> sequential order, so a very slow patch at the start can still slow
> things down. But overall this gives good results.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
> (no changes since v1)
>
>  tools/patmanu/checkpatch.py | 46 +++++++++++++++++++++----------------
>  1 file changed, 26 insertions(+), 20 deletions(-)

Reviewed-by: Douglas Anderson <dianders@chromium.org>

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

end of thread, other threads:[~2023-03-01 22:14 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-19 23:50 [PATCH v2 0/4] patman: Speed up some operations Simon Glass
2023-02-19 23:50 ` [PATCH v2 1/4] patman: Drop an incorrect comment about git am Simon Glass
2023-03-01 22:12   ` Doug Anderson
2023-02-19 23:50 ` [PATCH v2 2/4] patman: Refactor MakeCcFile() into two functions Simon Glass
2023-03-01 22:13   ` Doug Anderson
2023-02-19 23:50 ` [PATCH v2 3/4] patman: Run get_maintainer.pl in parallel Simon Glass
2023-03-01 22:13   ` Doug Anderson
2023-02-19 23:50 ` [PATCH v2 4/4] patman: Check patches " Simon Glass
2023-03-01 22:13   ` Doug Anderson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.