iREADME - stagit - static git page generator Err codemadness.org 70 hgit clone git://git.codemadness.org/stagit URL:git://git.codemadness.org/stagit codemadness.org 70 1Log /git/stagit/log.gph codemadness.org 70 1Files /git/stagit/files.gph codemadness.org 70 1Refs /git/stagit/refs.gph codemadness.org 70 1README /git/stagit/file/README.gph codemadness.org 70 1LICENSE /git/stagit/file/LICENSE.gph codemadness.org 70 i--- Err codemadness.org 70 iREADME (4494B) Err codemadness.org 70 i--- Err codemadness.org 70 i 1 stagit Err codemadness.org 70 i 2 ------ Err codemadness.org 70 i 3 Err codemadness.org 70 i 4 static git page generator. Err codemadness.org 70 i 5 Err codemadness.org 70 i 6 It generates static HTML pages for a git repository. Err codemadness.org 70 i 7 Err codemadness.org 70 i 8 Err codemadness.org 70 i 9 Usage Err codemadness.org 70 i 10 ----- Err codemadness.org 70 i 11 Err codemadness.org 70 i 12 Make files per repository: Err codemadness.org 70 i 13 Err codemadness.org 70 i 14 $ mkdir -p htmlroot/htmlrepo1 && cd htmlroot/htmlrepo1 Err codemadness.org 70 i 15 $ stagit path/to/gitrepo1 Err codemadness.org 70 i 16 repeat for other repositories Err codemadness.org 70 i 17 $ ... Err codemadness.org 70 i 18 Err codemadness.org 70 i 19 Make index file for repositories: Err codemadness.org 70 i 20 Err codemadness.org 70 i 21 $ cd htmlroot Err codemadness.org 70 i 22 $ stagit-index path/to/gitrepo1 \ Err codemadness.org 70 i 23 path/to/gitrepo2 \ Err codemadness.org 70 i 24 path/to/gitrepo3 > index.html Err codemadness.org 70 i 25 Err codemadness.org 70 i 26 Err codemadness.org 70 i 27 Build and install Err codemadness.org 70 i 28 ----------------- Err codemadness.org 70 i 29 Err codemadness.org 70 i 30 $ make Err codemadness.org 70 i 31 # make install Err codemadness.org 70 i 32 Err codemadness.org 70 i 33 Err codemadness.org 70 i 34 Dependencies Err codemadness.org 70 i 35 ------------ Err codemadness.org 70 i 36 Err codemadness.org 70 i 37 - C compiler (C99). Err codemadness.org 70 i 38 - libc (tested with OpenBSD, FreeBSD, NetBSD, Linux: glibc and musl). Err codemadness.org 70 i 39 - libgit2 (v0.22+). Err codemadness.org 70 i 40 - POSIX make (optional). Err codemadness.org 70 i 41 Err codemadness.org 70 i 42 Err codemadness.org 70 i 43 Documentation Err codemadness.org 70 i 44 ------------- Err codemadness.org 70 i 45 Err codemadness.org 70 i 46 See man pages: stagit(1) and stagit-index(1). Err codemadness.org 70 i 47 Err codemadness.org 70 i 48 Err codemadness.org 70 i 49 Building a static binary Err codemadness.org 70 i 50 ------------------------ Err codemadness.org 70 i 51 Err codemadness.org 70 i 52 It may be useful to build static binaries, for example to run in a chroot. Err codemadness.org 70 i 53 Err codemadness.org 70 i 54 It can be done like this at the time of writing (v0.24): Err codemadness.org 70 i 55 Err codemadness.org 70 i 56 cd libgit2-src Err codemadness.org 70 i 57 Err codemadness.org 70 i 58 # change the options in the CMake file: CMakeLists.txt Err codemadness.org 70 i 59 BUILD_SHARED_LIBS to OFF (static) Err codemadness.org 70 i 60 CURL to OFF (not needed) Err codemadness.org 70 i 61 USE_SSH OFF (not needed) Err codemadness.org 70 i 62 THREADSAFE OFF (not needed) Err codemadness.org 70 i 63 USE_OPENSSL OFF (not needed, use builtin) Err codemadness.org 70 i 64 Err codemadness.org 70 i 65 mkdir -p build && cd build Err codemadness.org 70 i 66 cmake ../ Err codemadness.org 70 i 67 make Err codemadness.org 70 i 68 make install Err codemadness.org 70 i 69 Err codemadness.org 70 i 70 Err codemadness.org 70 i 71 Extract owner field from git config Err codemadness.org 70 i 72 ----------------------------------- Err codemadness.org 70 i 73 Err codemadness.org 70 i 74 A way to extract the gitweb owner for example in the format: Err codemadness.org 70 i 75 Err codemadness.org 70 i 76 [gitweb] Err codemadness.org 70 i 77 owner = Name here Err codemadness.org 70 i 78 Err codemadness.org 70 i 79 Script: Err codemadness.org 70 i 80 Err codemadness.org 70 i 81 #!/bin/sh Err codemadness.org 70 i 82 awk '/^[ ]*owner[ ]=/ { Err codemadness.org 70 i 83 sub(/^[^=]*=[ ]*/, ""); Err codemadness.org 70 i 84 print $0; Err codemadness.org 70 i 85 }' Err codemadness.org 70 i 86 Err codemadness.org 70 i 87 Err codemadness.org 70 i 88 Set clone URL for a directory of repos Err codemadness.org 70 i 89 -------------------------------------- Err codemadness.org 70 i 90 #!/bin/sh Err codemadness.org 70 i 91 cd "$dir" Err codemadness.org 70 i 92 for i in *; do Err codemadness.org 70 i 93 test -d "$i" && echo "git://git.codemadness.org/$i" > "$i/url" Err codemadness.org 70 i 94 done Err codemadness.org 70 i 95 Err codemadness.org 70 i 96 Err codemadness.org 70 i 97 Update files on git push Err codemadness.org 70 i 98 ------------------------ Err codemadness.org 70 i 99 Err codemadness.org 70 i 100 Using a post-receive hook the static files can be automatically updated. Err codemadness.org 70 i 101 Keep in mind git push -f can change the history and the commits may need Err codemadness.org 70 i 102 to be recreated. This is because stagit checks if a commit file already Err codemadness.org 70 i 103 exists. It also has a cache (-c) option which can conflict with the new Err codemadness.org 70 i 104 history. See stagit(1). Err codemadness.org 70 i 105 Err codemadness.org 70 i 106 git post-receive hook (repo/.git/hooks/post-receive): Err codemadness.org 70 i 107 Err codemadness.org 70 i 108 #!/bin/sh Err codemadness.org 70 i 109 # detect git push -f Err codemadness.org 70 i 110 force=0 Err codemadness.org 70 i 111 while read -r old new ref; do Err codemadness.org 70 i 112 hasrevs=$(git rev-list "$old" "^$new" | sed 1q) Err codemadness.org 70 i 113 if test -n "$hasrevs"; then Err codemadness.org 70 i 114 force=1 Err codemadness.org 70 i 115 break Err codemadness.org 70 i 116 fi Err codemadness.org 70 i 117 done Err codemadness.org 70 i 118 Err codemadness.org 70 i 119 # remove commits and .cache on git push -f Err codemadness.org 70 i 120 #if test "$force" = "1"; then Err codemadness.org 70 i 121 # ... Err codemadness.org 70 i 122 #fi Err codemadness.org 70 i 123 Err codemadness.org 70 i 124 # see example_create.sh for normal creation of the files. Err codemadness.org 70 i 125 Err codemadness.org 70 i 126 Err codemadness.org 70 i 127 Create .tar.gz archives by tag Err codemadness.org 70 i 128 ------------------------------ Err codemadness.org 70 i 129 #!/bin/sh Err codemadness.org 70 i 130 name="stagit" Err codemadness.org 70 i 131 mkdir -p archives Err codemadness.org 70 i 132 git tag -l | while read -r t; do Err codemadness.org 70 i 133 f="archives/${name}-$(echo "${t}" | tr '/' '_').tar.gz" Err codemadness.org 70 i 134 test -f "${f}" && continue Err codemadness.org 70 i 135 git archive \ Err codemadness.org 70 i 136 --format tar.gz \ Err codemadness.org 70 i 137 --prefix "${t}/" \ Err codemadness.org 70 i 138 -o "${f}" \ Err codemadness.org 70 i 139 -- \ Err codemadness.org 70 i 140 "${t}" Err codemadness.org 70 i 141 done Err codemadness.org 70 i 142 Err codemadness.org 70 i 143 Err codemadness.org 70 i 144 Features Err codemadness.org 70 i 145 -------- Err codemadness.org 70 i 146 Err codemadness.org 70 i 147 - Log of all commits from HEAD. Err codemadness.org 70 i 148 - Log and diffstat per commit. Err codemadness.org 70 i 149 - Show file tree with linkable line numbers. Err codemadness.org 70 i 150 - Show references: local branches and tags. Err codemadness.org 70 i 151 - Detect README and LICENSE file from HEAD and link it as a webpage. Err codemadness.org 70 i 152 - Detect submodules (.gitmodules file) from HEAD and link it as a webpage. Err codemadness.org 70 i 153 - Atom feed of the commit log (atom.xml). Err codemadness.org 70 i 154 - Atom feed of the tags/refs (tags.xml). Err codemadness.org 70 i 155 - Make index page for multiple repositories with stagit-index. Err codemadness.org 70 i 156 - After generating the pages (relatively slow) serving the files is very fast, Err codemadness.org 70 i 157 simple and requires little resources (because the content is static), only Err codemadness.org 70 i 158 a HTTP file server is required. Err codemadness.org 70 i 159 - Usable with text-browsers such as dillo, links, lynx and w3m. Err codemadness.org 70 i 160 Err codemadness.org 70 i 161 Err codemadness.org 70 i 162 Cons Err codemadness.org 70 i 163 ---- Err codemadness.org 70 i 164 Err codemadness.org 70 i 165 - Not suitable for large repositories (2000+ commits), because diffstats are Err codemadness.org 70 i 166 an expensive operation, the cache (-c flag) is a workaround for this in Err codemadness.org 70 i 167 some cases. Err codemadness.org 70 i 168 - Not suitable for large repositories with many files, because all files are Err codemadness.org 70 i 169 written for each execution of stagit. This is because stagit shows the lines Err codemadness.org 70 i 170 of textfiles and there is no "cache" for file metadata (this would add more Err codemadness.org 70 i 171 complexity to the code). Err codemadness.org 70 i 172 - Not suitable for repositories with many branches, a quite linear history is Err codemadness.org 70 i 173 assumed (from HEAD). Err codemadness.org 70 i 174 Err codemadness.org 70 i 175 In these cases it is better to just use cgit or possibly change stagit to Err codemadness.org 70 i 176 run as a CGI program. Err codemadness.org 70 i 177 Err codemadness.org 70 i 178 - Relatively slow to run the first time (about 3 seconds for sbase, Err codemadness.org 70 i 179 1500+ commits), incremental updates are faster. Err codemadness.org 70 i 180 - Does not support some of the dynamic features cgit has, like: Err codemadness.org 70 i 181 - Snapshot tarballs per commit. Err codemadness.org 70 i 182 - File tree per commit. Err codemadness.org 70 i 183 - History log of branches diverged from HEAD. Err codemadness.org 70 i 184 - Stats (git shortlog -s). Err codemadness.org 70 i 185 Err codemadness.org 70 i 186 This is by design, just use git locally. Err codemadness.org 70 .