mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-16 11:15:31 +00:00
move-mrs-script: Add an option to select which modules and MR to work on
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/919>
This commit is contained in:
parent
83c501eaac
commit
df7e5fb938
1 changed files with 49 additions and 2 deletions
|
@ -69,6 +69,24 @@ PARSER.add_argument(
|
||||||
),
|
),
|
||||||
required=False,
|
required=False,
|
||||||
)
|
)
|
||||||
|
PARSER.add_argument(
|
||||||
|
"-m",
|
||||||
|
"--module",
|
||||||
|
help="GStreamer module to move MRs for. All if none specified. Can be used multiple times.",
|
||||||
|
dest='modules',
|
||||||
|
action="append",
|
||||||
|
required=False,
|
||||||
|
)
|
||||||
|
PARSER.add_argument(
|
||||||
|
"--mr",
|
||||||
|
default=None,
|
||||||
|
type=int,
|
||||||
|
help=(
|
||||||
|
"Id of the MR to work on."
|
||||||
|
" One (and only one) module must be specified with `--module`."
|
||||||
|
),
|
||||||
|
required=False,
|
||||||
|
)
|
||||||
|
|
||||||
GST_PROJECTS = [
|
GST_PROJECTS = [
|
||||||
'gstreamer',
|
'gstreamer',
|
||||||
|
@ -131,9 +149,11 @@ def fprint(msg, nested=True):
|
||||||
class GstMRMover:
|
class GstMRMover:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
|
||||||
|
self.modules = []
|
||||||
self.gitlab = None
|
self.gitlab = None
|
||||||
self.config_files = []
|
self.config_files = []
|
||||||
self.gl = None
|
self.gl = None
|
||||||
|
self.mr = None
|
||||||
self.all_projects = []
|
self.all_projects = []
|
||||||
self.skipped_branches = []
|
self.skipped_branches = []
|
||||||
self.git_rename_limit = None
|
self.git_rename_limit = None
|
||||||
|
@ -259,7 +279,26 @@ class GstMRMover:
|
||||||
|
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
|
def cleanup_args(self):
|
||||||
|
if not self.modules:
|
||||||
|
if self.mr:
|
||||||
|
sys.exit(f"{red(f'Merge request #{self.mr} specified without module')}\n\n"
|
||||||
|
f"{bold(' -> Use `--module` to specify which module the MR is from.')}")
|
||||||
|
|
||||||
|
self.modules = GST_PROJECTS
|
||||||
|
else:
|
||||||
|
VALID_PROJECTS = GST_PROJECTS[1:]
|
||||||
|
for m in self.modules:
|
||||||
|
if m not in VALID_PROJECTS:
|
||||||
|
projects = '\n- '.join(VALID_PROJECTS)
|
||||||
|
sys.exit(f"{red(f'Unknown module {m}')}\nModules are:\n- {projects}")
|
||||||
|
if self.mr and len(self.modules) > 1:
|
||||||
|
sys.exit(f"{red(f'Merge request #{self.mr} specified but several modules where specified')}\n\n"
|
||||||
|
f"{bold(' -> Use `--module` only once to specify an merge request.')}")
|
||||||
|
self.modules.append(GST_PROJECTS[0])
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
|
self.cleanup_args()
|
||||||
self.gl = self.connect()
|
self.gl = self.connect()
|
||||||
self.gl.auth()
|
self.gl.auth()
|
||||||
|
|
||||||
|
@ -447,6 +486,7 @@ class GstMRMover:
|
||||||
|
|
||||||
def move_mrs(self, from_projects, to_project):
|
def move_mrs(self, from_projects, to_project):
|
||||||
failed_mrs = []
|
failed_mrs = []
|
||||||
|
found_mr = None
|
||||||
for from_project in from_projects:
|
for from_project in from_projects:
|
||||||
with nested(f'{bold(from_project.path_with_namespace)}'):
|
with nested(f'{bold(from_project.path_with_namespace)}'):
|
||||||
fprint(f'Fetching mrs')
|
fprint(f'Fetching mrs')
|
||||||
|
@ -459,6 +499,10 @@ class GstMRMover:
|
||||||
fprint(f"{green(' DONE')}\n", nested=False)
|
fprint(f"{green(' DONE')}\n", nested=False)
|
||||||
|
|
||||||
for mr in mrs:
|
for mr in mrs:
|
||||||
|
if self.mr:
|
||||||
|
if self.mr != mr.iid:
|
||||||
|
continue
|
||||||
|
found_mr = True
|
||||||
fprint(f'Moving {mr.source_branch} "{mr.title}": {URL}{from_project.path_with_namespace}/merge_requests/{mr.iid}... ')
|
fprint(f'Moving {mr.source_branch} "{mr.title}": {URL}{from_project.path_with_namespace}/merge_requests/{mr.iid}... ')
|
||||||
if mr.source_branch in self.skipped_branches:
|
if mr.source_branch in self.skipped_branches:
|
||||||
print(f"{yellow('SKIPPED')} (blacklisted branch)")
|
print(f"{yellow('SKIPPED')} (blacklisted branch)")
|
||||||
|
@ -479,8 +523,11 @@ class GstMRMover:
|
||||||
|
|
||||||
fprint(f"\n{yellow('DONE')} with {from_project.path_with_namespace}\n\n", nested=False)
|
fprint(f"\n{yellow('DONE')} with {from_project.path_with_namespace}\n\n", nested=False)
|
||||||
|
|
||||||
|
if self.mr and not found_mr:
|
||||||
|
sys.exit(bold(red(f"\n==> Couldn't find MR {self.mr} in {self.modules[0]}\n")))
|
||||||
|
|
||||||
for mr in failed_mrs:
|
for mr in failed_mrs:
|
||||||
print(f"Didn't move MR: {mr}")
|
fprint(f"Didn't move MR: {mr}\n")
|
||||||
|
|
||||||
def close_mr(self, project, to_project, mr, new_mr):
|
def close_mr(self, project, to_project, mr, new_mr):
|
||||||
if new_mr:
|
if new_mr:
|
||||||
|
@ -538,7 +585,7 @@ class GstMRMover:
|
||||||
git_rename_limit = 0
|
git_rename_limit = 0
|
||||||
if int(git_rename_limit) < 999999:
|
if int(git_rename_limit) < 999999:
|
||||||
self.git_rename_limit = git_rename_limit
|
self.git_rename_limit = git_rename_limit
|
||||||
fprint("-> Setting git rename limit to 999999 so we can properly cherry-pick between repos")
|
fprint("-> Setting git rename limit to 999999 so we can properly cherry-pick between repos\n")
|
||||||
self.git("config", "merge.renameLimit", "999999")
|
self.git("config", "merge.renameLimit", "999999")
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue