From b0ea4d36ff93a77f6b85918e80a42884191ddb4d Mon Sep 17 00:00:00 2001 From: Sergi Blanch Torne Date: Mon, 15 Sep 2025 15:43:38 +0200 Subject: [PATCH] ci,marge_queue: refactor the get queue method Rebuild the information gathering about the marge queue and how the information is later prompted to the user. The queue provided to the user is sorted, so the user knows what will be merged first (when the corresponding merge request pipeline succeeds). Signed-off-by: Sergi Blanch Torne Part-of: --- bin/ci/marge_queue.py | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/bin/ci/marge_queue.py b/bin/ci/marge_queue.py index de5bb14277f..fe0f338d6e4 100755 --- a/bin/ci/marge_queue.py +++ b/bin/ci/marge_queue.py @@ -124,24 +124,32 @@ class MargeQueue: return self.sorted_queue + self.undetermined -def get_merge_queue(project: Project) -> int: - mrs = project.mergerequests.list( +def get_merge_queue(project: Project) -> MargeQueue: + queue = MargeQueue() + for mr in project.mergerequests.list( assignee_id=MARGE_BOT_USER_ID, scope="all", state="opened", - get_all=True - ) - - n_mrs = len(mrs) - for mr in mrs: - updated = parser.parse(mr.updated_at) - now = datetime.now(timezone.utc) - diff = (now - updated).total_seconds() + get_all=True, + ): + marge_merge_request = MargeMergeRequest(mr) + queue.append(marge_merge_request) + for mr in queue.sorted_queue: print( - f"⛭ \u001b]8;;{mr.web_url}\u001b\\" - f"{mr.title}\u001b]8;;\u001b\\ ({pretty_duration(diff)})" + f"⛭ {mr.assigned_at:%Y-%m-%d %H:%M:%S} " + f"({pretty_duration(mr.time_enqueued.total_seconds())}) " + f"\u001b]8;;{mr.web_url}\u001b\\{mr.title}\u001b]8;;\u001b\\" ) - return n_mrs + if queue.undetermined: + print( + "Unable to determine when they where assigned to Marge:" + ) + for mr in queue.undetermined: + print( + f"⛭ {mr.updated_at:%Y-%m-%d %H:%M:%S} " + f"\u001b]8;;{mr.web_url}\u001b\\{mr.title}\u001b]8;;\u001b\\" + ) + return queue def main(): @@ -152,7 +160,7 @@ def main(): project = gl.projects.get("mesa/mesa") while True: - n_mrs = get_merge_queue(project) + n_mrs = get_merge_queue(project).n_merge_requests_enqueued print(f"Job waiting: {n_mrs}") @@ -164,7 +172,10 @@ def main(): try: time.sleep(REFRESH_WAIT) except KeyboardInterrupt: - print("Sleep interrupted from keyboard, doing one last iteration before finish.") + print( + "Sleep interrupted from keyboard, " + "doing one last iteration before finish." + ) args.wait = False