From 95862f2b20c81294413824ec2dd00f9b17905994 Mon Sep 17 00:00:00 2001 From: Jonas Smedegaard Date: Thu, 13 Aug 2020 19:21:14 +0200 Subject: initial commit --- etc/apache2/conf-available/local-cgit-legacy.conf | 157 ++++++++++++++++++++++ etc/apache2/conf-available/local-cgit.conf | 28 ++++ etc/cgitrc | 29 ++++ etc/uwsgi/apps-available/local-git.ini | 25 ++++ 4 files changed, 239 insertions(+) create mode 100644 etc/apache2/conf-available/local-cgit-legacy.conf create mode 100644 etc/apache2/conf-available/local-cgit.conf create mode 100644 etc/cgitrc create mode 100644 etc/uwsgi/apps-available/local-git.ini (limited to 'etc') diff --git a/etc/apache2/conf-available/local-cgit-legacy.conf b/etc/apache2/conf-available/local-cgit-legacy.conf new file mode 100644 index 0000000..3a0f593 --- /dev/null +++ b/etc/apache2/conf-available/local-cgit-legacy.conf @@ -0,0 +1,157 @@ +# Based on http://www.clearchain.com/blog/posts/cgit-upgrade-gitweb-retired +# +# Redirects mapping gitweb -> cgit +# +# Gitweb uses get targets seperated by ; +# +# /?...;...;... +# +# p = Project +# a = Action like ( +# blob, +# blob_plain, +# commitdiff, +# commit, +# history, +# log, +# rss|atom, +# shortlog, +# summary, +# tag, +# tree, +# snapshot +# ) +# h = SHA Hash +# hb= SHA Hash Tree Base +# f= file/dir +# sf= snapshot format +# +# Cgit uses the following: +# +# /project/action/?... +# +# action ( commit, log, diff, tree, tag, patch ) +# +# id = SHA Hash +# id2 = SHA Hash +# h = head +# +# Translation rules +# +# Project is a straight redirect +# --- +# /?p=(.+)\.git; /$1/ +# +# Action requires a mapping +# --- +# a=(blob|tree) /tree/ +# a=(blobdiff|commitdiff) /diff/ +# a=commit /commit/ +# a=(summary) / +# a=(shortlog|log|history) /log/ +# a=tag /tag/ +# a=blob_plain /blob/ +# a=rss|atom /atom +# +# Targets require mapping +# --- +# h=(.+) id=$1 +# f=(.+) /$1 +# hb=(.+) id2=$1 +# +# Now putting it all together +# +RewriteEngine On + +# blob +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob;h=([^;]+);hb=([^;]+);f=([^;]+) +RewriteRule ^/$ /%1.git/tree/%5?id=%3;id2=%4 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob;f=([^;]+);h=([^;]+);hb=([^;]+) +RewriteRule ^/$ /%1.git/tree/%3?id=%4;id2=%5 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob;hb=([^;]+);f=([^;]+) +RewriteRule ^/$ /%1.git/tree/%4?id=%3 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob;f=([^;]+) +RewriteRule ^/$ /%1.git/tree/%3 [R=permanent,L,NE,QSD] + +# tree +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=tree;h=([^;]+);hb=([^;]+);f=([^;]+) +RewriteRule ^/$ /%1.git/tree/%5?id=%4 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=tree;hb=([^;]+);f=([^;]+) +RewriteRule ^/$ /%1.git/tree/%4?id=%3 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=tree;h=([^;]+);hb=([^;]+) +RewriteRule ^/$ /%1.git/tree/?id=%4 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=tree;hb=([^;]+) +RewriteRule ^/$ /%1.git/tree/?id=%3 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=tree +RewriteRule ^/$ /%1.git/tree/? [R=permanent,L,NE,QSD] + +# commitdiff +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blobdiff;h=([^;]+);hp=([^;]+);hb=([^;]+);f=([^;]+) +RewriteRule ^/$ /%1.git/diff/%6?id2=%4;id=%3;id3=%5 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=commitdiff;h=([^;]+);hp=([^;]+) +RewriteRule ^/$ /%1.git/diff/?id=%4;id2=%3 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=commitdiff;h=([^;]+) +RewriteRule ^/$ /%1.git/diff/?id=%3 [R=permanent,L,NE,QSD] + +# commit +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=commit;h=([^;]+) +RewriteRule ^/$ /%1.git/commit/?id=%3 [R=permanent,L,NE,QSD] + +# shortlog +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=shortlog;h=([^;]+) +RewriteRule ^/$ /%1.git/log/?id=%3 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=shortlog +RewriteRule ^/$ /%1.git/log/? [R=permanent,L,NE,QSD] + +# log +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=log;h=([^;]+) +RewriteRule ^/$ /%1.git/log/?id=%3 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=log +RewriteRule ^/$ /%1.git/log [R=permanent,L,NE,QSD] + +# history +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=history;h=([^;]+);hb=([^;]+);f=([^;]+) +RewriteRule ^/$ /%1.git/log/%5?id=%4 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=history;f=([^;]+);h=([^;]+);hb=([^;]+) +RewriteRule ^/$ /%1.git/log/%3?id=%4 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=history;f=([^;]+);h=([^;]+) +RewriteRule ^/$ /%1.git/log/%3?id=%4 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=history;h=([^;]+);hb=([^;]+) +RewriteRule ^/$ /%1.git/log/?id=%4 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=history;hb=([^;]+);f=([^;]+) +RewriteRule ^/$ /%1.git/log/%4?id=%3 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=history;hb=([^;]+) +RewriteRule ^/$ /%1.git/log/?id=%3 [R=permanent,L,NE,QSD] + +# tag +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=tag;h=([^;]+) +RewriteRule ^/$ /%1.git/tag/?id=%4 [R=permanent,L,NE,QSD] + +# blob_plain +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob_plain;h=([^;]+);f=([^;]+) +RewriteRule ^/$ /%1.git/blob/%4?id=%3 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob_plain;f=([^;]+);hb=([^;]+) +RewriteRule ^/$ /%1.git/plain/%3?id2=%4 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=blob_plain;f=([^;]+) +RewriteRule ^/$ /%1.git/plain/%3 [R=permanent,L,NE,QSD] + +# rss|atom +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=(rss|atom);h=refsheads/([^;]+) +RewriteRule ^/$ /%1.git/atom?h=%4 [R=permanent,L,NE,QSD] +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=(rss|atom) +RewriteRule ^/$ /%1.git/atom [R=permanent,L,NE,QSD] + +# snapshot +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?;a=snapshot;h=([^;]+);sf=([^;]+) +RewriteRule ^/$ /%1.git/snapshot/%3.tar.gz [R=permanent,L,NE,QSD] + +# summary +RewriteCond %{QUERY_STRING} p=([^;]+)(\.git)(;a=summary)?$ +RewriteRule ^/$ /%1 [R=permanent,L,NE,QSD] + +# Failsafes in case nothing above matches, +# try at least to put the person in the project, else root of cgit +RewriteCond %{QUERY_STRING} p=([^;]+?)(\.git)?.* +RewriteRule ^/$ /%1 [R=temp,L,NE,QSD] +RewriteCond %{QUERY_STRING} .+ +RewriteRule ^/.+ / [R=temp,L,NE,QSD] diff --git a/etc/apache2/conf-available/local-cgit.conf b/etc/apache2/conf-available/local-cgit.conf new file mode 100644 index 0000000..f307242 --- /dev/null +++ b/etc/apache2/conf-available/local-cgit.conf @@ -0,0 +1,28 @@ +Define FEATUREWEBROOT /usr/local/share/feature/source-hosting/web/ + +AddDefaultCharset UTF-8 + + + Options None + AllowOverride None + Require all granted + + + + Options None + AllowOverride None + Require all granted + + +Alias /cgit-css/ /usr/share/cgit/ +Alias /favicon.ico /usr/share/cgit/favicon.ico +Alias /robots.txt /usr/share/cgit/robots.txt + +Alias /cgit-feature/ ${FEATUREWEBROOT} + +# this requires cgit config: enable-index-links=1 +RedirectMatch permanent ^/([^./]+)\.git(/.*) /$1$2 + + + ProxyPass unix:/run/uwsgi/app/local-git/socket|uwsgi://local-git + diff --git a/etc/cgitrc b/etc/cgitrc new file mode 100644 index 0000000..003d7a2 --- /dev/null +++ b/etc/cgitrc @@ -0,0 +1,29 @@ +# +# cgit config +# see cgitrc(5) for details + +# Depends: cmark highlight + +css=/cgit-feature/feature.css +logo=/cgit-css/cgit.png + +remove-suffix=1 + +clone-url=git://$HTTP_HOST/$CGIT_REPO_URL https://$HTTP_HOST$SCRIPT_NAME/$CGIT_REPO_URL http://$HTTP_HOST$SCRIPT_NAME/$CGIT_REPO_URL + +# (ab)use source filter to parse markdown as html, +# with line-numbered + highlighted plaintext only as fallback +# TODO: add anchor to line-numbering: +#
  • 2 +# TODO: hide anchor except in :hover mode: +#
  • ยง +enable-tree-linenumbers=0 +source-filter=/usr/local/share/feature/source-hosting/script/syntax-highlighting.sh + +about-filter=/usr/local/share/feature/source-hosting/script/about-formatting.sh +readme=:README.md + +cache-size=1000 + +# must be last! +scan-path=$DOCUMENT_ROOT diff --git a/etc/uwsgi/apps-available/local-git.ini b/etc/uwsgi/apps-available/local-git.ini new file mode 100644 index 0000000..7fcaf54 --- /dev/null +++ b/etc/uwsgi/apps-available/local-git.ini @@ -0,0 +1,25 @@ +[uwsgi] + +# serve via uwsgi protocol to frontend webserver +# * load CGI plugin as default modifier1 to ease frontend setup +# * load uGreen for cheap concurrency +plugins = 0:cgi,ugreen + +ini = :app +#ini = :static + +[app] + +async = 1000 +ugreen = true +offload-threads = 5 + +cgi = /=/usr/lib/cgit/cgit.cgi + +[static] + +# serve static files directly (even better: serve by frontend webserver) +check-static-docroot = 1 +static-map = /cgit-css/=/usr/share/cgit/ +static-map = /favicon.ico=/usr/share/cgit/favicon.ico +static-map = /robots.txt=/usr/share/cgit/robots.txt -- cgit v1.2.3