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