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