Skip to content

Commit

Permalink
- Fixes from manual test.
Browse files Browse the repository at this point in the history
  • Loading branch information
miroslavpojer committed Oct 1, 2024
1 parent d16adb0 commit 5cc9c12
Showing 1 changed file with 53 additions and 50 deletions.
103 changes: 53 additions & 50 deletions release_notes_generator/record/record_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,59 +59,12 @@ def generate(
records: dict[int|str, Record] = {}
pull_numbers = [pull.number for pull in pulls]

def create_record_for_issue(r: Repository, i: Issue):
records[i.number] = Record(r, i)
logger.debug("Created record for issue %d: %s", i.number, i.title)

def register_pull_request(pull: PullRequest):
for parent_issue_number in extract_issue_numbers_from_body(pull):
if parent_issue_number not in records:
logger.warning(
"Detected PR %d linked to issue %d which is not in the list of received issues. "
"Fetching ...",
pull.number,
parent_issue_number,
)
parent_issue = safe_call(repo.get_issue)(parent_issue_number)
if parent_issue is not None:
create_record_for_issue(repo, parent_issue)

if parent_issue_number in records:
records[parent_issue_number].register_pull_request(pull)
logger.debug("Registering PR %d: %s to Issue %d", pull.number, pull.title, parent_issue_number)
else:
records[pull.number] = Record(repo)
records[pull.number].register_pull_request(pull)
logger.debug(
"Registering stand-alone PR %d: %s as mentioned Issue %d not found.",
pull.number,
pull.title,
parent_issue_number,
)

def register_commit_to_record(c: Commit) -> None:
"""
Register a commit to a record if the commit is linked to an issue or a PR.
@param c: The commit to register.
@return: None
"""
for record in records.values():
if record.register_commit(c):
return

records[c.sha] = IsolatedCommitsRecord(repo)
records[c.sha].register_commit(c)

rate_limiter = GithubRateLimiter(github)
safe_call = safe_call_decorator(rate_limiter)

real_issue_counts = len(issues) # issues could contain PRs too - known behaviour from API
for issue in issues:
logger.debug("Hello for issue %s", issue)
if issue.number not in pull_numbers:
logger.debug("Calling create issue for number %s", issue.number)
create_record_for_issue(repo, issue)
RecordFactory.__create_record_for_issue(records, repo, issue)
else:
logger.debug("Detected pr number %s among issues", issue.number)
real_issue_counts -= 1
Expand All @@ -122,10 +75,10 @@ def register_commit_to_record(c: Commit) -> None:
records[pull.number].register_pull_request(pull)
logger.debug("Created record for PR %d: %s", pull.number, pull.title)
else:
register_pull_request(pull)
RecordFactory.__register_pull_request(github, records, repo, pull)

for commit in commits:
register_commit_to_record(commit)
RecordFactory.__register_commit_to_record(records, repo, commit)

logger.info(
"Generated %d records from %d issues and %d PRs, with %d commits detected. %d of commits are isolated",
Expand All @@ -136,3 +89,53 @@ def register_commit_to_record(c: Commit) -> None:
sum(isinstance(r, IsolatedCommitsRecord) for r in records)
)
return records

@staticmethod
def __create_record_for_issue(records: dict[int|str, Record], r: Repository, i: Issue):
records[i.number] = Record(r, i)
logger.debug("Created record for issue %d: %s", i.number, i.title)

@staticmethod
def __register_pull_request(github: Github, records: dict[int|str, Record], repo: Repository, pull: PullRequest):
rate_limiter = GithubRateLimiter(github)
safe_call = safe_call_decorator(rate_limiter)

for parent_issue_number in extract_issue_numbers_from_body(pull):
if parent_issue_number not in records:
logger.warning(
"Detected PR %d linked to issue %d which is not in the list of received issues. "
"Fetching ...",
pull.number,
parent_issue_number,
)
parent_issue = safe_call(repo.get_issue)(parent_issue_number)
if parent_issue is not None:
RecordFactory.__create_record_for_issue(records, repo, parent_issue)

if parent_issue_number in records:
records[parent_issue_number].register_pull_request(pull)
logger.debug("Registering PR %d: %s to Issue %d", pull.number, pull.title, parent_issue_number)
else:
records[pull.number] = Record(repo)
records[pull.number].register_pull_request(pull)
logger.debug(
"Registering stand-alone PR %d: %s as mentioned Issue %d not found.",
pull.number,
pull.title,
parent_issue_number,
)

@staticmethod
def __register_commit_to_record(records: dict[int|str, Record], repo: Repository, c: Commit) -> None:
"""
Register a commit to a record if the commit is linked to an issue or a PR.
@param c: The commit to register.
@return: None
"""
for record in records.values():
if record.register_commit(c):
return

records[c.sha] = IsolatedCommitsRecord(repo)
records[c.sha].register_commit(c)

0 comments on commit 5cc9c12

Please sign in to comment.