summaryrefslogtreecommitdiffstats
path: root/roles/git/files
diff options
context:
space:
mode:
authorGuilhem Moulin <guilhem@fripost.org>2015-06-01 00:37:30 +0200
committerGuilhem Moulin <guilhem@fripost.org>2015-06-07 02:54:06 +0200
commitf1d44763617f2d3e8c60e6314831da886c97139d (patch)
tree8f0b02c2b638063a99b0880065e4dabca8ef337b /roles/git/files
parent6be6477f82cd469b688270e3e6ceff0bf347060c (diff)
gitweb workaround encoding issues in FCGI mode.
Diffstat (limited to 'roles/git/files')
-rw-r--r--roles/git/files/lib/systemd/system/gitweb.service3
-rwxr-xr-xroles/git/files/usr/lib/cgi-bin/gitweb-wrapper.fcgi22
2 files changed, 24 insertions, 1 deletions
diff --git a/roles/git/files/lib/systemd/system/gitweb.service b/roles/git/files/lib/systemd/system/gitweb.service
index a0f7a96..05821ce 100644
--- a/roles/git/files/lib/systemd/system/gitweb.service
+++ b/roles/git/files/lib/systemd/system/gitweb.service
@@ -7,7 +7,8 @@ Requires=gitweb.socket
StandardInput=socket
User=gitweb
Group=gitweb
-ExecStart=/usr/lib/cgi-bin/gitweb.fcgi
+Environment=SCRIPT_FILENAME=/usr/lib/cgi-bin/gitweb-wrapper.fcgi
+ExecStart=/usr/lib/cgi-bin/gitweb-wrapper.fcgi
[Install]
WantedBy=multi-user.target
diff --git a/roles/git/files/usr/lib/cgi-bin/gitweb-wrapper.fcgi b/roles/git/files/usr/lib/cgi-bin/gitweb-wrapper.fcgi
new file mode 100755
index 0000000..a7eea8c
--- /dev/null
+++ b/roles/git/files/usr/lib/cgi-bin/gitweb-wrapper.fcgi
@@ -0,0 +1,22 @@
+#!/usr/bin/perl
+# gitweb.cgi wrapper that fixes the UTF-8 problem with fastcgi
+
+# Local redefinition of FCGI::Stream::PRINT
+use Encode;
+use FCGI;
+
+our $enc = Encode::find_encoding('UTF-8');
+our $org = \&FCGI::Stream::PRINT;
+no warnings 'redefine';
+
+local *FCGI::Stream::PRINT = sub {
+ my @OUTPUT = @_;
+ for (my $i = 1; $i < @_; $i++) {
+ $OUTPUT[$i] = $enc->encode($_[$i], Encode::FB_CROAK|Encode::LEAVE_SRC);
+ }
+ @_ = @OUTPUT;
+ goto $org;
+};
+
+# Execute original script
+do "/usr/lib/cgi-bin/gitweb.cgi";