gout

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

commit dae746f33d9c8ad926eff935370e0f34ee91ac50
parent 3e04dc09b619fdad56e07fd9fe03d30b3ca687ec
Author: Chris Bracken <chris@bracken.jp>
Date:   Fri, 20 Feb 2026 19:05:05 +0900

writer: extract a shared DiffLimits struct

Avoids some duplication between HTML and gopher writers.

Diffstat:
Msrc/utils.h | 8++++++++
Msrc/writer/gopher/commit.c | 26+++++++++++---------------
Msrc/writer/gopher/commit.h | 4+---
Msrc/writer/gopher/commit_tests.c | 3++-
Msrc/writer/html/commit.c | 26+++++++++++---------------
Msrc/writer/html/commit.h | 4+---
Msrc/writer/html/commit_tests.c | 3++-
7 files changed, 36 insertions(+), 38 deletions(-)

diff --git a/src/utils.h b/src/utils.h @@ -4,8 +4,16 @@ #include <stdbool.h> #include <stdio.h> +#include <stdint.h> #include <sys/stat.h> +/* Diff suppression limits. */ +typedef struct DiffLimits { + uint64_t max_files; + uint64_t max_deltas; + uint64_t max_delta_lines; +} DiffLimits; + /* File system operations. */ typedef struct FileSystem { int (*mkdir)(const char* path, mode_t mode); diff --git a/src/writer/gopher/commit.c b/src/writer/gopher/commit.c @@ -18,9 +18,7 @@ struct GopherCommit { FILE* out; const FileSystem* fs; GopherPage* page; - uint64_t max_files; - uint64_t max_deltas; - uint64_t max_delta_lines; + DiffLimits limits; }; static void gopher_commit_write_summary(GopherCommit* commit, @@ -57,9 +55,9 @@ GopherCommit* gopher_commit_create(const GitRepo* repo, } free(path); commit->page = gopher_page_create(commit->out, repo, fs, title, "../"); - commit->max_files = 1000; - commit->max_deltas = 1000; - commit->max_delta_lines = 100000; + commit->limits.max_files = 1000; + commit->limits.max_deltas = 1000; + commit->limits.max_delta_lines = 100000; return commit; } @@ -94,9 +92,10 @@ void gopher_commit_add_commit(GopherCommit* commit, size_t addcount = git_commit->addcount; size_t delcount = git_commit->delcount; size_t filecount = git_commit->filecount; - if (filecount > commit->max_files || deltas_len > commit->max_deltas || - addcount > commit->max_delta_lines || - delcount > commit->max_delta_lines) { + if (filecount > commit->limits.max_files || + deltas_len > commit->limits.max_deltas || + addcount > commit->limits.max_delta_lines || + delcount > commit->limits.max_delta_lines) { fprintf(out, "Diff is too large, output suppressed.\n"); return; } @@ -106,13 +105,10 @@ void gopher_commit_add_commit(GopherCommit* commit, } void gopher_commit_set_diff_limits(GopherCommit* commit, - uint64_t max_files, - uint64_t max_deltas, - uint64_t max_delta_lines) { + const DiffLimits* limits) { assert(commit != NULL); - commit->max_files = max_files; - commit->max_deltas = max_deltas; - commit->max_delta_lines = max_delta_lines; + assert(limits != NULL); + commit->limits = *limits; } void gopher_commit_end(GopherCommit* commit) { diff --git a/src/writer/gopher/commit.h b/src/writer/gopher/commit.h @@ -18,9 +18,7 @@ void gopher_commit_begin(GopherCommit* commit); void gopher_commit_add_commit(GopherCommit* commit, const GitCommit* git_commit); void gopher_commit_set_diff_limits(GopherCommit* commit, - uint64_t max_files, - uint64_t max_deltas, - uint64_t max_delta_lines); + const DiffLimits* limits); void gopher_commit_end(GopherCommit* commit); #endif // GOUT_WRITER_GOPHER_COMMIT_H_ diff --git a/src/writer/gopher/commit_tests.c b/src/writer/gopher/commit_tests.c @@ -130,7 +130,8 @@ UTEST_F(gopher_commit, too_large_diff) { gopher_commit_create(&repo, g_fs_inmemory, "sha123", "Commit Title"); /* Set limits small to trigger suppression. */ - gopher_commit_set_diff_limits(commit_writer, 0, 1000, 1000); + DiffLimits limits = {.max_files = 0, .max_deltas = 1000, .max_delta_lines = 1000}; + gopher_commit_set_diff_limits(commit_writer, &limits); GitCommit commit = { .oid = "sha123", diff --git a/src/writer/html/commit.c b/src/writer/html/commit.c @@ -18,9 +18,7 @@ struct HtmlCommit { FILE* out; const FileSystem* fs; HtmlPage* page; - uint64_t max_files; - uint64_t max_deltas; - uint64_t max_delta_lines; + DiffLimits limits; }; static void html_commit_write_summary(HtmlCommit* commit, @@ -60,9 +58,9 @@ HtmlCommit* html_commit_create(const GitRepo* repo, } free(path); commit->page = html_page_create(commit->out, repo, fs, title, "../"); - commit->max_files = 1000; - commit->max_deltas = 1000; - commit->max_delta_lines = 100000; + commit->limits.max_files = 1000; + commit->limits.max_deltas = 1000; + commit->limits.max_delta_lines = 100000; return commit; } @@ -96,9 +94,10 @@ void html_commit_add_commit(HtmlCommit* commit, const GitCommit* git_commit) { size_t addcount = git_commit->addcount; size_t delcount = git_commit->delcount; size_t filecount = git_commit->filecount; - if (filecount > commit->max_files || deltas_len > commit->max_deltas || - addcount > commit->max_delta_lines || - delcount > commit->max_delta_lines) { + if (filecount > commit->limits.max_files || + deltas_len > commit->limits.max_deltas || + addcount > commit->limits.max_delta_lines || + delcount > commit->limits.max_delta_lines) { fprintf(out, "<pre>Diff is too large, output suppressed.</pre>\n"); return; } @@ -108,13 +107,10 @@ void html_commit_add_commit(HtmlCommit* commit, const GitCommit* git_commit) { } void html_commit_set_diff_limits(HtmlCommit* commit, - uint64_t max_files, - uint64_t max_deltas, - uint64_t max_delta_lines) { + const DiffLimits* limits) { assert(commit != NULL); - commit->max_files = max_files; - commit->max_deltas = max_deltas; - commit->max_delta_lines = max_delta_lines; + assert(limits != NULL); + commit->limits = *limits; } void html_commit_end(HtmlCommit* commit) { diff --git a/src/writer/html/commit.h b/src/writer/html/commit.h @@ -17,9 +17,7 @@ void html_commit_free(HtmlCommit* commit); void html_commit_begin(HtmlCommit* commit); void html_commit_add_commit(HtmlCommit* commit, const GitCommit* git_commit); void html_commit_set_diff_limits(HtmlCommit* commit, - uint64_t max_files, - uint64_t max_deltas, - uint64_t max_delta_lines); + const DiffLimits* limits); void html_commit_end(HtmlCommit* commit); #endif // GOUT_WRITER_HTML_COMMIT_H_ diff --git a/src/writer/html/commit_tests.c b/src/writer/html/commit_tests.c @@ -130,7 +130,8 @@ UTEST_F(html_commit, too_large_diff) { html_commit_create(&repo, g_fs_inmemory, "sha123", "Commit Title"); /* Set limits small to trigger suppression. */ - html_commit_set_diff_limits(commit_writer, 0, 1000, 1000); + DiffLimits limits = {.max_files = 0, .max_deltas = 1000, .max_delta_lines = 1000}; + html_commit_set_diff_limits(commit_writer, &limits); GitCommit commit = { .oid = "sha123",