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:
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",