|
|
README - stagit - static git page generator |
|
|
 |
git clone git://git.codemadness.org/stagit (git://git.codemadness.org) |
|
|
 |
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 chroot. |
|
|
|
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" > "$i/url" |
|
|
|
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 webpage. |
|
|
|
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 fast, |
|
|
|
157 simple and requires little resources (because the content is static), only |
|
|
|
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 are |
|
|
|
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 are |
|
|
|
169 written for each execution of stagit. This is because stagit shows the lines |
|
|
|
170 of textfiles and there is no "cache" for file metadata (this would add more |
|
|
|
171 complexity to the code). |
|
|
|
172 - Not suitable for repositories with many branches, a quite linear history is |
|
|
|
173 assumed (from HEAD). |
|
|
|
174 |
|
|
|
175 In these cases it is better to just use cgit or possibly change stagit to |
|
|
|
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. |
|