stagit

Personal stagit fork
git clone git://git.alexwennerberg.com/stagit
Log | Files | Refs | README | LICENSE

README.md (4617B) - raw


stagit

This is a personal fork. I am not good at C. Be wary

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

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