From 73e0188450af745aef1125f23b00125c6c4183c3 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Apr 18 2020 11:34:10 +0000 Subject: Improve loading tickets from git If a ticket we're loading as a close_status that isn't defined at the project level, create it. If the ticket we're loading as a status that isn't Open or Closed consider it Closed and use that status as close_status. Finally, record the closed_at value from the ticket that is being loaded if there is such value. Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure/lib/git.py b/pagure/lib/git.py index 405788e..d80d331 100644 --- a/pagure/lib/git.py +++ b/pagure/lib/git.py @@ -553,11 +553,34 @@ def update_ticket_from_git( # ticket creator agent = pagure.lib.query.search_user(session, username=agent) or user + status = json_data.get("status") + close_status = json_data.get("close_status") + if status and status.lower() not in ["open", "closed"]: + if status.lower() != "open" and close_status is None: + close_status = status + status = "Closed" + elif status.lower() != "open" and close_status is not None: + status = "Closed" + elif status: + status = status.capitalize() + + if close_status and close_status not in repo.close_status: + close_status = repo.close_status + close_status.append(close_status) + repo.close_status = close_status + session.add(repo) + session.commit() + issue = pagure.lib.query.get_issue_by_uid(session, issue_uid=issue_uid) messages = [] if not issue: + date_created = None + if json_data.get("date_created"): + date_created = datetime.datetime.utcfromtimestamp( + float(json_data.get("date_created")) + ) # Create new issue - pagure.lib.query.new_issue( + issue = pagure.lib.query.new_issue( session, repo=repo, title=json_data.get("title"), @@ -567,14 +590,17 @@ def update_ticket_from_git( issue_id=json_data.get("id"), issue_uid=issue_uid, private=json_data.get("private"), - status=json_data.get("status"), - close_status=json_data.get("close_status"), - date_created=datetime.datetime.utcfromtimestamp( - float(json_data.get("date_created")) - ), + status=status, + close_status=close_status, + date_created=date_created, notify=False, ) + if json_data.get("closed_at"): + issue.closed_at = datetime.datetime.utcfromtimestamp( + float(json_data.get("date_created")) + ) + else: # Edit existing issue msgs = pagure.lib.query.edit_issue( @@ -584,10 +610,14 @@ def update_ticket_from_git( title=json_data.get("title"), content=json_data.get("content"), priority=json_data.get("priority"), - status=json_data.get("status"), - close_status=json_data.get("close_status"), + status=status, + close_status=close_status, private=json_data.get("private"), ) + if json_data.get("closed_at"): + issue.closed_at = datetime.datetime.utcfromtimestamp( + float(json_data.get("date_created")) + ) if msgs: messages.extend(msgs) diff --git a/tests/test_pagure_lib_git.py b/tests/test_pagure_lib_git.py index 3e67d42..5bd447f 100644 --- a/tests/test_pagure_lib_git.py +++ b/tests/test_pagure_lib_git.py @@ -2122,7 +2122,9 @@ index 0000000..60f7480 self.assertIsNone(repo.issues[0].closed_at) data = { - "status": "Open", + "status": "Closed", + "close_status": "Fixed", + "closed_at": "1426595225", "title": "Rename pagure", "private": False, "content": "This is too much of a conflict with the book", @@ -2194,6 +2196,8 @@ index 0000000..60f7480 self.assertEqual(repo.issues[0].title, "fake issue for tests") self.assertEqual(repo.issues[0].depending_text, [20]) self.assertEqual(repo.issues[0].blocking_text, []) + self.assertEqual(repo.issues[0].status, "Open") + self.assertIsNone(repo.issues[0].close_status) self.assertIsNone(repo.issues[0].closed_at) # New one self.assertEqual(repo.issues[1].uid, "foobar2") @@ -2201,7 +2205,9 @@ index 0000000..60f7480 self.assertEqual(repo.issues[1].depending_text, []) self.assertEqual(repo.issues[1].blocking_text, [1]) self.assertEqual(repo.issues[1].milestone, "Future") - self.assertIsNone(repo.issues[1].closed_at) + self.assertEqual(repo.issues[1].status, "Closed") + self.assertEqual(repo.issues[1].close_status, "Fixed") + self.assertIsNotNone(repo.issues[1].closed_at) self.assertDictEqual( repo.milestones, {