Make sure the links of package in Rings must are valid before processing,
otherwise someone had package linked to the Ring package in somewhere else than
Rings will breaks select/delete/rm_to_prj, ie. _link will be created. Therefore,
only return the candidate if it has proper linked from another ring and have
different package name.
Instead of always providing a full comment whenever packages are added
an original comment will be posted and diff comments will be replied to
the original comment. The diff comments will provide a summary of what
changed while the complete state can be seen in the project pseudometa.
We have a corner case that package A in Ring2 and points to package B in Ring1,
map_ring_package_to_subject have to handle that as another non-inner project
link case, ie. the sub-package link must be created.
https://github.com/openSUSE/osc-plugin-factory/issues/876
Otherwise, the rebuild command does not print output until all the
rebuilds for a whole staging are completed. With this change each package
should be printed immediately.
Using build percentage is sub-optimal since many events can reset the
percentage which can result in additional requests being merged into the
staging. A better metric is the time since the first request was added to
the staging (the age of the staging). Unfortunately, this is not trivial to
determine especially given that the original request may be superseded or
unstaged entirely. As such the datetime at which the staging was activated
is stored in the staging pseudometa. A max age is then used to allow for
merging up until that point.
- handle build disable in select command just like comment instead of
stagingapi move_between_project() for consistency and to reduce double
checking the same information via extra API calls
- build_switch_staging_project() provides target_flag parameter rather
than trying to figure out flag value since caller has the context to
know and again reduces API calls
- build_switch_staging_project() checking conditions are essentially
checking if True is True since non-adi projects will always have ring
packages or rings disabled entirely. The condition of interest is
non-empty. Additionally adi projects are removed if empty so not a
terribly useful distinction to make.
- provide helper update_status_or_deactivate() to handle common logic
and replace in calling locations