Qt6 Enabling API Changes

From Qt Wiki
Jump to navigation Jump to search
  1. Do nothing / today / qt5.git
  2. Heads: use the latest revision of each branch (the system we used to have in the past)
  3. Modules containing pinned dependency sha1s
  4. Monolithic repository for essentials
  5. A way to stage breaking changes across modules (updating for example qtbase, qtdeclarative and qt5.git at the same time)
Option 3:
       Each module is completely self-contained, that means qt5 is not required as such (but may still exist as a collection of all modules)
       In each module we have a list of dependencies and their sha1:
       qtdeclarative depends on qtbase and svg, could for example declare:
       [requirements]
       qt/qtbase 1234fffabcde
       qt/qtsvg fffffffff
       Updates for a release (and also otherwise) must happen regularly (e.g. nightly), moving each module forward towards newer dependencies, this would be implemented as bot which updates the above mentioned requirements file.
Option 4:
       Merging at least qtbase and qtdeclarative and probably a whole lot more into one repository. Likely excluding webengine and webkit.
Option 5:
       Presumably do some annotation of the commit message in Gerrit, or figure out how to connect changes in Gerrit in another way.
       https://bugreports.qt.io/browse/QTQAINFRA-868 is related; the suggestion is essentially that all staged changes are implicitly integrated atomically.
       OpenStack's Zuul has a somewhat elaborate system to make it explicit.


Requirements 1 today 2 heads 3 modules with dependency pinning 4 monolithic repo 5 cross-module staging
API changes (across modules) hard and slow easy, resource heavy yes yes yes, but it's still possible to block qt5.git
All modules should always work (build+test) yes no yes yes yes
Simple (contributors should understand from the outside) confusing (needs knowledge of qt5.git) yes transparent but not super simple yes, from a git perspective it's easy, but testing will need added complexity to be efficient depends on how we write the UI, could need Gerrit changes
Ideally the same for Qt 5 and 6 (and 7...?) we don't want to continue with this, so no no yes mostly yes
Easy to implement yes yes needs tooling and visualization to allow us to know which modules are behind yes yes, if the easy route is taken. otherwise needs sync points across modules, may need good UI which is hard (extending Gerrit or Coin)
Amount of work none little lots git history grafting, cherry-picking is hard later, testing needs optimizing
Merges between Qt 5 and 6 easy easy easy hard easy
Release/Snapshot build Clear: Content is build at once and all leafs are based on same essential components Easier: Newest changes are always in use (also in submodule builds and so on possible compilation issues are seen already in submodule integration phase) Hopefully easier "qt5.git updates" because it's incremental. Depends a lot on good visualization and requires work. Easier Easier