home | blog | art | git gpg | email | rss

stagit

Personal fork of stagit (https://git.codemadness.org/stagit/)
git clone git://pollux.codes/git/stagit
Log | Files | Refs | README | LICENSE

README.md (4494B)


stagit

static git page generator.

It generates static HTML pages for a git repository.

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

Dependencies

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

BUILDSHAREDLIBS to OFF (static) CURL to OFF (not needed) USESSH OFF (not needed) THREADSAFE OFF (not needed) USEOPENSSL OFF (not needed, use builtin)

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

Extract owner field from git config

A way to extract the gitweb owner for example in the format:

[gitweb]
    owner = Name here

Script:

#!/bin/sh
awk '/^[    ]*owner[    ]=/ {
    sub(/^[^=]*=[   ]*/, "");
    print $0;
}'

Set clone URL for a directory of repos

#!/bin/sh
cd "$dir"
for i in *; do
    test -d "$i" && echo "git://git.codemadness.org/$i" > "$i/url"
done

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).

git post-receive hook (repo/.git/hooks/post-receive):

#!/bin/sh
# detect git push -f
force=0
while read -r old new ref; do
    hasrevs=$(git rev-list "$old" "^$new" | sed 1q)
    if test -n "$hasrevs"; then
        force=1
        break
    fi
done

# remove commits and .cache on git push -f
#if test "$force" = "1"; then
# ...
#fi

# see example_create.sh for normal creation of the files.

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

Features

Cons