diff mbox series

[v3,15/29] patman: Attach warnings to individual patches

Message ID 20201030034638.2858999-16-sjg@chromium.org
State Not Applicable
Headers show
Series [v3,01/29] patman: Correct operation of -n | expand

Commit Message

Simon Glass Oct. 30, 2020, 3:46 a.m. UTC
At present warnings are produced across the whole set of patches when
parsing them. It is more useful to associate each warning with the patch
(or commit) that generated it.

Attach warnings to the Commit object and move them out of PatchStream.
Also avoid generating duplicate warnings for the same commit.

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

(no changes since v1)

 tools/patman/commit.py      |  2 ++
 tools/patman/patchstream.py | 15 +++++++++++----
 2 files changed, 13 insertions(+), 4 deletions(-)

Comments

Simon Glass Nov. 3, 2020, 11:03 p.m. UTC | #1
At present warnings are produced across the whole set of patches when
parsing them. It is more useful to associate each warning with the patch
(or commit) that generated it.

Attach warnings to the Commit object and move them out of PatchStream.
Also avoid generating duplicate warnings for the same commit.

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

(no changes since v1)

 tools/patman/commit.py      |  2 ++
 tools/patman/patchstream.py | 15 +++++++++++----
 2 files changed, 13 insertions(+), 4 deletions(-)

Applied to u-boot-dm, thanks!
diff mbox series

Patch

diff --git a/tools/patman/commit.py b/tools/patman/commit.py
index 8d583c4ed39..e49bf87dfc8 100644
--- a/tools/patman/commit.py
+++ b/tools/patman/commit.py
@@ -27,6 +27,7 @@  class Commit:
         rtags: Response tags (e.g. Reviewed-by) collected by the commit, dict:
             key: rtag type (e.g. 'Reviewed-by')
             value: Set of people who gave that rtag, each a name/email string
+        warn: List of warnings for this commit, each a str
     """
     def __init__(self, hash):
         self.hash = hash
@@ -38,6 +39,7 @@  class Commit:
         self.notes = []
         self.change_id = None
         self.rtags = collections.defaultdict(set)
+        self.warn = []
 
     def AddChange(self, version, info):
         """Add a new change line to the change list for a version.
diff --git a/tools/patman/patchstream.py b/tools/patman/patchstream.py
index 9f283470bc2..880d7ddc7f2 100644
--- a/tools/patman/patchstream.py
+++ b/tools/patman/patchstream.py
@@ -68,7 +68,6 @@  class PatchStream:
         self.skip_blank = False          # True to skip a single blank line
         self.found_test = False          # Found a TEST= line
         self.lines_after_test = 0        # Number of lines found after TEST=
-        self.warn = []                   # List of warnings we have collected
         self.linenum = 1                 # Output line number we are up to
         self.in_section = None           # Name of start...END section we are in
         self.notes = []                  # Series notes
@@ -84,12 +83,20 @@  class PatchStream:
         self.commit = None               # Current commit
 
     def _add_warn(self, warn):
-        """Add a new warning to report to the user
+        """Add a new warning to report to the user about the current commit
+
+        The new warning is added to the current commit if not already present.
 
         Args:
             warn (str): Warning to report
+
+        Raises:
+            ValueError: Warning is generated with no commit associated
         """
-        self.warn.append(warn)
+        if not self.commit:
+            raise ValueError('Warning outside commit: %s' % warn)
+        if warn not in self.commit.warn:
+            self.commit.warn.append(warn)
 
     def _add_to_series(self, line, name, value):
         """Add a new Series-xxx tag.
@@ -614,7 +621,7 @@  def fix_patch(backup_dir, fname, series, cmt):
     if backup_dir:
         shutil.copy(fname, os.path.join(backup_dir, os.path.basename(fname)))
     shutil.move(tmpname, fname)
-    return pst.warn
+    return cmt.warn
 
 def fix_patches(series, fnames):
     """Fix up a list of patches identified by filenames