blob: b474748608f221586a3ae6fdc6972fc0a10bdaea [file] [log] [blame] [raw]
# -*- coding: utf-8 -*-
# Copyright (c) 2018, Compiler Explorer Authors
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
import subprocess
html_escape_table = {
"&": "&",
'"': """,
"'": "'",
">": ">",
"<": "&lt;",
}
commit_template = ' <div class="row commit-entry">\n' \
' <div class="col-sm-12">{}\n' \
' <a href="{}commit/{}" rel="noreferrer noopener" target="_blank">\n' \
' <sup><small class="glyphicon glyphicon-new-window opens-new-window" ' \
'title="Opens in a new window"></small></sup>\n' \
' </a>\n' \
' </div>\n' \
' </div>\n'
def html_escape(text):
return "".join(html_escape_table.get(c, c) for c in text)
def format_commit(url, commit):
grouped_commit = commit.split(' * ')
# --grep matches every line on the commit message, we ensure we don't get caught by it
try:
formatted_commit = commit_template.format(html_escape(grouped_commit[1]), url, grouped_commit[0])
print(grouped_commit)
return formatted_commit
except:
return ''
def get_commits(repo):
coms = subprocess.check_output(['git', 'log', '--date=local', '--after="3 months ago"', '--grep=^\* ', '--oneline'])
with open('static/changelog.html', 'w') as f:
f.write('<div class="commits-list">\n')
for commit in coms.splitlines():
f.write(format_commit(repo, commit))
f.write('</div>\n')
if __name__ == '__main__':
get_commits('https://github.com/mattgodbolt/compiler-explorer/')