You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by to...@apache.org on 2022/07/18 05:02:05 UTC
[lucene-jira-archive] 01/01: selectively create cross-link issue
This is an automated email from the ASF dual-hosted git repository.
tomoko pushed a commit to branch improve-cross-link
in repository https://gitbox.apache.org/repos/asf/lucene-jira-archive.git
commit 7c2e494e4437496281568a8d2338a1a89b0f1c5d
Author: Tomoko Uchida <to...@gmail.com>
AuthorDate: Mon Jul 18 14:01:56 2022 +0900
selectively create cross-link issue
---
migration/src/jira_util.py | 45 +++++++++++++----
migration/src/update_issue_links.py | 96 -------------------------------------
2 files changed, 37 insertions(+), 104 deletions(-)
diff --git a/migration/src/jira_util.py b/migration/src/jira_util.py
index f5cae1f2..850b440e 100644
--- a/migration/src/jira_util.py
+++ b/migration/src/jira_util.py
@@ -234,12 +234,41 @@ def convert_text(text: str, att_replace_map: dict[str, str] = {}, account_map: d
def embed_gh_issue_link(text: str, issue_id_map: dict[str, str]) -> str:
"""Embed GitHub issue number
"""
- jira_keys = [m[1:] for m in re.findall(REGEX_JIRA_KEY, text)]
- if jira_keys:
- jira_keys = set(jira_keys)
- for key in jira_keys:
- gh_number = issue_id_map.get(key)
- if gh_number:
- new_key = f"{key} (#{gh_number})"
- text = text.replace(key, new_key)
+ def repl_simple(m: re.Match):
+ res = m.group(0)
+ gh_number = issue_id_map.get(m.group(2))
+ if gh_number:
+ res = f"{m.group(1)}#{gh_number}{m.group(3)}"
+ # print(res)
+ return res
+
+ def repl_paren(m: re.Match):
+ res = m.group(0)
+ gh_number = issue_id_map.get(m.group(2))
+ if gh_number:
+ res = f"{m.group(1)}#{gh_number}{m.group(3)}"
+ # print(res)
+ return res
+
+ def repl_bracket(m: re.Match):
+ res = m.group(0)
+ gh_number = issue_id_map.get(m.group(2))
+ if gh_number:
+ res = f"#{gh_number}"
+ # print(res)
+ return res
+
+ def repl_md_link(m: re.Match):
+ res = m.group(0)
+ gh_number = issue_id_map.get(m.group(1))
+ if gh_number:
+ res = f"{m.group(0)} (#{gh_number})"
+ print(res)
+ return res
+
+ text = re.sub(r"(\s)(LUCENE-\d+)([\s,\?\!\.])", repl_simple, text)
+ text = re.sub(r"(\()(LUCENE-\d+)(\))", repl_paren, text)
+ text = re.sub(r"(\[)(LUCENE-\d+)(\])(?!\()", repl_bracket, text)
+ text = re.sub(r"\[(LUCENE-\d+)\]\(https?[^\)]+LUCENE-\d+\)", repl_md_link, text)
+
return text
diff --git a/migration/src/update_issue_links.py b/migration/src/update_issue_links.py
deleted file mode 100644
index 3309f7dc..00000000
--- a/migration/src/update_issue_links.py
+++ /dev/null
@@ -1,96 +0,0 @@
-#
-# Deprecated.
-#
-# Update GitHub issues/comments to map Jira key to GitHub issue number
-# Usage:
-# python src/update_issue_links.py --issues <issue number list>
-# python src/update_issue_links.py
-#
-
-import argparse
-from pathlib import Path
-import sys
-import os
-
-from common import LOG_DIRNAME, MAPPINGS_DATA_DIRNAME, ISSUE_MAPPING_FILENAME, MaxRetryLimitExceedException, logging_setup, read_issue_id_map, retry_upto
-from github_issues_util import *
-from jira_util import embed_gh_issue_link
-
-
-log_dir = Path(__file__).resolve().parent.parent.joinpath(LOG_DIRNAME)
-logger = logging_setup(log_dir, "update_issue_links")
-
-
-@retry_upto(3, 1.0, logger)
-def update_issue_link_in_issue_body(issue_number: int, issue_id_map: dict[str, str], token: str, repo: str):
- body = get_issue_body(token, repo, issue_number, logger)
- if body:
- updated_body = embed_gh_issue_link(body, issue_id_map)
- if updated_body == body:
- logger.debug(f"Issue {issue_number} does not contain any cross-issue links; nothing to do.")
- return
- if update_issue_body(token, repo, issue_number, updated_body, logger):
- logger.debug(f"Issue {issue_number} was successfully updated.")
-
-
-
-@retry_upto(3, 1.0, logger)
-def update_issue_link_in_comments(issue_number: int, issue_id_map: dict[str, str], token: str, repo: str):
- comments = get_issue_comments(token, repo, issue_number, logger)
- if not comments:
- return
- logger.debug(f"# comments in issue {issue_number} = {len(comments)}")
- for comment in comments:
- id = comment.id
- body = comment.body
- updated_body = embed_gh_issue_link(body, issue_id_map)
- if updated_body == body:
- logger.debug(f"Comment {id} does not contain any cross-issue links; nothing to do.")
- continue
- if update_comment_body(token, repo, id, updated_body, logger):
- logger.debug(f"Comment {id} was successfully updated.")
-
-
-if __name__ == "__main__":
- github_token = os.getenv("GITHUB_PAT")
- if not github_token:
- print("Please set your GitHub token to GITHUB_PAT environment variable.")
- sys.exit(1)
- github_repo = os.getenv("GITHUB_REPO")
- if not github_repo:
- print("Please set GitHub repo location to GITHUB_REPO environment varialbe.")
- sys.exit(1)
-
- check_authentication(github_token)
-
- parser = argparse.ArgumentParser()
- parser.add_argument('--issues', type=int, required=False, nargs='*', help='Jira issue number list to be downloaded')
- args = parser.parse_args()
-
- mapping_data_dir = Path(__file__).resolve().parent.parent.joinpath(MAPPINGS_DATA_DIRNAME)
- issue_mapping_file = mapping_data_dir.joinpath(ISSUE_MAPPING_FILENAME)
- if not issue_mapping_file.exists():
- logger.error(f"Jira-GitHub issue id mapping file not found. {issue_mapping_file}")
- sys.exit(1)
- issue_id_map = read_issue_id_map(issue_mapping_file)
-
- issues = []
- if args.issues:
- issues = args.issues
- else:
- issues = list(issue_id_map.values())
-
- logger.info(f"Updating GitHub issues")
- for num in issues:
- try:
- update_issue_link_in_issue_body(num, issue_id_map, github_token, github_repo)
- except MaxRetryLimitExceedException:
- logger.error(f"Failed to update issue body. Skipped issue {num}")
- continue
- try:
- update_issue_link_in_comments(num, issue_id_map, github_token, github_repo)
- except MaxRetryLimitExceedException:
- logger.error(f"Failed to update issue comments. Skipped issue {num}")
- continue
-
- logger.info("Done.")
\ No newline at end of file