-
Notifications
You must be signed in to change notification settings - Fork 2.2k
/
link_readme.py
executable file
·108 lines (89 loc) · 2.39 KB
/
link_readme.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Requirement:
# python3 -m pip install lxml
import re
from time import sleep
from urllib.request import urlopen
from urllib.error import HTTPError
from lxml.html import parse
footer_delimiter = "\n\n[comment]: # (LINK_LIST_BEGIN_HERE)\n"
footer = ""
linked_id = []
present_id = []
def add_bracket(match):
first_char = match.group(1)
id = match.group(2)
replace = first_char + "[#"+id+"]"
return replace
def add_link(match):
id = match.group(1)
present_id.append(id)
replace = "#" + id
if id in linked_id:
return replace
url = "https://github.com/hrydgard/ppsspp/issues/"+id
title = None
while title is None:
try:
p = parse(urlopen(url))
title = p.find(".//title").text.split('by')[0].split('·')[0].strip()
title = re.sub(r"\"", r'\\"', title)
except HTTPError:
print("Something went wrong, retrying in 10 sec...")
sleep(10)
global footer
addition = "[#"+id+"]: https://github.com/hrydgard/ppsspp/issues/"+id+" \""+title+"\""
footer += addition+"\n"
linked_id.append(id)
print("Linked: " + addition)
return replace
def already_added_id(match):
linked_id.append(match.group(1))
return "[#" + match.group(1) + "]:"
def remove_old_link(line):
# Ignore extra new lines at the end
if line.find("#") == -1:
return ""
id = line[line.find("[#")+2 : line.find("]:")]
if id in present_id:
return line + "\n"
else:
print("Removed: #" + id)
return ""
def update(file_name):
global footer
footer = ""
global linked_id
linked_id = []
global present_id
present_id = []
f = open(file_name, "r+")
cont = f.read()
# We don't want to match issues id in title so stop before the link list
d = cont.find(footer_delimiter)
if (d != -1):
footer = cont[d + len(footer_delimiter):]
cont = cont[0 : d]
re.sub(r"\[#(\d+)\]:", already_added_id, footer)
if footer[-1] != "\n":
footer += "\n"
# Add brackets if missing
added_bracket = re.sub(r"([^[])#(\d+)", add_bracket, cont)
# Add links if missing
updated = re.sub(r"#(\d+)", add_link, added_bracket)
# Remove old unused link
updated_footer = ""
for line in footer.split("\n"):
updated_footer += remove_old_link(line)
# Remove extra new lines at the end
while updated_footer[-1] == "\n":
updated_footer = updated_footer[0:-1]
f.seek(0)
f.write(updated)
f.write(footer_delimiter)
f.write(updated_footer)
f.truncate()
f.close()
update("README.md")
update("history.md")