move-mrs-script: Add prefix to mr titles if no provided
[platform/upstream/gstreamer.git] / scripts / move_mrs_to_monorepo.py
index 8a71c88..bb4592b 100755 (executable)
@@ -1,6 +1,5 @@
 #!/usr/bin/env python3
 
-from pathlib import Path
 from urllib.parse import urlparse
 from contextlib import contextmanager
 import os
@@ -10,7 +9,15 @@ try:
     import gitlab
 except ModuleNotFoundError:
     print("========================================================================", file=sys.stderr)
-    print("ERROR: Install python-gitlab with `python3 -m pip install python-gitlab`", file=sys.stderr)
+    print("ERROR: Install python-gitlab with `python3 -m pip install python-gitlab dateutil`", file=sys.stderr)
+    print("========================================================================", file=sys.stderr)
+    sys.exit(1)
+
+try:
+    from dateutil import parser as dateparse
+except ModuleNotFoundError:
+    print("========================================================================", file=sys.stderr)
+    print("ERROR: Install dateutil with `python3 -m pip install dateutil`", file=sys.stderr)
     print("========================================================================", file=sys.stderr)
     sys.exit(1)
 import argparse
@@ -268,13 +275,17 @@ class GstMRMover:
 
         description = f"**Copied from {URL}/{project.path_with_namespace}/-/merge_requests/{mr.iid}**\n\n{mr.description}"
 
+        title = mr.title
+        if ':' not in mr.title:
+            title = f"{project.name}: {mr.title}"
+
         new_mr_dict = {
             'source_branch': branch,
             'allow_collaboration': True,
             'remove_source_branch': True,
             'target_project_id': to_project.id,
             'target_branch': MONOREPO_BRANCH,
-            'title': mr.title,
+            'title': title,
             'labels': mr.labels,
             'description': description,
         }
@@ -309,15 +320,28 @@ class GstMRMover:
 
             new_discussion = None
             for note in notes:
-                note_url = f"{mr_url}#note_{note['id']}"
-                body = f"**{note['author']['name']} - {PING_SIGN}{note['author']['username']} wrote [here]({note_url})**:\n\n"
-                body += '\n'.join([l for l in note['body'].split('\n')])
+                note = discussion.notes.get(note['id'])
+
+                note_url = f"{mr_url}#note_{note.id}"
+                when = dateparse.parse(note.created_at).strftime('on %d, %b %Y')
+                body = f"**{note.author['name']} - {PING_SIGN}{note.author['username']} wrote [here]({note_url})** {when}:\n\n"
+                body += '\n'.join([l for l in note.body.split('\n')])
+
+                obj = {
+                    'body': body,
+                    'type': note.type,
+                    'resolvable': note.resolvable,
+                }
 
-                obj = {'body': body, 'type': note['type']}
                 if new_discussion:
                     new_discussion.notes.create(obj)
                 else:
                     new_discussion = new_mr.discussions.create(obj)
+
+                if not note.resolvable or note.resolved:
+                    new_discussion.resolved = True
+                    new_discussion.save()
+
         fprint(f"{green(' OK')}\n", nested=False)
 
         print(f"New MR available at: {bold(new_mr_url)}\n")