ctucx.git: stagit

My personal stagit fork

stagit

Personal fork of stagit, a static git page generator. It generates static HTML pages for a git repository.

This fork uses md4c to convert the README markdown into HTML and then shows it in an about page for each repository, this adds a new dependency. On top of that, the assets have been changed, creating a personal theme. The scripts have also been changed to fit my needs.

Features

Cons

Dependencies

Usage

Make files per repository:

$ mkdir -p htmlroot/htmlrepo1 && cd htmlroot/htmlrepo1
$ stagit path/to/gitrepo1
repeat for other repositories
$ ...

Make index file for repositories:

$ cd htmlroot
$ stagit-index path/to/gitrepo1 \
               path/to/gitrepo2 \
               path/to/gitrepo3 > index.html

Build and install

$ make
# make install

Documentation

See man pages: stagit(1) and stagit-index(1).

Building a static binary

It may be useful to build static binaries, for example to run in a chroot.

It can be done like this at the time of writing (v0.24):

cd libgit2-src

# change the options in the CMake file: CMakeLists.txt
BUILD_SHARED_LIBS to OFF (static)
CURL to OFF              (not needed)
USE_SSH OFF              (not needed)
THREADSAFE OFF           (not needed)
USE_OPENSSL OFF          (not needed, use builtin)

mkdir -p build && cd build
cmake ../
make
make install

Update files on git push

Using a post-receive hook the static files can be automatically updated. Keep in mind git push -f can change the history and the commits may need to be recreated. This is because stagit checks if a commit file already exists. It also has a cache (-c) option which can conflict with the new history. See stagit(1).

Create .tar.gz archives by tag

#!/bin/sh
name="stagit"
mkdir -p archives
git tag -l | while read -r t; do
    f="archives/${name}-$(echo "${t}" | tr '/' '_').tar.gz"
    test -f "${f}" && continue
    git archive \
        --format tar.gz \
        --prefix "${t}/" \
        -o "${f}" \
        -- \
        "${t}"
done