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