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