From 8386087d9c28d7a62a61ec365a466d7a74c85b97 Mon Sep 17 00:00:00 2001 From: Seppo Yli-Olli Date: Sun, 23 Jan 2022 17:27:27 +0200 Subject: [PATCH] Conditionally suffix batch brach based on parameter --- marge/app.py | 6 ++++++ marge/batch_job.py | 22 +++++++++++++--------- marge/job.py | 3 +++ tests/test_job.py | 1 + 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/marge/app.py b/marge/app.py index 49402d7b..4f8ac17e 100644 --- a/marge/app.py +++ b/marge/app.py @@ -227,6 +227,11 @@ def regexp(str_regex): help='Use merge commit when creating batches, so that the commits in the batch MR ' 'will be the same with in individual MRs. Requires sudo scope in the access token.\n', ) + parser.add_argument( + '--batch-branch-suffixing', + action='store_true', + help='Add target branch identifier of first pull request to batch request name', + ) parser.add_argument( '--skip-ci-batches', action='store_true', @@ -342,6 +347,7 @@ def main(args=None): use_no_ff_batches=options.use_no_ff_batches, use_merge_commit_batches=options.use_merge_commit_batches, skip_ci_batches=options.skip_ci_batches, + batch_branch_suffixing=options.batch_branch_suffixing ), batch=options.batch, cli=options.cli, diff --git a/marge/batch_job.py b/marge/batch_job.py index faf6b55f..039e8a49 100644 --- a/marge/batch_job.py +++ b/marge/batch_job.py @@ -20,11 +20,15 @@ class BatchMergeJob(MergeJob): def __init__(self, *, api, user, project, repo, options, merge_requests): super().__init__(api=api, user=user, project=project, repo=repo, options=options) self._merge_requests = merge_requests + self._batch_branch_name = BatchMergeJob.BATCH_BRANCH_NAME + if options.batch_branch_suffixing: + suffix = self._merge_requests[0].target_branch + self._batch_branch_name += "/" + suffix def remove_batch_branch(self): log.info('Removing local batch branch') try: - self._repo.remove_branch(BatchMergeJob.BATCH_BRANCH_NAME) + self._repo.remove_branch(self._batch_branch_name) except git.GitError: pass @@ -32,7 +36,7 @@ def close_batch_mr(self): log.info('Closing batch MRs') params = { 'author_id': self._user.id, - 'labels': BatchMergeJob.BATCH_BRANCH_NAME, + 'labels': self._batch_branch_name, 'state': 'opened', 'order_by': 'created_at', 'sort': 'desc', @@ -50,10 +54,10 @@ def create_batch_mr(self, target_branch): self.push_batch() log.info('Creating batch MR') params = { - 'source_branch': BatchMergeJob.BATCH_BRANCH_NAME, + 'source_branch': self._batch_branch_name, 'target_branch': target_branch, 'title': 'Marge Bot Batch MR - DO NOT TOUCH', - 'labels': BatchMergeJob.BATCH_BRANCH_NAME, + 'labels': self._batch_branch_name, } batch_mr = MergeRequest.create( api=self._api, @@ -96,7 +100,7 @@ def get_mergeable_mrs(self, merge_requests): def push_batch(self): log.info('Pushing batch branch') - self._repo.push(BatchMergeJob.BATCH_BRANCH_NAME, force=True) + self._repo.push(self._batch_branch_name, force=True) def ensure_mr_not_changed(self, merge_request): log.info('Ensuring MR !%s did not change', merge_request.iid) @@ -218,7 +222,7 @@ def execute(self): remote_target_branch_sha = self._repo.get_commit_hash('origin/%s' % target_branch) self._repo.checkout_branch(target_branch, 'origin/%s' % target_branch) - self._repo.checkout_branch(BatchMergeJob.BATCH_BRANCH_NAME, 'origin/%s' % target_branch) + self._repo.checkout_branch(self._batch_branch_name, 'origin/%s' % target_branch) batch_mr = self.create_batch_mr( target_branch=target_branch, @@ -243,7 +247,7 @@ def execute(self): ) # Update branch with MR changes batch_mr_sha = self._repo.merge( - BatchMergeJob.BATCH_BRANCH_NAME, + self._batch_branch_name, merge_request.source_branch, '-m', 'Batch merge !%s into %s (!%s)' % ( @@ -257,13 +261,13 @@ def execute(self): # Update on latest branch so it contains previous MRs self.fuse( merge_request.source_branch, - BatchMergeJob.BATCH_BRANCH_NAME, + self._batch_branch_name, source_repo_url=source_repo_url, local=True, ) # Update branch with MR changes batch_mr_sha = self._repo.fast_forward( - BatchMergeJob.BATCH_BRANCH_NAME, + self._batch_branch_name, merge_request.source_branch, local=True, ) diff --git a/marge/job.py b/marge/job.py index 7c0cd444..f3b74637 100644 --- a/marge/job.py +++ b/marge/job.py @@ -460,6 +460,7 @@ class Fusion(enum.Enum): 'use_no_ff_batches', 'use_merge_commit_batches', 'skip_ci_batches', + 'batch_branch_suffixing', ] @@ -476,6 +477,7 @@ def default( add_tested=False, add_part_of=False, add_reviewers=False, reapprove=False, approval_timeout=None, embargo=None, ci_timeout=None, fusion=Fusion.rebase, use_no_ff_batches=False, use_merge_commit_batches=False, skip_ci_batches=False, + batch_branch_suffixing=False ): approval_timeout = approval_timeout or timedelta(seconds=0) embargo = embargo or IntervalUnion.empty() @@ -492,6 +494,7 @@ def default( use_no_ff_batches=use_no_ff_batches, use_merge_commit_batches=use_merge_commit_batches, skip_ci_batches=skip_ci_batches, + batch_branch_suffixing=batch_branch_suffixing, ) diff --git a/tests/test_job.py b/tests/test_job.py index 4818b293..8048b8a3 100644 --- a/tests/test_job.py +++ b/tests/test_job.py @@ -217,6 +217,7 @@ def test_default(self): use_no_ff_batches=False, use_merge_commit_batches=False, skip_ci_batches=False, + batch_branch_suffixing=False, ) def test_default_ci_time(self):