404 lines · 9.2 KB · C
RawDownload
#ifndef CGIT_H#define CGIT_H #include <stdbool.h> #include <git-compat-util.h> #include <archive.h>#include <commit.h>#include <diffcore.h>#include <diff.h>#include <environment.h>#include <graph.h>#include <grep.h>#include <hex.h>#include <log-tree.h>#include <notes.h>#include <object.h>#include <object-name.h>#include <odb.h>#include <path.h>#include <refs.h>#include <revision.h>#include <setup.h>#include <string-list.h>#include <strvec.h>#include <tag.h>#include <tree.h>#include <utf8.h>#include <wrapper.h>#include <xdiff-interface.h>#include <xdiff/xdiff.h> /* Add isgraph(x) to Git's sane ctype support (see git-compat-util.h) */#undef isgraph#define isgraph(x) (isprint((x)) && !isspace((x)))  /* * Limits used for relative dates */#define TM_MIN    60#define TM_HOUR  (TM_MIN * 60)#define TM_DAY   (TM_HOUR * 24)#define TM_WEEK  (TM_DAY * 7)#define TM_YEAR  (TM_DAY * 365)#define TM_MONTH (TM_YEAR / 12.0)  /* * Default encoding */#define PAGE_ENCODING "UTF-8" #define BIT(x)	(1U << (x)) typedef void (*configfn)(const char *name, const char *value);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 (*fprintfp)(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_follow_links;	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;}; 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;}; struct cgit_query {	int has_symref;	int has_oid;	int has_difftype;	char *raw;	char *repo;	char *page;	char *search;	char *grep;	char *head;	char *oid;	char *oid2;	char *path;	char *name;	char *url;	char *period;	int   ofs;	int nohead;	char *sort;	int showmsg;	diff_type difftype;	int show_all;	int context;	int ignorews;	int follow;	char *vpath;}; struct cgit_config {	char *agefile;	char *cache_root;	char *clone_prefix;	char *clone_url;	char *favicon;	char *footer;	char *head_include;	char *header;	char *logo;	char *logo_link;	char *mimetype_file;	char *module_link;	char *project_list;	struct string_list readme;	struct string_list css;	char *robots;	char *root_title;	char *root_desc;	char *root_readme;	char *script_name;	char *section;	char *repository_sort;	char *virtual_root;	/* Always ends with '/'. */	char *strict_export;	int cache_size;	int cache_dynamic_ttl;	int cache_max_create_time;	int cache_repo_ttl;	int cache_root_ttl;	int cache_scanrc_ttl;	int cache_static_ttl;	int cache_about_ttl;	int cache_snapshot_ttl;	int case_sensitive_sort;	int embedded;	int enable_filter_overrides;	int enable_follow_links;	int enable_http_clone;	int enable_index_links;	int enable_index_owner;	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 enable_tree_linenumbers;	int enable_git_config;	int local_time;	int max_atom_items;	int max_repo_count;	int max_commit_count;	int max_lock_attempts;	int max_msg_len;	int max_repodesc_len;	int max_blob_size;	int max_stats;	int noplainemail;	int noheader;	int renamelimit;	int remove_suffix;	int scan_hidden_path;	int section_from_path;	int snapshots;	int section_sort;	int summary_branches;	int summary_log;	int summary_tags;	diff_type difftype;	int branch_sort;	int commit_sort;	struct string_list mimetypes;	struct string_list js;	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 cgit_filter *auth_filter;}; struct cgit_page {	time_t modified;	time_t expires;	size_t size;	const char *mimetype;	const char *charset;	const char *filename;	const char *etag;	const char *title;	int status;	const char *statusmsg;}; struct cgit_environment {	const char *cgit_config;	const char *http_host;	const char *https;	const char *no_http;	const char *path_info;	const char *query_string;	const char *request_method;	const char *script_name;	const char *server_name;	const char *server_port;	const char *http_cookie;	const char *http_referer;	unsigned int content_length;	int authenticated;}; struct cgit_context {	struct cgit_environment env;	struct cgit_query qry;	struct cgit_config cfg;	struct cgit_repo *repo;	struct cgit_page page;}; typedef int (*write_archive_fn_t)(const char *, const char *); struct cgit_snapshot_format {	const char *suffix;	const char *mimetype;	write_archive_fn_t write_func;}; extern const char *cgit_version; extern struct cgit_repolist cgit_repolist;extern struct cgit_context ctx;extern const struct cgit_snapshot_format cgit_snapshot_formats[]; extern char *cgit_default_repo_desc;extern struct cgit_repo *cgit_add_repo(const char *url);extern struct cgit_repo *cgit_get_repoinfo(const char *url);extern void cgit_repo_config(struct cgit_repo *repo, const char *name,			     const char *value); extern int chk_zero(int result, char *msg);extern int chk_positive(int result, char *msg);extern int chk_non_negative(int result, char *msg); extern char *trim_end(const char *str, char c);extern char *ensure_end(const char *str, char c); extern void strbuf_ensure_end(struct strbuf *sb, char c); extern void cgit_add_ref(struct reflist *list, struct refinfo *ref);extern void cgit_free_reflist_inner(struct reflist *list);extern int cgit_refs_cb(const struct reference *ref, void *cb_data); extern void cgit_free_commitinfo(struct commitinfo *info);extern void cgit_free_taginfo(struct taginfo *info); void cgit_diff_tree_cb(struct diff_queue_struct *q,		       struct diff_options *options, void *data); extern int cgit_diff_files(const struct object_id *old_oid,			   const struct object_id *new_oid,			   unsigned long *old_size, unsigned long *new_size,			   int *binary, int context, int ignorews,			   linediff_fn fn); extern void cgit_diff_tree(const struct object_id *old_oid,			   const struct object_id *new_oid,			   filepair_fn fn, const char *prefix, int ignorews); extern void cgit_diff_commit(struct commit *commit, filepair_fn fn,			     const char *prefix); __attribute__((format (printf,1,2)))extern char *fmt(const char *format,...); __attribute__((format (printf,1,2)))extern char *fmtalloc(const char *format,...); extern struct commitinfo *cgit_parse_commit(struct commit *commit);extern struct taginfo *cgit_parse_tag(struct tag *tag);extern void cgit_parse_url(const char *url); extern const char *cgit_repobasename(const char *reponame); extern int cgit_parse_snapshots_mask(const char *str);extern const struct object_id *cgit_snapshot_get_sig(const char *ref,						     const struct cgit_snapshot_format *f);extern const unsigned cgit_snapshot_format_bit(const struct cgit_snapshot_format *f); extern int cgit_open_filter(struct cgit_filter *filter, ...);extern int cgit_close_filter(struct cgit_filter *filter);extern void cgit_fprintf_filter(struct cgit_filter *filter, FILE *f, const char *prefix);extern void cgit_exec_filter_init(struct cgit_exec_filter *filter, char *cmd, char **argv);extern struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype);extern void cgit_cleanup_filters(void);extern void cgit_init_filters(void); extern void cgit_prepare_repo_env(struct cgit_repo * repo); extern int read_first_line(const char *path, char **buf, size_t *size); extern char *strdup_first_line(const char *txt); extern char *expand_macros(const char *txt); extern char *get_mimetype_for_filename(const char *filename); #endif /* CGIT_H */