pickman: Fix rebase detection for open MRs

The GitLab list() API returns inaccurate detailed_merge_status values.
Fetch the full MR details for open MRs to get accurate rebase status.

Co-developed-by: Claude <noreply@anthropic.com>
Signed-off-by: Simon Glass <simon.glass@canonical.com>
This commit is contained in:
Simon Glass
2025-12-18 16:05:16 -07:00
parent ed3328458d
commit 88ae4fbc6c

View File

@@ -201,6 +201,7 @@ def create_mr(host, proj_path, source, target, title, desc=''):
return None
# pylint: disable=too-many-locals
def get_pickman_mrs(remote, state='opened'):
"""Get merge requests created by pickman
@@ -234,13 +235,23 @@ def get_pickman_mrs(remote, state='opened'):
pickman_mrs = []
for merge_req in mrs:
if '[pickman]' in merge_req.title:
# Check merge status - detailed_merge_status is newer API
detailed_status = getattr(merge_req, 'detailed_merge_status', '')
needs_rebase = detailed_status == 'need_rebase'
# Also check diverged_commits_count as fallback
if not needs_rebase:
diverged = getattr(merge_req, 'diverged_commits_count', 0)
needs_rebase = diverged and diverged > 0
needs_rebase = False
has_conflicts = False
# For open MRs, fetch full details since list() doesn't
# include accurate merge status fields
if state == 'opened':
full_mr = project.mergerequests.get(merge_req.iid)
has_conflicts = getattr(full_mr, 'has_conflicts', False)
# Check merge status - detailed_merge_status is newer API
detailed_status = getattr(full_mr,
'detailed_merge_status', '')
needs_rebase = detailed_status == 'need_rebase'
# Also check diverged_commits_count as fallback
if not needs_rebase:
diverged = getattr(full_mr, 'diverged_commits_count', 0)
needs_rebase = diverged and diverged > 0
pickman_mrs.append(PickmanMr(
iid=merge_req.iid,
@@ -248,7 +259,7 @@ def get_pickman_mrs(remote, state='opened'):
web_url=merge_req.web_url,
source_branch=merge_req.source_branch,
description=merge_req.description or '',
has_conflicts=getattr(merge_req, 'has_conflicts', False),
has_conflicts=has_conflicts,
needs_rebase=needs_rebase,
))
return pickman_mrs