On 15. 7. 2026 12:06, Daniel Sahlberg wrote:
Den tis 14 juli 2026 kl 17:40 skrev <[email protected]>:

    Author: kotkov
    Date: Tue Jul 14 15:40:10 2026
    New Revision: 1936137

    Log:
    * branches/1.15.x/STATUS: Add separate sections for release
    blocker candidates
      and changes that cannot go to a later 1.15.x release (we used
    this pattern
      in 1.9.x/STATUS, should be useful here as well).

      Put all current nominations into the "other" section.

    Modified:
       subversion/branches/1.15.x/STATUS

    Modified: subversion/branches/1.15.x/STATUS
    
==============================================================================
    --- subversion/branches/1.15.x/STATUS   Tue Jul 14 15:38:15 2026 
          (r1936136)
    +++ subversion/branches/1.15.x/STATUS   Tue Jul 14 15:40:10 2026 
          (r1936137)
    @@ -12,8 +12,14 @@ delay a release, etc.

     Status of 1.15.0:

    -Candidate changes:
    -==================
    +Release blockers for 1.15.0:
    +============================
    +
    +Candidate changes that cannot go into a later 1.15.x:
    +=====================================================
    +
    +Other candidate changes:
    +========================


These headlines break the backport scripts (libraries /tools/dist/backport/*.py and the associated scripts in /tools/dist/).

More specifically, /tools/dist/backport/status.py (the library responsible for parsing STATUS) is looking for the headline "Candidate changes:". Any unknown headlines are kept as-is, so at least it didn't munch any existing nominations.

I tried this out in the recent 1936154-1936156. When the script added the nomination, it looked for a "Candidate changes:" headline and when one wasn't found, it added one last (see [1]).

I've updated the script in r1936159, changing it to first look for Other candidate changes and, if that fails, look for Candidate changes (adding the header if not found). I think that should work well enough, we can support either the "x.y.0 format" (as it is currently) or "z.y.z with z>0". The script doesn't support adding a nomination as a release blocker or as a "cannot go into a later.." but I think it isn't very high priority.

merge-approved-backports.py seems to work fine, it only looks for "Approved changes" and keep the remaining headers. It doesn't care about the order of the headers. r1936156 was done by running merge-approved-backports.py.

Does this change look ok?


It fails the rule that parsing should be immune to expected content changes. The "Approved changes" heading should always be there, STATUS file is invalid if it's not; and traditionally we've always had it at the end of the file.

Your change adapted to this single specific modification of the section headers. The next, slightly different modification will break the script again. I really think the safest way is to always insert nominations before "Approved changes" and to fail if that heading isn't there. If the headings in the file make that insertion dubious, then the heading order should be fixed anyway. In the meantime, review of the diff before commit is kind of expected.

Yes, I've looked at the script and I'm aware that the parsing code is opaque and complex. I didn't say my proposal leads to a simple change. But it does make the script more future proof.

-- Brane

Reply via email to