+typedef void (*filepair_fn)(struct diff_filepair *pair);
+typedef void (*linediff_fn)(char *line, int len);
+
+typedef enum {
+ DIFF_UNIFIED, DIFF_SSDIFF, DIFF_STATONLY
+} diff_type;
+
+typedef enum {
+ ABOUT, COMMIT, SOURCE, EMAIL, AUTH, OWNER
+} filter_type;
+
+struct cgit_filter {
+ int (*open)(struct cgit_filter *, va_list ap);
+ int (*close)(struct cgit_filter *);
+ void (*fprintf)(struct cgit_filter *, FILE *, const char *prefix);
+ void (*cleanup)(struct cgit_filter *);
+ int argument_count;
+};
+
+struct cgit_exec_filter {
+ struct cgit_filter base;
+ char *cmd;
+ char **argv;
+ int old_stdout;
+ int pid;
+};
+
+struct cgit_repo {
+ char *url;
+ char *name;
+ char *path;
+ char *desc;
+ char *extra_head_content;
+ char *owner;
+ char *homepage;
+ char *defbranch;
+ char *module_link;
+ struct string_list readme;
+ char *section;
+ char *clone_url;
+ char *logo;
+ char *logo_link;
+ char *snapshot_prefix;
+ int snapshots;
+ int enable_blame;
+ int enable_commit_graph;
+ int enable_log_filecount;
+ int enable_log_linecount;
+ int enable_remote_branches;
+ int enable_subject_links;
+ int enable_html_serving;
+ int max_stats;
+ int branch_sort;
+ int commit_sort;
+ time_t mtime;
+ struct cgit_filter *about_filter;
+ struct cgit_filter *commit_filter;
+ struct cgit_filter *source_filter;
+ struct cgit_filter *email_filter;
+ struct cgit_filter *owner_filter;
+ struct string_list submodules;
+ int hide;
+ int ignore;
+};
+
+typedef void (*repo_config_fn)(struct cgit_repo *repo, const char *name,
+ const char *value);
+
+struct cgit_repolist {
+ int length;
+ int count;
+ struct cgit_repo *repos;
+};
+
+struct commitinfo {
+ struct commit *commit;
+ char *author;
+ char *author_email;
+ unsigned long author_date;
+ int author_tz;
+ char *committer;
+ char *committer_email;
+ unsigned long committer_date;
+ int committer_tz;
+ char *subject;
+ char *msg;
+ char *msg_encoding;
+};
+
+struct taginfo {
+ char *tagger;
+ char *tagger_email;
+ unsigned long tagger_date;
+ int tagger_tz;
+ char *msg;
+};
+
+struct refinfo {
+ const char *refname;
+ struct object *object;
+ union {
+ struct taginfo *tag;
+ struct commitinfo *commit;
+ };
+};
+
+struct reflist {
+ struct refinfo **refs;
+ int alloc;
+ int count;
+};