gout

A static git page generator
git clone https://git.bracken.jp/gout.git
Log | Files | Refs | README | LICENSE

DateCommit messageAuthorFiles+-
2026-02-25 23:54build: extract posix_env configChris Bracken2+14-7
2026-02-20 23:25gemini: add print_utf8_paddedChris Bracken5+179-14
2026-02-20 16:07writer: implement a gemini writerChris Bracken40+1868-11
2026-02-20 23:58openbsd: fix BSD buildChris Bracken3+3-11
2026-02-20 22:39cache: clean up fmemopen calls in testsChris Bracken1+6-6
2026-02-20 23:00openbsd: only include on necessary platformsChris Bracken7+29-5
2026-02-20 17:22cache: fix incorrect buffer size in testChris Bracken1+1-1
2026-02-20 15:30format: consolidate time printing functionsChris Bracken1+20-33
2026-02-20 15:13writer: replace func ptr cases with static wrapper initChris Bracken2+135-34
2026-02-20 15:13git: remove redundant empty-string checks for pathChris Bracken1+1-6
2026-02-20 15:13format: print directly to out stream via fprintfChris Bracken1+2-7
2026-02-20 15:13Ass setlocale call to ensure mbrtowc and wcwidth behave wellChris Bracken2+4-0
2026-02-20 12:38git: fix variable names for git referencesChris Bracken1+11-11
2026-02-20 12:38cache: simplify fread loopChris Bracken1+2-5
2026-02-20 12:38format: simplify and add tests for print_gopher_link_paddedChris Bracken2+34-9
2026-02-20 12:29cache: make umask() restoration more obviousChris Bracken1+2-2
2026-02-20 12:14utils: simplify path_concat and add more testsChris Bracken2+50-24
2026-02-20 12:14repo: simplify special file lookupsChris Bracken1+9-10
2026-02-20 12:14git: add tests for filemode and filetype lookupsChris Bracken4+114-35
2026-02-20 12:14format: extract is_unicode_modifier() and kUtf8Ellipsis constChris Bracken1+9-3
2026-02-20 11:57format: replace manual abs() with actual abs()Chris Bracken1+3-2
2026-02-20 11:56format: clean up header includesChris Bracken9+9-11
2026-02-20 11:29oid: where possible avoid extra heap allocations for oidsChris Bracken16+59-41
2026-02-20 11:18git: extract special files list (README, etc.)Chris Bracken8+64-55
2026-02-20 10:05options: migrate to getoptChris Bracken2+71-68
2026-02-20 10:05writer: extract a shared DiffLimits structChris Bracken7+36-38
2026-02-20 10:01writer: extract ops vtableChris Bracken2+98-185
2026-02-20 09:56cache: centralise cachefile creation/closingChris Bracken4+110-111
2026-02-20 09:08atom: skip commits with missing/blank OIDChris Bracken1+8-7
2026-02-20 09:08gopher: correct relative path back to log in titleChris Bracken1+1-1
2026-02-20 09:08utils: improve relpath_from_dirChris Bracken2+84-27
2026-02-20 08:37atom: ensure base URL + path concatenation includes a slashChris Bracken2+44-1
2026-02-20 08:37gopher: run link content through print_gopher_linkChris Bracken2+12-7
2026-02-20 08:05writer: correct parameter nameChris Bracken1+1-1
2026-02-20 08:05gopher: ensure newline after header/title lineChris Bracken1+1-1
2026-02-20 08:05git: prevent crash when handling binary filesChris Bracken1+1-1
2026-02-20 08:05repo: better handling for non-unixy line endingsChris Bracken3+31-14
2026-02-20 08:05git: add support for SHA256Chris Bracken3+8-7
2026-02-20 07:30Add null-assertions for all non-nullable paramsChris Bracken33+347-14
2026-02-20 06:48writer: add tests for Diff is too large outputChris Bracken6+104-10
2026-02-20 06:29gopher: fix 'Diff is too large' messageChris Bracken1+1-1
2026-02-20 06:29git: fix use-after-free in warnx callChris Bracken1+4-2
2026-02-20 06:29fs_inmemory: fix a missing bailoutChris Bracken1+3-0
2026-02-20 06:06FileSystem: add fdopen/close callsChris Bracken5+30-14
2026-02-20 05:47Improve error handling in gitrepo_walk_tree_filesChris Bracken1+46-37
2026-02-20 05:33Better error handling for snprintfChris Bracken2+16-9
2026-02-20 05:26git reference: handle dangling symbolic referencesChris Bracken3+31-6
2026-02-17 10:08git: extract Git and make structs publicChris Bracken90+3497-812
2026-02-17 10:08writers: check snprintf calls for truncationChris Bracken7+34-23
2026-02-17 10:08format: print raw UTF-8 sequence for ellipsisChris Bracken1+2-2
2026-02-17 10:08format: use gmtime_r instead of gmtimeChris Bracken1+6-3
2026-02-19 04:36cache: if cache file is empty/corrupt do a full buildChris Bracken1+10-3
2026-02-18 08:31index writer: safer dereference of me URLChris Bracken1+3-1
2026-02-20 03:38writer: safer string dereferencesChris Bracken2+12-12
2026-02-18 08:13writers: safer dereference of parentoidChris Bracken2+2-2
2026-02-20 03:15commit: don't call git_oid_tostr() on NULL parentoidChris Bracken3+93-3
2026-02-20 03:15build: disable unused parameter warnings for testsChris Bracken2+8-0
2026-02-19 05:26utils: better path_concatChris Bracken1+26-11
2026-02-19 04:39format: filter out control chars in print_xml_encodedChris Bracken2+57-2
2026-02-19 04:35delta: fix diffstat graph max widthChris Bracken3+41-1
2026-02-18 00:57format: add TODO to inject tz offset to print_time_shortChris Bracken1+5-2
2026-02-18 06:45gout: free options in testChris Bracken1+1-0
2026-02-19 04:36format: zero-initialise mbstate in print_gopher_link_paddedChris Bracken1+1-0
2026-02-19 06:27debug: enable asanChris Bracken2+7-0
2026-02-19 06:08build: declare _POSIX_C_SOURCE for open_memstreamChris Bracken1+9-0
2026-02-17 09:33git: make structs publicChris Bracken28+252-523
2026-02-17 09:31reference: make shorthand an owned copyChris Bracken1+11-12
2026-02-17 09:29repo: make submodules,readme,license owned copiesChris Bracken1+12-6
2026-02-17 09:16commit: eliminate git_diff struct memberChris Bracken1+4-9
2026-02-17 09:16commit: eliminate unnecessary git_diff_free()Chris Bracken1+0-1
2026-02-17 09:15delta: make GitDelta.{old,new}_file_path owned copiesChris Bracken1+8-11
2026-02-17 09:14delta: make GitHunk.header an owned copyChris Bracken1+3-2
2026-02-17 09:10delta: make GitHunkLine.content an owned copyChris Bracken1+7-2
2026-02-17 09:02commit: remove git_commit field from structChris Bracken1+13-13
2026-02-17 08:50commit: make author_email an owned copyChris Bracken1+3-2
2026-02-17 08:49commit: make author_name an owned copyChris Bracken1+3-2
2026-02-17 08:49commit: make message an owned copyChris Bracken1+4-2
2026-02-17 08:48commit: make summary an owned copyChris Bracken1+4-2
2026-02-13 05:49Format GN filesChris Bracken2+7-5
2026-02-13 06:52Rewrite print_gopher_link_paddedChris Bracken3+86-105
2026-02-13 03:55Delete unused estrlcat, checkfileerrorChris Bracken2+2-23
2026-02-13 03:25Improve relpath_from_dir implementationChris Bracken1+11-13
2026-02-13 02:56Add tests for relpath_from_dirChris Bracken1+30-0
2026-02-11 12:42Improve optimize_size configChris Bracken1+18-0
2026-02-11 12:36Update binary size to 46 kB in READMEChris Bracken1+1-1
2026-02-11 10:13Fix gout_config: use configs instead of public_configsChris Bracken7+25-11
2026-02-06 10:15Make GitRepo->repo type explicitChris Bracken1+1-1
2026-01-06 08:03Improve type safety in writer typesChris Bracken10+143-143
2026-01-06 07:57Extract gitrepo_load_metadata static functionChris Bracken1+13-9
2026-01-06 07:34Use a switch statement in format_filemodeChris Bracken1+23-18
2026-01-06 07:29Correct getline handlingChris Bracken1+4-3
2025-12-15 02:07Move source under src directoryChris Bracken88+221-219
2025-12-15 01:25Update path_concat to dynamic buffer allocationChris Bracken10+122-85
2025-12-15 00:58Use dynamic buffer allocation for pathsChris Bracken2+10-6
2025-12-15 00:58Correct estrdup error messageChris Bracken1+1-1
2025-11-17 12:17Improve error message for invalid git reposChris Bracken1+1-1
2025-11-17 11:41Prevent int overflow in print_timeChris Bracken2+23-0
2025-11-17 09:37Remove unnecessary commentChris Bracken1+0-1
2025-11-17 09:37Remove . from readwrite paths for gout_indexChris Bracken1+2-2
2025-11-17 09:37Add locking unveil callChris Bracken1+5-0
2025-11-17 09:37Security funcs should always succeed on non-OpenBSDChris Bracken1+6-2
2025-07-25 14:11Add tests for print_gopher_link_paddedChris Bracken1+122-0
2025-07-26 15:48Add tests for print_gopher_linkChris Bracken1+42-0
2025-07-26 14:34Rename from gitout to goutChris Bracken60+510-514
2025-07-26 14:45Delete git submodule instructionsChris Bracken1+0-20
2025-07-25 02:21Add tests for print_gopher_text_lenChris Bracken2+99-1
2025-07-24 21:50Add tests for print_xml_encoded_lenChris Bracken1+88-0
2025-07-24 20:48Add tests for print_percent_encodedChris Bracken1+56-0
2025-07-24 20:45Add test for print_time_shortChris Bracken1+17-0
2025-07-24 20:43Add test for print_time_zChris Bracken1+17-0
2025-07-24 20:37Add tests for print_timeChris Bracken2+62-0
2025-07-24 02:36Validate URLs and email addressesChris Bracken5+70-10
2025-07-23 23:28Do not open files over 16MB in sizeChris Bracken4+22-3
2025-07-23 23:05Validate paths don't escape the repoChris Bracken5+55-0
2025-07-23 22:43Use gitfile_size_bytes in place of strlenChris Bracken2+29-21
2025-07-23 22:12Add git/ to include_dirsChris Bracken1+2-1
2025-06-29 16:17Use utest.h instead of googletestChris Bracken35+6969-420
2024-07-11 01:17Include errno.h in place of sys/errno.hChris Bracken3+3-3
2024-05-11 06:47Add HTML prefix to HTML writer identifiersChris Bracken12+162-157
2024-05-10 21:54Make git/*.h types opaque structuresChris Bracken57+1375-959
2024-05-10 11:45html: Use consistent repowriter namingChris Bracken3+30-30
2024-05-10 11:34gitout_index: Add -m option to specify rel=me URLChris Bracken7+44-7
2024-05-09 12:51Add background to README.mdChris Bracken1+31-3
2024-05-09 12:35Add gopher output supportChris Bracken28+1394-2
2024-05-06 09:34Make output writer type configurableChris Bracken2+25-5
2024-01-02 13:01Initial commitChris Bracken78+4968-0