From e23d2394dfa0681ec5dc6e8c1c5939a1edbf220d Mon Sep 17 00:00:00 2001 From: Fiona La Date: Thu, 27 Oct 2022 15:34:39 -0400 Subject: [PATCH 01/17] Add function to compute the default branch name from git, use the value to replace hard coded 'master' values. Co-authored-by: Kevin Gurney --- dev/merge_arrow_pr.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dev/merge_arrow_pr.py b/dev/merge_arrow_pr.py index 068dfb204e5..f06700ab68b 100755 --- a/dev/merge_arrow_pr.py +++ b/dev/merge_arrow_pr.py @@ -110,10 +110,14 @@ def strip_ci_directives(commit_message): return _REGEX_CI_DIRECTIVE.sub('', commit_message) +def git_default_branch_name(): + return run_cmd("git rev-parse --abbrev-ref origin/HEAD | sed s@origin/@@") + + def fix_version_from_branch(branch, versions): # Note: Assumes this is a sorted (newest->oldest) list of un-released # versions - if branch == "master": + if branch == git_default_branch_name(): return versions[-1] else: branch_ver = branch.replace("branch-", "") From 69f64c73bfe21699925f87cd7e1eb5ea3991b54f Mon Sep 17 00:00:00 2001 From: Fiona La Date: Thu, 27 Oct 2022 16:25:38 -0400 Subject: [PATCH 02/17] Use python for processing the default branch reference from git. Co-authored-by: Kevin Gurney --- dev/merge_arrow_pr.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev/merge_arrow_pr.py b/dev/merge_arrow_pr.py index f06700ab68b..2f5483cb542 100755 --- a/dev/merge_arrow_pr.py +++ b/dev/merge_arrow_pr.py @@ -111,7 +111,8 @@ def strip_ci_directives(commit_message): def git_default_branch_name(): - return run_cmd("git rev-parse --abbrev-ref origin/HEAD | sed s@origin/@@") + default_reference = run_cmd("git rev-parse --abbrev-ref origin/HEAD") + return default_reference.lstrip("origin/") def fix_version_from_branch(branch, versions): From 70294b389eb05c517aadcb5aa8a23ea3b3ba41ef Mon Sep 17 00:00:00 2001 From: Fiona La Date: Wed, 16 Nov 2022 11:38:46 -0500 Subject: [PATCH 03/17] Use the git environment in the yml file to get the default branch name, pass this value to the merge script. --- .github/workflows/dev.yml | 2 ++ dev/merge_arrow_pr.py | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 271a05979a5..be0c4949a4e 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -108,4 +108,6 @@ jobs: ci/scripts/release_test.sh $(pwd) - name: Run Merge Script Test shell: bash + env: + MERGE_SCRIPT_DEFAULT_BRANCH_NAME: ${{ github.event.repository.default_branch }} run: pytest -v dev/test_merge_arrow_pr.py diff --git a/dev/merge_arrow_pr.py b/dev/merge_arrow_pr.py index 2f5483cb542..ab84932a7ac 100755 --- a/dev/merge_arrow_pr.py +++ b/dev/merge_arrow_pr.py @@ -111,8 +111,7 @@ def strip_ci_directives(commit_message): def git_default_branch_name(): - default_reference = run_cmd("git rev-parse --abbrev-ref origin/HEAD") - return default_reference.lstrip("origin/") + return os.getenv("MERGE_SCRIPT_DEFAULT_BRANCH_NAME") def fix_version_from_branch(branch, versions): From a1de551d491bb719bf9b7bfece08329c5efe84a1 Mon Sep 17 00:00:00 2001 From: Fiona La Date: Wed, 16 Nov 2022 11:52:33 -0500 Subject: [PATCH 04/17] Enable users who are calling the merge script from a git repository containing a head reference to get the default branch --- dev/merge_arrow_pr.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/dev/merge_arrow_pr.py b/dev/merge_arrow_pr.py index ab84932a7ac..aa806b84acb 100755 --- a/dev/merge_arrow_pr.py +++ b/dev/merge_arrow_pr.py @@ -43,6 +43,7 @@ import sys import requests import getpass +import warnings from six.moves import input import six @@ -111,7 +112,24 @@ def strip_ci_directives(commit_message): def git_default_branch_name(): - return os.getenv("MERGE_SCRIPT_DEFAULT_BRANCH_NAME") + default_branch_name = os.getenv("MERGE_SCRIPT_DEFAULT_BRANCH_NAME") + + if default_branch_name is None: + try: + default_reference = run_cmd("git rev-parse --abbrev-ref origin/HEAD") + default_branch_name = default_reference.lstrip("origin/") + except subprocess.CalledProcessError: + # TODO: ARROW-18011 to track changing the hard coded default + # value from "master" to "main". + default_branch_name = "master" + warnings.warn('Unable to determine default branch name: ' + 'MERGE_SCRIPT_DEFAULT_BRANCH_NAME environment ' + 'variable is not set. Git repository does not ' + 'contain a \'refs/remotes/origin/HEAD\'reference. ' + ' Setting the default branch name to ' + + default_branch_name, RuntimeWarning) + + return default_branch_name def fix_version_from_branch(branch, versions): From af9a04a971ad3aed6ae8c00102933af377258714 Mon Sep 17 00:00:00 2001 From: Fiona La Date: Wed, 16 Nov 2022 12:34:52 -0500 Subject: [PATCH 05/17] Run linting --- dev/merge_arrow_pr.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/dev/merge_arrow_pr.py b/dev/merge_arrow_pr.py index aa806b84acb..9f9937d0b1c 100755 --- a/dev/merge_arrow_pr.py +++ b/dev/merge_arrow_pr.py @@ -113,21 +113,22 @@ def strip_ci_directives(commit_message): def git_default_branch_name(): default_branch_name = os.getenv("MERGE_SCRIPT_DEFAULT_BRANCH_NAME") - + if default_branch_name is None: try: - default_reference = run_cmd("git rev-parse --abbrev-ref origin/HEAD") + default_reference = run_cmd( + "git rev-parse --abbrev-ref origin/HEAD") default_branch_name = default_reference.lstrip("origin/") except subprocess.CalledProcessError: # TODO: ARROW-18011 to track changing the hard coded default # value from "master" to "main". default_branch_name = "master" warnings.warn('Unable to determine default branch name: ' - 'MERGE_SCRIPT_DEFAULT_BRANCH_NAME environment ' - 'variable is not set. Git repository does not ' - 'contain a \'refs/remotes/origin/HEAD\'reference. ' - ' Setting the default branch name to ' + - default_branch_name, RuntimeWarning) + 'MERGE_SCRIPT_DEFAULT_BRANCH_NAME environment ' + 'variable is not set. Git repository does not ' + 'contain a \'refs/remotes/origin/HEAD\'reference. ' + ' Setting the default branch name to ' + + default_branch_name, RuntimeWarning) return default_branch_name From 292694e951bd15a7ba3242c6af8722e68a3d4aa8 Mon Sep 17 00:00:00 2001 From: Fiona La Date: Fri, 6 Jan 2023 16:55:14 -0500 Subject: [PATCH 06/17] Apply branch renaming changes to refactoring changes in dev/merge_arrow_pr.py --- dev/merge_arrow_pr.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dev/merge_arrow_pr.py b/dev/merge_arrow_pr.py index 9f9937d0b1c..e0b5f95e7c2 100755 --- a/dev/merge_arrow_pr.py +++ b/dev/merge_arrow_pr.py @@ -301,8 +301,11 @@ def show(self): def get_candidate_fix_version(mainline_versions, - merge_branches=('master',), + merge_branches, maintenance_branches=()): + if merge_branches is None: + merge_branches = (git_default_branch_name(),) + all_versions = [getattr(v, "name", v) for v in mainline_versions] def version_tuple(x): From c91010d44af7604ad94f480c7063272673f4dbe5 Mon Sep 17 00:00:00 2001 From: Fiona La Date: Fri, 6 Jan 2023 17:08:09 -0500 Subject: [PATCH 07/17] Add default value for merge_branches in get_candidate_fix_version Co-authored-by: Kevin Gurney Co-authored-by: Sreehari Hegden --- dev/merge_arrow_pr.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/merge_arrow_pr.py b/dev/merge_arrow_pr.py index e0b5f95e7c2..5cbc6d72f54 100755 --- a/dev/merge_arrow_pr.py +++ b/dev/merge_arrow_pr.py @@ -301,7 +301,7 @@ def show(self): def get_candidate_fix_version(mainline_versions, - merge_branches, + merge_branches=None, maintenance_branches=()): if merge_branches is None: merge_branches = (git_default_branch_name(),) @@ -670,7 +670,7 @@ def get_primary_author(cmd, distinct_authors): def prompt_for_fix_version(cmd, issue, maintenance_branches=()): default_fix_version = get_candidate_fix_version( - issue.current_versions, + mainline_versions=issue.current_versions, maintenance_branches=maintenance_branches ) From 51aae049ef897289da47088675507f8c6b119508 Mon Sep 17 00:00:00 2001 From: Fiona La Date: Mon, 9 Jan 2023 17:03:16 -0500 Subject: [PATCH 08/17] Added rstrip command to remove newline character after retrieving default branch name via git rev-parse. --- dev/merge_arrow_pr.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/merge_arrow_pr.py b/dev/merge_arrow_pr.py index 5cbc6d72f54..df7f9c3545e 100755 --- a/dev/merge_arrow_pr.py +++ b/dev/merge_arrow_pr.py @@ -119,6 +119,7 @@ def git_default_branch_name(): default_reference = run_cmd( "git rev-parse --abbrev-ref origin/HEAD") default_branch_name = default_reference.lstrip("origin/") + default_branch_name = default_branch_name.rstrip() except subprocess.CalledProcessError: # TODO: ARROW-18011 to track changing the hard coded default # value from "master" to "main". From e3582b723a1b239118ddc5634eb643aac809b458 Mon Sep 17 00:00:00 2001 From: lafiona Date: Tue, 10 Jan 2023 17:17:45 -0500 Subject: [PATCH 09/17] Update dev/merge_arrow_pr.py to not use lstrip() Co-authored-by: Antoine Pitrou --- dev/merge_arrow_pr.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev/merge_arrow_pr.py b/dev/merge_arrow_pr.py index df7f9c3545e..cd65a5558e2 100755 --- a/dev/merge_arrow_pr.py +++ b/dev/merge_arrow_pr.py @@ -118,7 +118,8 @@ def git_default_branch_name(): try: default_reference = run_cmd( "git rev-parse --abbrev-ref origin/HEAD") - default_branch_name = default_reference.lstrip("origin/") + if default_branch_name.startswith("origin/"): + default_branch_name = default_branch_name[len("origin/"):] default_branch_name = default_branch_name.rstrip() except subprocess.CalledProcessError: # TODO: ARROW-18011 to track changing the hard coded default From 702f8e4c94dd30ea6c86f98ce09dcd00af4303f3 Mon Sep 17 00:00:00 2001 From: Fiona La Date: Tue, 10 Jan 2023 21:52:29 -0500 Subject: [PATCH 10/17] Fix startswith call to use the correct string and remove unused code and unused input argument in fix_version_from_branch() --- dev/merge_arrow_pr.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/dev/merge_arrow_pr.py b/dev/merge_arrow_pr.py index cd65a5558e2..ff213593868 100755 --- a/dev/merge_arrow_pr.py +++ b/dev/merge_arrow_pr.py @@ -118,8 +118,8 @@ def git_default_branch_name(): try: default_reference = run_cmd( "git rev-parse --abbrev-ref origin/HEAD") - if default_branch_name.startswith("origin/"): - default_branch_name = default_branch_name[len("origin/"):] + if default_reference.startswith("origin/"): + default_branch_name = default_reference[len("origin/"):] default_branch_name = default_branch_name.rstrip() except subprocess.CalledProcessError: # TODO: ARROW-18011 to track changing the hard coded default @@ -135,14 +135,10 @@ def git_default_branch_name(): return default_branch_name -def fix_version_from_branch(branch, versions): +def fix_version_from_branch(versions): # Note: Assumes this is a sorted (newest->oldest) list of un-released # versions - if branch == git_default_branch_name(): - return versions[-1] - else: - branch_ver = branch.replace("branch-", "") - return [v for v in versions if v.startswith(branch_ver)][-1] + return versions[-1] MIGRATION_COMMENT_REGEX = re.compile( @@ -331,7 +327,7 @@ def version_tuple(x): mainline_versions = [v for v in mainline_versions if f"maint-{v}" not in maintenance_branches] default_fix_versions = [ - fix_version_from_branch(x, mainline_versions) + fix_version_from_branch(mainline_versions) for x in merge_branches] return default_fix_versions[0] From f264faa11f71cddb6688ba687c0d314e9c7b7c33 Mon Sep 17 00:00:00 2001 From: Fiona La Date: Wed, 11 Jan 2023 10:24:42 -0500 Subject: [PATCH 11/17] Modify call site of fix_version_from_branch to return a scalar value. --- dev/merge_arrow_pr.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/dev/merge_arrow_pr.py b/dev/merge_arrow_pr.py index ff213593868..8d0309178b4 100755 --- a/dev/merge_arrow_pr.py +++ b/dev/merge_arrow_pr.py @@ -326,11 +326,9 @@ def version_tuple(x): mainline_versions = [v for v in mainline_versions if f"maint-{v}" not in maintenance_branches] - default_fix_versions = [ - fix_version_from_branch(mainline_versions) - for x in merge_branches] + default_fix_versions = fix_version_from_branch(mainline_versions) - return default_fix_versions[0] + return default_fix_versions def format_issue_output(issue_type, issue_id, status, From db2beaf4bc5af0dc96bd00c21ec1b4e2c40ab8f0 Mon Sep 17 00:00:00 2001 From: Fiona La Date: Thu, 12 Jan 2023 14:14:07 -0500 Subject: [PATCH 12/17] Remove merge_branches in argument list and body of get_candidate_fix_version(). --- dev/merge_arrow_pr.py | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/dev/merge_arrow_pr.py b/dev/merge_arrow_pr.py index 8d0309178b4..0bf1bae1dec 100755 --- a/dev/merge_arrow_pr.py +++ b/dev/merge_arrow_pr.py @@ -110,31 +110,6 @@ def strip_ci_directives(commit_message): # commit message return _REGEX_CI_DIRECTIVE.sub('', commit_message) - -def git_default_branch_name(): - default_branch_name = os.getenv("MERGE_SCRIPT_DEFAULT_BRANCH_NAME") - - if default_branch_name is None: - try: - default_reference = run_cmd( - "git rev-parse --abbrev-ref origin/HEAD") - if default_reference.startswith("origin/"): - default_branch_name = default_reference[len("origin/"):] - default_branch_name = default_branch_name.rstrip() - except subprocess.CalledProcessError: - # TODO: ARROW-18011 to track changing the hard coded default - # value from "master" to "main". - default_branch_name = "master" - warnings.warn('Unable to determine default branch name: ' - 'MERGE_SCRIPT_DEFAULT_BRANCH_NAME environment ' - 'variable is not set. Git repository does not ' - 'contain a \'refs/remotes/origin/HEAD\'reference. ' - ' Setting the default branch name to ' + - default_branch_name, RuntimeWarning) - - return default_branch_name - - def fix_version_from_branch(versions): # Note: Assumes this is a sorted (newest->oldest) list of un-released # versions @@ -299,10 +274,7 @@ def show(self): def get_candidate_fix_version(mainline_versions, - merge_branches=None, maintenance_branches=()): - if merge_branches is None: - merge_branches = (git_default_branch_name(),) all_versions = [getattr(v, "name", v) for v in mainline_versions] From 6eb674cf0755a2546b3e98f0ae757ef7cf6bccc2 Mon Sep 17 00:00:00 2001 From: Fiona La Date: Thu, 12 Jan 2023 15:02:56 -0500 Subject: [PATCH 13/17] Remove extra newline. --- dev/merge_arrow_pr.py | 1 - 1 file changed, 1 deletion(-) diff --git a/dev/merge_arrow_pr.py b/dev/merge_arrow_pr.py index 0bf1bae1dec..6d35acd67c4 100755 --- a/dev/merge_arrow_pr.py +++ b/dev/merge_arrow_pr.py @@ -302,7 +302,6 @@ def version_tuple(x): return default_fix_versions - def format_issue_output(issue_type, issue_id, status, summary, assignee, components): if not assignee: From 677ad208a75f95f0a3db6d80c499a6a8af14d41b Mon Sep 17 00:00:00 2001 From: lafiona Date: Thu, 12 Jan 2023 15:06:13 -0500 Subject: [PATCH 14/17] Update dev/merge_arrow_pr.py to avoid importing "warnings" module. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Raúl Cumplido --- dev/merge_arrow_pr.py | 1 - 1 file changed, 1 deletion(-) diff --git a/dev/merge_arrow_pr.py b/dev/merge_arrow_pr.py index 6d35acd67c4..65a6b487447 100755 --- a/dev/merge_arrow_pr.py +++ b/dev/merge_arrow_pr.py @@ -43,7 +43,6 @@ import sys import requests import getpass -import warnings from six.moves import input import six From d829c55167d557f70cb2ece860938777c6cf96f1 Mon Sep 17 00:00:00 2001 From: lafiona Date: Thu, 12 Jan 2023 15:07:37 -0500 Subject: [PATCH 15/17] Update dev/merge_arrow_pr.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Raúl Cumplido --- dev/merge_arrow_pr.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/merge_arrow_pr.py b/dev/merge_arrow_pr.py index 65a6b487447..83a63e3818f 100755 --- a/dev/merge_arrow_pr.py +++ b/dev/merge_arrow_pr.py @@ -109,6 +109,7 @@ def strip_ci_directives(commit_message): # commit message return _REGEX_CI_DIRECTIVE.sub('', commit_message) + def fix_version_from_branch(versions): # Note: Assumes this is a sorted (newest->oldest) list of un-released # versions From 992eafe0ea0a0030fdf750abe9386c0a558cb698 Mon Sep 17 00:00:00 2001 From: lafiona Date: Thu, 12 Jan 2023 15:08:47 -0500 Subject: [PATCH 16/17] Update .github/workflows/dev.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Raúl Cumplido --- .github/workflows/dev.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index be0c4949a4e..271a05979a5 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -108,6 +108,4 @@ jobs: ci/scripts/release_test.sh $(pwd) - name: Run Merge Script Test shell: bash - env: - MERGE_SCRIPT_DEFAULT_BRANCH_NAME: ${{ github.event.repository.default_branch }} run: pytest -v dev/test_merge_arrow_pr.py From f59a539c91471519b5fcb69a3570c6aedf0b9577 Mon Sep 17 00:00:00 2001 From: lafiona Date: Thu, 12 Jan 2023 15:36:24 -0500 Subject: [PATCH 17/17] Update dev/merge_arrow_pr.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Raúl Cumplido --- dev/merge_arrow_pr.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/merge_arrow_pr.py b/dev/merge_arrow_pr.py index 83a63e3818f..ec0ef38b7a8 100755 --- a/dev/merge_arrow_pr.py +++ b/dev/merge_arrow_pr.py @@ -302,6 +302,7 @@ def version_tuple(x): return default_fix_versions + def format_issue_output(issue_type, issue_id, status, summary, assignee, components): if not assignee: