X-Git-Url: https://git.armaanb.net/?p=stagit.git;a=blobdiff_plain;f=README;h=3c5d3c3964e62a4ee930c2b30dc8f0951e78f95e;hp=10f1884bfd1d348cfd6472bcb2aff79d27fc9744;hb=b0d3a4f50b346f540db0fd3f20c30bd78344eb2a;hpb=dc49505153f1a52bf12adee39aa63bda2bafefe4 diff --git a/README b/README index 10f1884..3c5d3c3 100644 --- a/README +++ b/README @@ -1,8 +1,10 @@ stagit -====== +------ -static git page generator +static git page generator. personal fork with syntax highlighting and some +quality of life improvements +It generates static HTML pages for a git repository. Usage ----- @@ -17,8 +19,8 @@ Make index file for repositories: $ stagit-index repodir1 repodir2 repodir3 > index.html -Install -------- +Build and install +----------------- $ make # make install @@ -27,10 +29,11 @@ $ make Dependencies ------------ -- libgit2 (v0.22+). -- libc (tested with OpenBSD, FreeBSD, glibc and musl). - C compiler (C99). -- make +- libc (tested with OpenBSD, FreeBSD, NetBSD, Linux: glibc and musl). +- libgit2 (v0.22+). +- POSIX make (optional). +- Python3, pip. Documentation @@ -61,6 +64,79 @@ 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 -------- @@ -82,15 +158,24 @@ Cons ---- - Not suitable for large repositories (2000+ commits), because diffstats are - an expensive operation. + 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 after it are faster. + 1500+ commits), incremental updates are faster. - Does not support some of the dynamic features cgit has, like: - - snapshot tarballs. - - file tree per commit. - - history log of branches diverged from HEAD. - - stats (git shortlog -s). + - 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. + This is by design, just use git locally.