[PATCH v3 2/4] patman: Suppress empty changelog entries

Simon Glass sjg at chromium.org
Mon May 4 16:39:07 CEST 2020


Hi Sean,

On Sun, 3 May 2020 at 15:55, Sean Anderson <seanga2 at gmail.com> wrote:
>
> Patman outputs a line for every edition of the series in every patch,
> regardless of whether any changes were made. This can result in many
> redundant lines in patch changelogs, especially when a patch did not exist
> before a certain revision. For example, the existing behaviour could result
> in a changelog of
>
> Changes in v7: None
> Changes in v6: None
> Changes in v5:
> - Make a change
>
> Changes in v4: None
>
> Changes in v3:
> - New
>
> Changes in v2: None
>
> With this patch applied and with --no-empty-changes, the same patch would
> look like
>
> (no changes since v5)
>
> Changes in v5:
> - Make a change
>
> Changes in v3:
> - New
>
> This is entirely aesthetic, but I think it reduces clutter, especially for
> patches added later on in a series.
>
> Signed-off-by: Sean Anderson <seanga2 at gmail.com>
> ---
>
> Changes in v3:
> - Document empty changelog suppression in README
> - Fix KeyError when running tests
> - Fix no changes message being output for revision 1
> - Fix no changes message sometimes being output before every
>   non-newest-revision change
> - Make the newest_version logic more robust (and ugly)
> - Update commit subject
>
> Changes in v2:
> - Add a note when there are no changes in the current revision
> - Make this the default behaviour, and remove the option
>
>  tools/patman/README    | 21 ++++++++++++++++++++
>  tools/patman/series.py | 44 +++++++++++++++++++++++++++++++-----------
>  2 files changed, 54 insertions(+), 11 deletions(-)

Reviewed-by: Simon Glass <sjg at chromium.org>

Please see comment below though.

[..]

> diff --git a/tools/patman/series.py b/tools/patman/series.py
> index 6d9d48b123..4359442174 100644
> --- a/tools/patman/series.py
> +++ b/tools/patman/series.py
> @@ -146,38 +146,60 @@ class Series(dict):
>              Changes in v4:
>              - Jog the dial back closer to the widget
>
> -            Changes in v3: None
>              Changes in v2:
>              - Fix the widget
>              - Jog the dial
>
> -            etc.
> +            If there are no new changes in a patch, a note will be added
> +
> +            (no changes since v2)
> +
> +            Changes in v2:
> +            - Fix the widget
> +            - Jog the dial
>          """
> +        versions = sorted(self.changes, reverse=True)
> +        newest_version = 1
> +        try:
> +            newest_version = max(newest_version, int(self.version))
> +        except (ValueError, KeyError):
> +            pass
> +        try:
> +            newest_version = max(newest_version, versions[0])
> +        except IndexError:
> +            pass

Can we do this without exceptions so it is more deterministic?

E.g.

if 'version' in self:
   newest_version = max(newest_version, int(self.version))
if versions:
   newest_version = max(newest_version, versions[0])

> +
>          final = []
>          process_it = self.get('process_log', '').split(',')
>          process_it = [item.strip() for item in process_it]
>          need_blank = False
> -        for change in sorted(self.changes, reverse=True):
> +        for version in versions:
>              out = []
> -            for this_commit, text in self.changes[change]:
> +            for this_commit, text in self.changes[version]:
>                  if commit and this_commit != commit:
>                      continue
>                  if 'uniq' not in process_it or text not in out:
>                      out.append(text)
> -            line = 'Changes in v%d:' % change
> -            have_changes = len(out) > 0
>              if 'sort' in process_it:
>                  out = sorted(out)
> +            have_changes = len(out) > 0
> +            line = 'Changes in v%d:' % version
>              if have_changes:
>                  out.insert(0, line)
> -            else:
> -                out = [line + ' None']
> -            if need_blank:
> -                out.insert(0, '')
> +                if version < newest_version and len(final) == 0:
> +                    out.insert(0, '')
> +                    out.insert(0, '(no changes since v%d)' % version)
> +                    newest_version = 0
> +                # Only add a new line if we output something
> +                if need_blank:
> +                    out.insert(0, '')
>              final += out
>              need_blank = have_changes
> -        if self.changes:
> +
> +        if len(final) > 0:
>              final.append('')
> +        elif newest_version != 1:
> +            final = ['(no changes since v1)', '']
>          return final
>
>      def DoChecks(self):
> --
> 2.26.2
>

Regards,
Simon


More information about the U-Boot mailing list