Debugging CGI / CGit2014.08.26
I've been using CGit as a git web front-end for a bit now and just recently started looking into customizing the root header. Assuming I'd have to hack the code to do so, I decided to pull down the src and build it.
~ $ git clone http://git.zx2c4.com/cgit/ ~ $ cd cgit/ ~/cgit $ make get-git && make
ui-shared.c I was pleasantly surprised to find I wouldn't have to hack anything; it seems
that just about everything I wanted to change was configurable via the cgit config file (default:
For example for changing the root title and description, just set
~ $ grep 'root' /etc/cgitrc root-title=bunkergate.org root-desc=git repository browser
This worked fine, but what about changing the logo? Just overwriting the
logo.png in the resources directory should work,
but I want to use an animated gif. The file extension then would be technically incorrect, the worst kind of incorrect. Fortunately, it
too looks like this could be set with
cgitrc as well. But this didn't seem to work. What's going on?
To run cgit from the CLI, simply do the following. HTML output is printed to stdout and errors are printed to stderr. This will generate the root index content.
~/cgit $ CGIT_CONFIG="./cgitrc" ./cgit 1>stdout.html 2>stderr.log
As an example, to see the content generated for a specific repo, do the following:
~/cgit $ CGIT_CONFIG="./cgitrc" QUERY_STRING="url=bunkergate" ./cgit 1>stdout.html 2>stderr.log ~/cgit $ CGIT_CONFIG="./cgitrc" QUERY_STRING="url=bunkergate/tree/index.html" ./cgit 1>stdout.html 2>stderr.log
It's worth noting that this is probably a basic template for debugging any CGI.
logo in the configuration file
didn't seem to have the desired effect. How can we see what's going on? Simple, run it in GDB:
~/cgit $ CGIT_CONFIG="./cgitrc" QUERY_STRING="url=bunkergate/tree/index.html" gdb ./cgit
So what was happening? Well after setting a watchpoint on
ctx.cfg.logo I noticed something peculiar. The variable was getting set to
the value I expected, but then later it was getting set yet again to the undesired value. Turns out that the problem was that I had set
logo twice in the configuration file. Ugh.