• Stars
    star
    104
  • Rank 330,604 (Top 7 %)
  • Language
    C
  • License
    MIT License
  • Created about 8 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Static git web viewer. [GitHub Mirror]
stagit
------

static git page generator.

It generates static HTML pages for a git repository.


Usage
-----

Make files per repository:

	$ mkdir -p htmldir && cd htmldir
	$ stagit path-to-repo

Make index file for repositories:

	$ stagit-index repodir1 repodir2 repodir3 > index.html


Build and install
-----------------

$ make
# make install


Dependencies
------------

- C compiler (C99).
- libc (tested with OpenBSD, FreeBSD, NetBSD, Linux: glibc and musl).
- libgit2 (v0.22+).
- POSIX make (optional).


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

- Log of all commits from HEAD.
- Log and diffstat per commit.
- Show file tree with linkable line numbers.
- Show references: local branches and tags.
- Detect README and LICENSE file from HEAD and link it as a webpage.
- Detect submodules (.gitmodules file) from HEAD and link it as a webpage.
- Atom feed log (atom.xml).
- Make index page for multiple repositories with stagit-index.
- After generating the pages (relatively slow) serving the files is very fast,
  simple and requires little resources (because the content is static), only
  a HTTP file server is required.
- Usable with text-browsers such as dillo, links, lynx and w3m.


Cons
----

- Not suitable for large repositories (2000+ commits), because diffstats are
  an expensive operation, the cache (-c flag) is a workaround for this in
  some cases.
- Not suitable for large repositories with many files, because all files are
  written for each execution of stagit. This is because stagit shows the lines
  of textfiles and there is no "cache" for file metadata (this would add more
  complexity to the code).
- Not suitable for repositories with many branches, a quite linear history is
  assumed (from HEAD).

  In these cases it is better to just use cgit or possibly change stagit to
  run as a CGI program.

- Relatively slow to run the first time (about 3 seconds for sbase,
  1500+ commits), incremental updates are faster.
- Does not support some of the dynamic features cgit has, like:
  - Snapshot tarballs per commit.
  - File tree per commit.
  - History log of branches diverged from HEAD.
  - Stats (git shortlog -s).

  This is by design, just use git locally.

More Repositories

1

sakura

๐ŸŒธ a minimal css framework/theme.
HTML
3,751
star
2

4ever-clojure

Pure cljs version of 4clojure, meant to run forever!
Clojure
230
star
3

clj-konmari

The Lifeโ€‘Changing Magic of Tidying Up Clojure Codebases
Clojure
37
star
4

smurf

simple markdown surfer
Python
37
star
5

4clojure-solutions-archive

Anonymised solutions archive of 4clojure.com
Clojure
19
star
6

clojurians-log-v2

Capturing, conserving, and making this discourse of Clojurians slack community complete, easily accessible, and searchable.
Clojure
18
star
7

dotfiles

easiest way to feel right at $HOME
Emacs Lisp
17
star
8

wordle-clojurescript

Wordle clone in clojurescript
Clojure
14
star
9

ninshu

ninshu - The Ninja Programming Language (inspired from naruto)
Python
13
star
10

neat.py

My small implementation of NEAT (NeuroEvolution of Augmenting Topologies)
Python
9
star
11

clojure-todo

Clojure, ClojureScript, Reagent end-to-end example
Clojure
8
star
12

dystic

a minimal static site generator using dynamic principles
Python
7
star
13

ghPublish

Directly publish your blog posts to GitHub Pages from the command line.
Python
7
star
14

genox

a simple static site generator
Python
6
star
15

computableverse.com

Code for my tech blog
CSS
4
star
16

vim-genox

Vim Plugin for static site generator `genox`
Vim Script
3
star
17

.emacs.d

My .emacs.d with Corgi!
Emacs Lisp
3
star
18

mitesh.ninja

mi casa su casa.
Python
3
star
19

Stab

Start Blogging with this minimal static site generator.
Python
3
star
20

VisaApplication

Andorid application with a python JSON API to process visa application of employees.
CSS
3
star
21

Vader.css

Join the DARK side.
CSS
2
star
22

miteshshah.com

HTML
2
star
23

supertokens-go

2
star
24

clojure.quest

Learn clojure and clojurescript with easy tutorials
Clojure
2
star
25

sakura-jekyll

HTML
2
star
26

emacs-clockify

clockify.el emacs package for tracking time in clockify
Emacs Lisp
2
star
27

gingerstationery.com

CSS
2
star
28

clojuredocs.el

Emacs browser for clojuredocs.org
Emacs Lisp
2
star
29

audiomark

Python
2
star
30

wallPy

Automate wallpaper changing for Unity/Gnome. Fetches images from any specified multireddit.
Python
2
star
31

oxal.org-OLD

Rewrote the website
HTML
1
star
32

oxalorg

1
star
33

talk-clojure-project-setup

Clojure
1
star
34

video-notes

Notes linked to my videos
1
star
35

oxama

Learning Django with a fun AMA app
Python
1
star
36

clj-vimeo

Clojure library for the vimeo API
1
star
37

weather-demo

https://weather-demo.vercel.app
SCSS
1
star
38

school

Some of the code I've written based on subjects taught in school/college
C
1
star
39

kaocha-plugin-examples

Clojure
1
star
40

clj-imagemagick

Clojure
1
star
41

OnlineTicketBooking

Prototype of the process 'Booking a Ticket' for Analysis and Design project.
Python
1
star
42

vim-python-magic

Vim + Python + Virtualenvwrapper + FZF == Magic
Vim Script
1
star
43

phpBlogNinja

My first PHP project - A simple blog with user authentication
PHP
1
star
44

pirate-lang-test

Clojure
1
star
45

ClojureMadeEasy.com

Clojure is simple, lets make it easy :)
1
star
46

IUCNRedList-endagered

Python
1
star
47

owlofathena

CSS
1
star
48

BoxWiki

Simple portable personal wiki / notetaking solution.
Python
1
star
49

oblog

HTML
1
star
50

earthlyhumans.com

CSS
1
star