in tools/asciidoc_to_fragments.py [0:0]
def parse_line(line, kind):
global fragments_counter
fragments_counter += 1
summary, *entries = line.split(" {")
if len(entries) == 0:
print(f"Warning: {line} -> no PR/issue fields\n")
fragment_dict = {"kind": kind}
fragment_dict["summary"] = summary.lstrip(field_token).strip()
fragment_dict["summary"] = fragment_dict["summary"].replace(":", "")
# sanitize filename and use only first 80 chars to prevent getting a filename too long (that may error on write)
filename = sanitize_filename(fragment_dict["summary"].rstrip("."))[:80]
pr_repo, issue_repo, fragment_timestamp = "", "", ""
for entry in entries:
number = entry[entry.find("[")+1:entry.find("]")]
number = ''.join(filter(lambda n: n.isdigit(), number))
entry_data = entry.split("}")[0]
try:
fragment_field, repo = entry_data.split("-")
repo_link = repo_dict[repo]
except ValueError:
fragment_field, repo_link = entry_data, default_repolink
if fragment_field in fragment_dict.keys():
print(f"Skipping {line} -> multiple PRs/issues found\n")
return
if fragment_field == "pull":
fragment_dict["pr"] = ''.join([repo_link, '/pull/', number])
pr_number, pr_repo = number, repo_link
elif fragment_field == "issue":
fragment_dict["issue"] = ''.join([repo_link, '/issues/', number])
issue_number, issue_repo = number, repo_link
if pr_repo:
fragment_timestamp = get_event_timestamp(pr_repo, "pulls", pr_number)
elif issue_repo:
fragment_timestamp = get_event_timestamp(issue_repo, "issues", issue_number)
if fragment_timestamp == "not_found":
print(f"Skipping {line} -> no response from Github API\n")
return
if fragment_timestamp == "event_open":
print(f"Skipping {line} -> PR/issue still open!\n")
return
if issue_repo != pr_repo and pr_repo:
try:
del fragment_dict["issue"]
print(f"Warning: {line} -> issue info lost due to multiple repositories\n")
except KeyError:
pass
write_fragment(filename, fragment_timestamp, fragment_dict)