Hi!
And thanks for your feedback! Some comments below.
> -----Original Message-----
> From: Development <[email protected]> On Behalf Of
> Giuseppe D'Angelo via Development
> Sent: tiistai 27. huhtikuuta 2021 17.54
> To: [email protected]
> Subject: Re: [Development] Qt 6.1.0 release note
>
> Hi,
>
> On 27/04/2021 11:53, Jani Heikkinen wrote:
> >
> > Initial release note for Qt 6.1.0
> > here:https://code.qt.io/cgit/qt/qtreleasenotes.git/tree/qt/6.1.0/relea
> > se-note.txt
>
> I must say, I don't quite like the format used here.
>
> While having the commit SHA might be useful if someone wants to look up
> the commit corresponding to each changelog entry, there's a few things that
> don't quite sound OK to me.
>
> 0) No 72 columns wrapping. There, I said it.
That's true. We can easily add this but is this really needed nowdays anymore
(with big 4k screens)?
>
> 1) Quoting the commit message of a given change is hardly useful. That's why
> we mandate a [ChangeLog] entry, after all; commit messages must fit in 72
> columns, so they'll use a bunch of shortcuts that shouldn't be read as-is by
> end users:
> > 427da06414 QRE: discourage users from assuming that QRE stores the
> > subject > 5a0e5521e4 QVectorND: make some constructors explicit
> > 86729df9d4 QTextHtmlParserNode: Limit colspan to avoid segfault
>
> Best case scenario, they just repeat what's much better explained by the
> ChangeLog message. So why adding the commit message at all?
Well, there is other opinions as well. With commit sha and commit message
reader will be easy to check the change & get more information if needed. Ok,
maybe commit message doesn't help that much but on the other hand it doesn't
harm either...
>
> 3) The messages are grouped by submodule. But submodules are not
> relevant for end-users, end of story. Why there isn't a grouping per Qt
> module instead? We force people to add that to ChangeLogs, only to throw
> away that information?
>
> 3a) What about "meta" changes, like the ones we list under [Important
> Behavior Changes], or [Third-Party code] or whatever? Now they're thrown
> into the mix, so they don't stand out as things to watch for. I can hardly
> imagine that I need to dig into the middle of [qtdeclarative] only to find a
> behavioral change in the QML language.
It depends. Grouping based submodule makes it clear for the user in which repo
the change is. User can't checkout the qt module but the submodule and there
changes are. But I agree it could be useful to parse also tags after that
[ChangeLog] tag & group entries based on that under the submodule. But to be
honest those [ChangeLog] entries varies so much that it is really hard to
produce clear grouping & information based on that; sometimes there is only
[ChangeLog] tag, next tag after it isn't a qt module but something else etc. So
producing a note which doesn't necessarily need an manual formatting isn't that
straightforward (we have seen that in the past with those old changes files).
>
> 4) Also why not grouping by class? If now I want to find all the changes to
> QString, I have to read the entire [qtbase] thing. Again this is information
> present in the [ChangeLog]s that is getting binned.
A comment above pretty much answers to this already. And in addition: Most
probably there isn't [ChangeLog] tags in every QString related changes so you
can't get all those anywhere but from git log
>
>
> The listing of the Fixes is also questionable as well. Why not using JIRA's
> bug
> description, rather than the commit description? At least
> *that* could give better information. Is it really necessary repeating
> "fixes" a
> thousand times?
Well, there is now SHA1, Jira ID + Jira title. Jira descriptions are
inconsistent in both content and format. So I think those aren't an option. And
I think 'fixes' is needed there as well but of course that can be changed to
something better if most of us think it should be done. Let's just agree what
the format should be and we will implement it for coming releases.
>
>
> > Please review it and do needed modifications as a new change(s) in the
> > release note
> > repository:https://codereview.qt-project.org/admin/repos/qt/qtreleasen
> > otes
>
> I don't see the changes to QList/QVector/QString/QByteArray behavior that
> have just landed, for one.
Yes, those are missing from the note; initial one was done based on RC. Plan
was to update the note when final content is in place. And just to clarify:
Those changes didn't contain any [ChangeLog] tag so only bug fix section fill
contain entry/entries for those. If those needs to be in 'Important Changes'
section someone needs to add that manually; script won't notice those.
>
>
> > Target is to release Qt 6.1.0 Thu 6th May and so on it would be good to
> have needed updates in before that.
>
> So not even a RC2 after, indeed, changing the behavior of the top X most
> used classes in Qt? (Certainly of the most used one.) Oh well, I won't
> repeat my (unanswered) questions and remarks from QTBUG-91360.
RC2 will be published later this week with the fixes for this one.
So let's improve the release note to get it as good as it can be. The idea is
that we can even update the already released release's note if really needed.
So we don't need to postpone the releasing even if the note isn't as good as it
can be. And at least coming releases will have the better one. Just let's agree
what needs to be done and we try to implement improvements after that. And
meanwhile anyone can manually add updates to existing one(s) for review.
I attached a sample of parsed [ChangeLog] entries from qtbase to indicate the
inconsistency of entries. How the script should parse lines e.g. 7, 11, 21, and
28 ?
br,
Jani Heikkinen
Release Manager
['[ChangeLog][QtCore][QScopedPointer] The take() function\nhas been deprecated.
This was an API mistake, as it\nallowed the pointer/pointee to escape from the
scope,\ndefeating the point of the QScopedPointer class. If you\nneed such
semantics, use std::unique_ptr (and call\nrelease()).\n\n']
['[ChangeLog][QtGui][QFont] Indicated that setFamilies/families is\npreferred
over setFamily/family to ensure that font family names are\npreserved when
spaces, commas and so on are used in the name.\n\n']
['[ChangeLog][QtCore][QPoint] QPoint is usable in a structured\nbinding.\n\n',
'[ChangeLog][QtCore][QPointF] QPointF is usable in a structured\nbinding.\n\n']
['[ChangeLog][QtWidgets][QLayout] Added unsetContentsMargins().\n\n']
['[ChangeLog][QtCore][QMargins] QMargins is usable in a
structured\nbinding.\n\n', '[ChangeLog][QtCore][QMarginsF] QMarginsF is usable
in a structured\nbinding.\n\n']
['[ChangeLog][QtCore][QFuture] Add convenience functions to create\na ready
QFuture and a QFuture with an exception\n\n']
['[ChangeLog][QCosmeticStroker] Pen patterns are restrained to a\nmaximum
length and values of 1024, fixing oss-fuzz issue 25310.\n\n']
['[ChangeLog][QtCore][QSet] Added insert() overload taking an insertion\nhint,
for STL compatibility.\n\n']
['[ChangeLog][QtCore][QString] Added erase().\n\n',
'[ChangeLog][QtCore][QByteArray] Added erase().\n\n']
['[ChangeLog][QtCore][QDateTime] Restored pre-5.15.0 behavior when\nparsing a
date-time from a string (and document what it implies): if\nthe string has the
right form but represents a date-time that was\nskipped by a time-zone
transition (e.g. a DST spring-forward), the\ninvalid date-time object returned
can, none the less, be used to\nrecover a near-by date-time that may be more
useful in some cases.\nFrom 5.15.0 to 5.15.2 and in 6.0.0, a
default-constructed QDateTime\nwas returned in place of this more informative
invalid date-time.\n\n']
['[ChangeLog][QMetaProperty][Important Behavior
Change]\nQMetaProperty::typeName returns now always the same name as name() of
the\ncorresponding metatype. This can cause a change for enum properties\nwhich
were not fully-qualified.\n\n']
['[ChangeLog][QtWidgets][QHeaderView] Added the
sortIndicatorClearable\nproperty. Setting this property allows the user to
clear the sort\nindicator on a section, resetting the model to its default
ordering.\n\n']
['[ChangeLog][QtCore][QHash] QHash, QMultiHash and QSet now support\nfor key
types anything that can be hashed via std::hash, instead of\nalways requiring a
qHash() overload.\n\n']
['[ChangeLog][QtCore][QtNetwork] QSslSocket::verify - do not change the default
configuration\n\n']
['[ChangeLog][QtCore][QList] Added erase() and erase_if(),\nfor consistent
container erasure. Added removeIf() as a\nmethod, complementing removeOne() /
removeAll().\n\n', '[ChangeLog][QtCore][QVarLengthArray] Added erase() and
erase_if(),\nfor consistent container erasure. Added removeIf() as a\nmethod,
complementing removeOne() / removeAll().\n\n']
['[ChangeLog][QtCore][QSet] Added erase_if() for consistent\ncontainer erasure.
Added removeIf() as a method.\n\n']
['[ChangeLog][QtCore][QString] Added erase() and erase_if()\nfor consistent
container erasure.\n\n', '[ChangeLog][QtCore][QByteArray] Added erase() and
erase_if()\nfor consistent container erasure.\n\n']
['[ChangeLog][QtCore][QMap] Added removeIf() and erase_if().\n\n',
'[ChangeLog][QtCore][QMultiMap] Added removeIf() and erase_if().\n\n',
'[ChangeLog][QtCore][QHash] Added removeIf() and erase_if().\n\n',
'[ChangeLog][QtCore][QMultiHash] Added removeIf() and erase_if().\n\n']
["[ChangeLog][QtCore][QRegularExpression] QRegularExpression takes\na shallow
copy of a QString subject when matching over it. This\nmeans that users can
destroy or modify the string data while\nstill having match results over it.
This behavior is deprecated;\nin a future version of Qt, QRegularExpression
will no longer\ntake a copy. Note that behavior has always been undocumented
and\nusers were never supposed to modify a subject string while\nmatch objects
were alive on it. In practice, it's very unlikely\nthat your code is relying on
the existing behavior.\n\n"]
['[ChangeLog][QtTestLib][QtTest] When the QTEST_FATAL_FAIL\nenvironment
variable is set to a non-zero value, a test\nimmediately aborts its execution.
This is useful to debug\nintermittent failures.\n\n']
['[ChangeLog][Third-Party Code] PCRE2 has been updated to version\n10.36.\n\n']
['[ChangeLog][QtCore] The overflow-safe math functions
qAddOverflow(),\nqSubOverflow(), qMulOverflow() were added.\n\n']
['[ChangeLog][QtWidgets][QHeaderView] QStyleOptionHeader got a new
member\ntextElideMode.\n\n']
['[ChangeLog][QtCore][QString] Fixed a corner case when
using\nQString::count(QRegularExpression), causing an empty in the\nlast
position not to be accounted for in the returned result.\n\n']
['[ChangeLog][QtCore][QStringView] Added the indexOf(),
contains(),\nlastIndexOf() and count() methods taking a
QRegularExpression.\n\n']
['[ChangeLog][QtCore][QSocketNotifier] Added setSocket() and an
additional\nconstructor which requires no socket.\n\n']
['[ChangeLog][QPixmap] Opaque pixmaps on devices with a non-standard\nopaque
format will now correctly match format for faster blitting.\nSame with
semitransparent pixmaps on devices with a non-standard\nsemitransparent
format.\n\n']
["[ChangeLog][Potentially Source Breaking Change] It was possible to\ncreate a
QPropertyBinding from a property; this would steal any set\nbinding from the
property or create an invalid binding if none was set.\nUse makePropertyBinding
if you want to to create a binding which depends\non the property's value, or
takeBinding if you want to repurpose the\nproperty's binding.\n\n"]
['[ChangeLog][QtCore][QProcess] Added support for
QProcess::MergedChannels\nmode with startDetached().\n\n']
['[ChangeLog][QtCore][QProcess] Added support for\nsetStandardOutputProcess()
with startDetached().\n\n']
["[ChangeLog][QtCore][QLineF] QLineF::setLength() will now set the\nlength if
the line's length() is non-zero. Previously, it was\ndocumented to only set the
length if isNull() was false; this is a\nfuzzy check, so isNull() could be true
for a line with non-zero\nlength().\n\n"]
['[ChangeLog][QtSql] The ODBC driver now properly maps QMetaType::Float
to\nreal sql datatype and QMetaType::Short to smallint\n\n']
['[ChangeLog][QtSql][QSQLITE] The plugin now returns the extended error\ncodes
by default.\n\n']
['[ChangeLog][QtGui][Text] Fixed an issue where QPainterPath::addText()\nwould
get inconsistent kerning for smaller font sizes when hinting is\nenabled.\n\n']
['[ChangeLog][QtGui][Text] Introduced QUrlResourceProvider that allows to\nload
resources for HTML. It is intended to replace the use
of\nQTextDocument::loadResource().\n\n']
['[ChangeLog][QtCore] qIsInf(), qIsNaN() and qIsFinite() now,
like\nstd::isinf() and friends, accept integral types (returning false,\nfalse
and true, respectively) as well as floating-point ones.\n\n']
['[ChangeLog][QtTestLib] In JUnit XML, output that is\nnot a warning/error is
now logged under <system-out>\ninstead of <system-err>.\n\n']
['[ChangeLog][X11] XF86LaunchXX keys have been remapped, so the Qt names\nand
X11 names match, instead of being 2 off.\n\n']
['[ChangeLog][QtCore][QLocale] Added static languageToCode(),\ncountryToCode()
scriptToCode() methods that convert enum values\nto the respective ISO code
strings.\n\n']
['[ChangeLog][Potentially Source-Incompatible Changes] The\nQVector2D/3D/4D
converting constructors from another QVectorND\nnow explicit. This was done to
prevent a category of bugs resulting\nfrom operations accidentally mixing
QVectorND objects.\n\n']
['[ChangeLog][QtCore][QTimeZone] QTimeZone instances created by offset\nfrom
UTC (in seconds) shall now only include minutes in their ID when\nthe offset is
not a whole number of hours. They shall also include the\nseconds in their ID
when the offset is not a whole number of minutes.\n\n']
['[ChangeLog][QtWidgets][QStyle] Added\nSH_TabBar_AllowWheelScrolling as a
style hint to enable/disable\ncycling through tabs using the scroll wheel. This
defaults to\ntrue in all styles except the macOS one so there is no change
in\nexisting behavior.\n\n']
['[ChangeLog][QtSQL][SQLite] Updated to 3.34.0\n\n']
['[ChangeLog][QtGui][Text] Added render hint
flag\nQPainter::VerticalSubpixelPositioning which will position\ntext at
subpixel positions vertically whenever supported.\nIn absence of this, text
position will be rounded\nvertically as before.\n\n']
['[ChangeLog][QtCore][QLocale] Added static codeToLanguage(),\ncodeToCountry(),
codeToScript() methods that convert ISO code strings\nto the respective enum
values.\n\n']
['[ChangeLog][QtCore][QMath] Header <QMath> now provides qHypot(),
an\nimplementation of std::hypot() taking arbitrarily many numeric
values,\nincluding support for qfloat16, while avoiding the overflow
and\nunderflow problems that arise when naively taking the square root of
a\nsum of squares.\n\n']
['[ChangeLog][QtCore] Add new QJniObject, QJniEnvironment
and\nQJniExceptionCleaner APIs.\n\n']
['[ChangeLog][QtGui][Text] Fixed a possible crash with certain fonts\nwhen
shaping strings consisting only of control characters.\n\n']
['[ChangeLog][Freetype] Fixed crash when calling\nQRawFont::alphaMapForGlyph()
with subpixel antialiasing on Wayland.\n\n']
["[ChangeLog][QtCore][QList] Fixed QList::fill() regression introduced in\n6.0:
calling fill() with size < current list size wouldn't truncate the\nlist\n\n"]
['[ChangeLog][QtGui][QMatrix4x4] operator* between a QMatrix4x4 and
a\nQVector3D, QPoint, or QPointF has been deprecated in favor of map()\nand
mapVector().\n\n']
['[ChangeLog][QtGui][QMatrix4x4] The multiplication operator\n(operator*)
between a QVector3D and a QMatrix4x4 has been deprecated.\nUser code needs to
extend the QVector3D to a QVector4D first\n(by specifying the intended w
coordinate), and then multiply\nthe QVector4D by the matrix.\n\n']
['[ChangeLog][QtCore][QProcess] If a startDetached() fails to start the\ntarget
application, the QProcess object should now have a proper error\nstring in
errorString().\n\n']
['[ChangeLog][Build System] Tools that are called by the build system and\nare
unlikely to be called by the user are now installed to the
libexec\ndirectory.\n\n']
['[ChangeLog][QtNetwork][QNetworkInterface] Fixed the reporting the
"DNS\neligibility" factor (QNetworkAddressEntry::dnsEligibility) for global
IP\naddresses. Previously, QNetworkInterface interface erroneously
reported\nall global addresses as eligible, regardless of whether they had
already\nbeen deprecated by the OS or were temporary in the first place.\n\n']
['[ChangeLog][Third-Party Code] libjpeg-turbo was updated to version 2.0.6\n\n']
['[ChangeLog][QtGui][Text] Fixed matching against fonts which has a\nfamily
name that ends or starts with a space.\n\n']
['[ChangeLog][QtSQL][SQLite] Updated SQLite to v3.35.2\n\n']
['[ChangeLog][QtGui][Text] QTextDocument::setHtml: column spans are\nlimited to
20480, an arbitrarily high but reasonable value.\n\n']
['[ChangeLog][QtCore][QString] Added a constructor and a fromUtf8()\noverload
taking a `const char8_t *` argument.\n\n']
_______________________________________________
Development mailing list
[email protected]
https://lists.qt-project.org/listinfo/development