On Tue, Jul 06, 2021 at 03:20:26PM -0600, Martin Sebor via Gcc wrote:
> I came away from the recent discussion of ChangeLogs requirements
> with the impression that the PRnnnn bit should be in the subject
> (first) line and also above the ChangeLog part but doesn't need
> to be repeated again in the ChangeLog entries.  But my commit
> below was rejected last Friday with the subsequent error.  Adding
> PR middle-end/98871 to the ChangeLog entry let me push the change:
> 
> https://gcc.gnu.org/g:6feb628a706e86eb3f303aff388c74bdb29e7381
> 
> I just had the same error happen now, again with what seems like
> a valid commit message.  Did I misunderstand something or has
> something changed recently?
> 
> Martin
> 
> commit 8a6d08bb49c2b9585c2a2adbb3121f6d9347b780 (HEAD -> master)
> Author: Martin Sebor <mse...@redhat.com>
> Date:   Fri Jul 2 16:16:31 2021 -0600
> 
>     Improve warning suppression for inlined functions [PR98512].

This states a PR number on the first line
> 
>     Resolves:
>     PR middle-end/98871 - Cannot silence -Wmaybe-uninitialized at
> declaration si
> te
>     PR middle-end/98512 - #pragma GCC diagnostic ignored ineffective in
> conjunct
> ion with alias attribute

but these are intentionally not considered part of the ChangeLog entry,
so it isn't specified anywhere and that is why it has been rejected.

The ChangeLog entry must be in a rigid form so that random text in the middle
of the commit message isn't mistaken for start of the ChangeLog entry.

contrib/gcc-changelog/git_commit.py
has
author_line_regex = \
        re.compile(r'^(?P<datetime>\d{4}-\d{2}-\d{2})\ {2}(?P<name>.*  <.*>)')
changelog_regex = re.compile(r'^(?:[fF]or +)?([a-z0-9+-/]*)ChangeLog:?')
pr_regex = re.compile(r'\tPR (?P<component>[a-z+-]+\/)?([0-9]+)$')
dr_regex = re.compile(r'\tDR ([0-9]+)$')
star_prefix_regex = re.compile(r'\t\*(?P<spaces>\ *)(?P<content>.*)')
and will consider as first line of the ChangeLog part:
            if (changelog_regex.match(b) or self.find_changelog_location(b)
                    or star_prefix_regex.match(b) or pr_regex.match(b)
                    or dr_regex.match(b) or author_line_regex.match(b)
                    or b.lower().startswith(CO_AUTHORED_BY_PREFIX)):
                self.changes = body[i:]
                return
Once something is considered a ChangeLog part, everything after it has
to be a valid ChangeLog entry format.
Matching just PR component/NNNNN with random text afterwards at the start
of line or even somewhere in the middle would trigger any time one talks about 
some
PR in the description.

> 
>     gcc/ChangeLog:
> 
>             * diagnostic.c (get_any_inlining_info): New.
>             (update_effective_level_from_pragmas): Handle inlining context.
>             (diagnostic_enabled): Same.
>             (diagnostic_report_diagnostic): Same.
>             * diagnostic.h (struct diagnostic_info): Add ctor.
>             (struct diagnostic_context): Add new member.
>             * tree-diagnostic.c (set_inlining_locations): New.
>             (tree_diagnostics_defaults): Set new callback pointer.

        Jakub

Reply via email to