Rizin
unix-like reverse engineering framework and cli tools
make_dist_html.py
Go to the documentation of this file.
1 #!/usr/bin/python
2 
3 from __future__ import print_function
4 
5 import itertools
6 import os
7 import re
8 import subprocess
9 
10 HTML = r'''
11 <!DOCTYPE html>
12 <html>
13  <head>
14  <link rel="stylesheet" href="http://libuv.org/styles/vendor.css">
15  <link rel="stylesheet" href="http://libuv.org/styles/main.css">
16  <style>
17  table {{
18  border-spacing: 0;
19  }}
20  body table {{
21  margin: 0 0 0 12pt;
22  }}
23  th, td {{
24  padding: 2pt;
25  text-align: left;
26  vertical-align: top;
27  }}
28  table table {{
29  border-collapse: initial;
30  padding: 0 0 16pt 0;
31  }}
32  table table tr:nth-child(even) {{
33  background-color: #777;
34  }}
35  </style>
36  </head>
37  <body>
38  <table>{groups}</table>
39  </body>
40 </html>
41 '''
42 
43 GROUPS = r'''
44 <tr>
45  <td>{groups[0]}</td>
46  <td>{groups[1]}</td>
47  <td>{groups[2]}</td>
48  <td>{groups[3]}</td>
49 </tr>
50 '''
51 
52 GROUP = r'''
53 <table>
54  <tr>
55  <th>version</th>
56  <th>tarball</th>
57  <th>gpg</th>
58  <th>windows</th>
59  </tr>
60  {rows}
61 </table>
62 '''
63 
64 ROW = r'''
65 <tr>
66  <td>
67  <a href="http://dist.libuv.org/dist/{tag}/">{tag}</a>
68  </td>
69  <td>
70  <a href="http://dist.libuv.org/dist/{tag}/libuv-{tag}.tar.gz">tarball</a>
71  </td>
72  <td>{maybe_gpg}</td>
73  <td>{maybe_exe}</td>
74 </tr>
75 '''
76 
77 GPG = r'''
78 <a href="http://dist.libuv.org/dist/{tag}/libuv-{tag}.tar.gz.sign">gpg</a>
79 '''
80 
81 # The binaries don't have a predictable name, link to the directory instead.
82 EXE = r'''
83 <a href="http://dist.libuv.org/dist/{tag}/">exe</a>
84 '''
85 
86 def version(tag):
87  return map(int, re.match('^v(\d+)\.(\d+)\.(\d+)', tag).groups())
88 
89 def major_minor(tag):
90  return version(tag)[:2]
91 
92 def row_for(tag):
93  maybe_gpg = ''
94  maybe_exe = ''
95  # We didn't start signing releases and producing Windows installers
96  # until v1.7.0.
97  if version(tag) >= version('v1.7.0'):
98  maybe_gpg = GPG.format(**locals())
99  maybe_exe = EXE.format(**locals())
100  return ROW.format(**locals())
101 
102 def group_for(tags):
103  rows = ''.join(row_for(tag) for tag in tags)
104  return GROUP.format(rows=rows)
105 
106 # Partition in groups of |n|.
107 def groups_for(groups, n=4):
108  html = ''
109  groups = groups[:] + [''] * (n - 1)
110  while len(groups) >= n:
111  html += GROUPS.format(groups=groups)
112  groups = groups[n:]
113  return html
114 
115 if __name__ == '__main__':
116  os.chdir(os.path.dirname(__file__))
117  tags = subprocess.check_output(['git', 'tag'])
118  tags = [tag for tag in tags.split('\n') if tag.startswith('v')]
119  tags.sort(key=version, reverse=True)
120  groups = [group_for(list(g)) for _, g in itertools.groupby(tags, major_minor)]
121  groups = groups_for(groups)
122  html = HTML.format(groups=groups).strip()
123  html = re.sub('>\\s+<', '><', html)
124  print(html)
size_t len
Definition: 6502dis.c:15
size_t map(int syms, int left, int len)
Definition: enough.c:237
static void list(RzEgg *egg)
Definition: rz-gg.c:52
def row_for(tag)
def groups_for(groups, n=4)
def major_minor(tag)
def group_for(tags)