This uses the debian-nginx container "ankitrgadiya/cgit:debian-nginx" and adds pygments for syntax highlighting, as well as the osmocom commit filter for linking to gerrit change-ids as well as redmine issues Change-Id: Iec75769a972950ed9df95d5b36aa930daad1565achanges/48/7548/3
parent
ca0a2752c6
commit
b317348065
@ -0,0 +1,14 @@ |
||||
FROM ankitrgadiya/cgit:debian-nginx |
||||
|
||||
# This adds the Osmocom specific syntax highlighting + redmine/gerrit integration |
||||
|
||||
RUN apt-get update && \ |
||||
apt-get install -y --no-install-recommends \ |
||||
python3 \ |
||||
python3-markdown \ |
||||
python3-pygments |
||||
|
||||
RUN mkdir -p /usr/local/lib/cgit/filters |
||||
|
||||
COPY osmo-commit-filter.py /usr/local/lib/cgit/filters/osmo-commit-filter.py |
||||
COPY syntax-highlighting.py /usr/local/lib/cgit/filters/syntax-highlighting.py |
@ -0,0 +1 @@ |
||||
include ../make/Makefile |
@ -0,0 +1,49 @@ |
||||
#!/usr/bin/env python3 |
||||
# (C) Harald Welte <laforge@gnumonks.org> |
||||
|
||||
# This is a python script intended to be used as a commit-filter of |
||||
# cgit. It recognizes certain patterns (such as a gerrit Change-Id, or |
||||
# Related/Closed redmine issues. |
||||
|
||||
GERRIT_URL = 'https://gerrit.osmocom.org/r/%s' |
||||
REDMINE_OS_URL = 'https://osmocom.org/issues/%s' |
||||
REDMINE_SYS_URL = 'https://projects.sysmocom.de/redmine/issues/%s' |
||||
RT_URL = 'https://rt.sysmocom.de/TicketDisplay.html?id=%s' |
||||
|
||||
import re |
||||
import sys |
||||
import cgi |
||||
|
||||
def hyperlink(txt, url): |
||||
return '<a href="%s">%s</a>' % (url, cgi.escape(txt)) |
||||
|
||||
def chgid_repl(matchobj): |
||||
chg_id = matchobj.group(1) |
||||
url = GERRIT_URL % cgi.escape(chg_id) |
||||
return hyperlink(chg_id, url) |
||||
|
||||
def relates_repl(matchobj): |
||||
def process_item(x): |
||||
def repl_os(m): |
||||
url = REDMINE_OS_URL % cgi.escape(m.group(1)) |
||||
return hyperlink(m.group(0), url) |
||||
def repl_sys(m): |
||||
url = REDMINE_SYS_URL % cgi.escape(m.group(1)) |
||||
return hyperlink(m.group(0), url) |
||||
def repl_rt(m): |
||||
url = RT_URL % cgi.escape(m.group(1)) |
||||
return hyperlink(m.group(0), url) |
||||
x = re.sub(r"OS#(\d+)", repl_os, x) |
||||
x = re.sub(r"SYS#(\d+)", repl_sys, x) |
||||
x = re.sub(r"RT#(\d+)", repl_rt, x) |
||||
return x |
||||
line = matchobj.group(3) |
||||
related_ids = [x.strip() for x in line.split(',')] |
||||
extd_ids = [process_item(x) for x in related_ids] |
||||
return '%s: %s' % (matchobj.group(1), ', '.join(extd_ids)) |
||||
|
||||
for line in sys.stdin: |
||||
line = re.sub(r"(I\w{40})", chgid_repl, line) |
||||
line = re.sub(r"^((Relate|Close|Fixe)[ds]): (.*)$", relates_repl, line) |
||||
sys.stdout.write(line) |
||||
|
@ -0,0 +1,52 @@ |
||||
#!/usr/bin/env python3 |
||||
|
||||
# This script uses Pygments and Python3. You must have both installed |
||||
# for this to work. |
||||
# |
||||
# http://pygments.org/ |
||||
# http://python.org/ |
||||
# |
||||
# It may be used with the source-filter or repo.source-filter settings |
||||
# in cgitrc. |
||||
# |
||||
# The following environment variables can be used to retrieve the |
||||
# configuration of the repository for which this script is called: |
||||
# CGIT_REPO_URL ( = repo.url setting ) |
||||
# CGIT_REPO_NAME ( = repo.name setting ) |
||||
# CGIT_REPO_PATH ( = repo.path setting ) |
||||
# CGIT_REPO_OWNER ( = repo.owner setting ) |
||||
# CGIT_REPO_DEFBRANCH ( = repo.defbranch setting ) |
||||
# CGIT_REPO_SECTION ( = section setting ) |
||||
# CGIT_REPO_CLONE_URL ( = repo.clone-url setting ) |
||||
|
||||
|
||||
import sys |
||||
from pygments import highlight |
||||
from pygments.util import ClassNotFound |
||||
from pygments.lexers import TextLexer |
||||
from pygments.lexers import guess_lexer |
||||
from pygments.lexers import guess_lexer_for_filename |
||||
from pygments.formatters import HtmlFormatter |
||||
|
||||
|
||||
data = sys.stdin.read() |
||||
filename = sys.argv[1] |
||||
formatter = HtmlFormatter(style='pastie') |
||||
|
||||
try: |
||||
lexer = guess_lexer_for_filename(filename, data) |
||||
except ClassNotFound: |
||||
# check if there is any shebang |
||||
if data[0:2] == '#!': |
||||
lexer = guess_lexer(data) |
||||
else: |
||||
lexer = TextLexer() |
||||
except TypeError: |
||||
lexer = TextLexer() |
||||
|
||||
# highlight! :-) |
||||
# printout pygments' css definitions as well |
||||
sys.stdout.write('<style>') |
||||
sys.stdout.write(formatter.get_style_defs('.highlight')) |
||||
sys.stdout.write('</style>') |
||||
sys.stdout.write(highlight(data, lexer, formatter, outfile=None)) |
Loading…
Reference in new issue