cGit-UI for Git Repositories

cGit-UI – is a web interface for Git Repositories. cGit CGI script is writen in C and therefore it's fast enough

3 Commits   0 Branches   1 Tag
05d292b2 (kx 2023-03-24 03:51:10 +0300   1) 
05d292b2 (kx 2023-03-24 03:51:10 +0300   2) #ifndef    __CONTEXT_H
05d292b2 (kx 2023-03-24 03:51:10 +0300   3) #define    __CONTEXT_H
05d292b2 (kx 2023-03-24 03:51:10 +0300   4) 
05d292b2 (kx 2023-03-24 03:51:10 +0300   5) #ifdef __cplusplus
05d292b2 (kx 2023-03-24 03:51:10 +0300   6) extern "C" {
05d292b2 (kx 2023-03-24 03:51:10 +0300   7) #endif
05d292b2 (kx 2023-03-24 03:51:10 +0300   8) 
05d292b2 (kx 2023-03-24 03:51:10 +0300   9) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  10) #define CONTEXT_MEM_SIZE  524288
05d292b2 (kx 2023-03-24 03:51:10 +0300  11) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  12) struct __context
05d292b2 (kx 2023-03-24 03:51:10 +0300  13) {
05d292b2 (kx 2023-03-24 03:51:10 +0300  14)   void *_cur_brk;
05d292b2 (kx 2023-03-24 03:51:10 +0300  15)   unsigned char _mem[CONTEXT_MEM_SIZE];
05d292b2 (kx 2023-03-24 03:51:10 +0300  16) };
05d292b2 (kx 2023-03-24 03:51:10 +0300  17) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  18) extern struct __context *pmctx;
05d292b2 (kx 2023-03-24 03:51:10 +0300  19) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  20) #define __cur_brk  (*((void **)&(pmctx->_cur_brk)))
05d292b2 (kx 2023-03-24 03:51:10 +0300  21) #define __mem      ((unsigned char *)&((pmctx->_mem)[0]))
05d292b2 (kx 2023-03-24 03:51:10 +0300  22) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  23) extern void __mctx_init( void );
05d292b2 (kx 2023-03-24 03:51:10 +0300  24) extern void *__sbrk( int incr );
05d292b2 (kx 2023-03-24 03:51:10 +0300  25) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  26) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  27) struct cgit_tmplt_vars {
05d292b2 (kx 2023-03-24 03:51:10 +0300  28)   const char *css;
05d292b2 (kx 2023-03-24 03:51:10 +0300  29)   const char *owner;
05d292b2 (kx 2023-03-24 03:51:10 +0300  30)   const char *author;
05d292b2 (kx 2023-03-24 03:51:10 +0300  31)   const char *description;
05d292b2 (kx 2023-03-24 03:51:10 +0300  32)   const char *keywords;
05d292b2 (kx 2023-03-24 03:51:10 +0300  33)   const char *title;
05d292b2 (kx 2023-03-24 03:51:10 +0300  34)   const char *favicon_path;
05d292b2 (kx 2023-03-24 03:51:10 +0300  35)   const char *syntax_highlight_css;
05d292b2 (kx 2023-03-24 03:51:10 +0300  36)   const char *logo;
05d292b2 (kx 2023-03-24 03:51:10 +0300  37)   const char *logo_alt;
05d292b2 (kx 2023-03-24 03:51:10 +0300  38)   const char *logo_link;
05d292b2 (kx 2023-03-24 03:51:10 +0300  39)   const char *home_page;
05d292b2 (kx 2023-03-24 03:51:10 +0300  40)   const char *snapshots;
05d292b2 (kx 2023-03-24 03:51:10 +0300  41)   const char *status_line;
05d292b2 (kx 2023-03-24 03:51:10 +0300  42)   const char *main_menu_logo;
05d292b2 (kx 2023-03-24 03:51:10 +0300  43)   const char *main_menu_item;
05d292b2 (kx 2023-03-24 03:51:10 +0300  44)   const char *left_menu_items;
05d292b2 (kx 2023-03-24 03:51:10 +0300  45)   const char *popup_menu_items;
05d292b2 (kx 2023-03-24 03:51:10 +0300  46)   const char *right_menu_items;
05d292b2 (kx 2023-03-24 03:51:10 +0300  47)   const char *copyright_notice;
05d292b2 (kx 2023-03-24 03:51:10 +0300  48)   const char *copyright;
05d292b2 (kx 2023-03-24 03:51:10 +0300  49)   const char *page_type;
05d292b2 (kx 2023-03-24 03:51:10 +0300  50)   const char *page_size;
05d292b2 (kx 2023-03-24 03:51:10 +0300  51)   const char *num_of_repos;
05d292b2 (kx 2023-03-24 03:51:10 +0300  52) };
05d292b2 (kx 2023-03-24 03:51:10 +0300  53) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  54) #define CGIT_INFO_INIT  (struct cgit_info) { .kind = GIT_OBJECT_INVALID, .revision = { 0 }, .oid = { 0 }, .mode = GIT_FILEMODE_TREE, .author = NULL, .date = -1, .offset = 0, .mime = NULL, .lang = NULL }
05d292b2 (kx 2023-03-24 03:51:10 +0300  55) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  56) struct cgit_info {
05d292b2 (kx 2023-03-24 03:51:10 +0300  57)   git_object_t kind;
05d292b2 (kx 2023-03-24 03:51:10 +0300  58)   char    revision[GIT_OID_HEXSZ+1];
05d292b2 (kx 2023-03-24 03:51:10 +0300  59)   char         oid[GIT_OID_HEXSZ+1];
05d292b2 (kx 2023-03-24 03:51:10 +0300  60)   git_filemode_t  mode;
05d292b2 (kx 2023-03-24 03:51:10 +0300  61)   const char     *author;
05d292b2 (kx 2023-03-24 03:51:10 +0300  62)   git_time_t      date;
05d292b2 (kx 2023-03-24 03:51:10 +0300  63)   int             offset;
05d292b2 (kx 2023-03-24 03:51:10 +0300  64)   const char     *mime;
05d292b2 (kx 2023-03-24 03:51:10 +0300  65)   const char     *lang;
05d292b2 (kx 2023-03-24 03:51:10 +0300  66) };
05d292b2 (kx 2023-03-24 03:51:10 +0300  67) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  68) struct cgit_repository {
05d292b2 (kx 2023-03-24 03:51:10 +0300  69)   const char       *name;
05d292b2 (kx 2023-03-24 03:51:10 +0300  70)   struct cgit_info  info;
05d292b2 (kx 2023-03-24 03:51:10 +0300  71)   const char       *git_root;
05d292b2 (kx 2023-03-24 03:51:10 +0300  72)   const char       *repo_root;
05d292b2 (kx 2023-03-24 03:51:10 +0300  73)   const char       *relative_path;
05d292b2 (kx 2023-03-24 03:51:10 +0300  74)   struct cgit_info  relative_info;
05d292b2 (kx 2023-03-24 03:51:10 +0300  75)   const char       *relative_html;
05d292b2 (kx 2023-03-24 03:51:10 +0300  76)   const char       *relative_href;
05d292b2 (kx 2023-03-24 03:51:10 +0300  77)   const char       *search_placeholder;
05d292b2 (kx 2023-03-24 03:51:10 +0300  78)   const char       *trunk;    /* trunk    directory name */
05d292b2 (kx 2023-03-24 03:51:10 +0300  79)   const char       *clone_prefix;
05d292b2 (kx 2023-03-24 03:51:10 +0300  80)   const char       *clone_ro_prefix;
05d292b2 (kx 2023-03-24 03:51:10 +0300  81)   int               nbranches; /* number of branches */
05d292b2 (kx 2023-03-24 03:51:10 +0300  82)   int               ncommits;  /* number of commits (no more than 9999) */
05d292b2 (kx 2023-03-24 03:51:10 +0300  83)   int               ntags;     /* number of tags     */
05d292b2 (kx 2023-03-24 03:51:10 +0300  84) };
05d292b2 (kx 2023-03-24 03:51:10 +0300  85) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  86) struct cgit_page {
05d292b2 (kx 2023-03-24 03:51:10 +0300  87)   time_t modified;
05d292b2 (kx 2023-03-24 03:51:10 +0300  88)   time_t expires;
05d292b2 (kx 2023-03-24 03:51:10 +0300  89)   size_t size;
05d292b2 (kx 2023-03-24 03:51:10 +0300  90)   const char *mimetype;
05d292b2 (kx 2023-03-24 03:51:10 +0300  91)   const char *charset;
05d292b2 (kx 2023-03-24 03:51:10 +0300  92)   int status;
05d292b2 (kx 2023-03-24 03:51:10 +0300  93)   const char *status_message;
05d292b2 (kx 2023-03-24 03:51:10 +0300  94)   const char *header;
05d292b2 (kx 2023-03-24 03:51:10 +0300  95)   const char *footer;
05d292b2 (kx 2023-03-24 03:51:10 +0300  96) };
05d292b2 (kx 2023-03-24 03:51:10 +0300  97) 
05d292b2 (kx 2023-03-24 03:51:10 +0300  98) struct cgit_environment {
05d292b2 (kx 2023-03-24 03:51:10 +0300  99)   const char *http_host;
05d292b2 (kx 2023-03-24 03:51:10 +0300 100)   const char *https;
05d292b2 (kx 2023-03-24 03:51:10 +0300 101)   const char *no_http;
05d292b2 (kx 2023-03-24 03:51:10 +0300 102)   const char *path_info;
05d292b2 (kx 2023-03-24 03:51:10 +0300 103)   const char *query_string;
05d292b2 (kx 2023-03-24 03:51:10 +0300 104)   const char *request_uri;
05d292b2 (kx 2023-03-24 03:51:10 +0300 105)   const char *request_scheme;
05d292b2 (kx 2023-03-24 03:51:10 +0300 106)   const char *request_method;
05d292b2 (kx 2023-03-24 03:51:10 +0300 107)   const char *script_name;
05d292b2 (kx 2023-03-24 03:51:10 +0300 108)   const char *server_name;
05d292b2 (kx 2023-03-24 03:51:10 +0300 109)   const char *server_port;
05d292b2 (kx 2023-03-24 03:51:10 +0300 110)   const char *http_cookie;
05d292b2 (kx 2023-03-24 03:51:10 +0300 111)   unsigned int content_lenght;
05d292b2 (kx 2023-03-24 03:51:10 +0300 112)   const char *http_root;
05d292b2 (kx 2023-03-24 03:51:10 +0300 113)   int authenticated;
05d292b2 (kx 2023-03-24 03:51:10 +0300 114) };
05d292b2 (kx 2023-03-24 03:51:10 +0300 115) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 116) struct cgit_query {
05d292b2 (kx 2023-03-24 03:51:10 +0300 117)   int ofs;
05d292b2 (kx 2023-03-24 03:51:10 +0300 118)   const char *rev;
05d292b2 (kx 2023-03-24 03:51:10 +0300 119)   const char *revision;
05d292b2 (kx 2023-03-24 03:51:10 +0300 120)   const char *operation;
05d292b2 (kx 2023-03-24 03:51:10 +0300 121)   const char *search;
05d292b2 (kx 2023-03-24 03:51:10 +0300 122) };
05d292b2 (kx 2023-03-24 03:51:10 +0300 123) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 124) struct cgit_versions {
05d292b2 (kx 2023-03-24 03:51:10 +0300 125)   const char *git;
05d292b2 (kx 2023-03-24 03:51:10 +0300 126)   const char *nginx;
05d292b2 (kx 2023-03-24 03:51:10 +0300 127)   const char *cgit;
05d292b2 (kx 2023-03-24 03:51:10 +0300 128) };
05d292b2 (kx 2023-03-24 03:51:10 +0300 129) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 130) struct cgit_promotion {
05d292b2 (kx 2023-03-24 03:51:10 +0300 131)   const char *analytic_links;
05d292b2 (kx 2023-03-24 03:51:10 +0300 132)   const char *analytic_scripts;
05d292b2 (kx 2023-03-24 03:51:10 +0300 133)   int donate;
05d292b2 (kx 2023-03-24 03:51:10 +0300 134)   const char *donate_css;
05d292b2 (kx 2023-03-24 03:51:10 +0300 135)   const char *donate_html;
05d292b2 (kx 2023-03-24 03:51:10 +0300 136)   const char *donate_js;
05d292b2 (kx 2023-03-24 03:51:10 +0300 137)   const char *donate_header;
05d292b2 (kx 2023-03-24 03:51:10 +0300 138)   const char *donate_purpose;
05d292b2 (kx 2023-03-24 03:51:10 +0300 139) };
05d292b2 (kx 2023-03-24 03:51:10 +0300 140) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 141) struct cgit_context {
05d292b2 (kx 2023-03-24 03:51:10 +0300 142)   struct cgit_environment  env;
05d292b2 (kx 2023-03-24 03:51:10 +0300 143)   struct cgit_promotion    promo;
05d292b2 (kx 2023-03-24 03:51:10 +0300 144)   struct cgit_query        query;
05d292b2 (kx 2023-03-24 03:51:10 +0300 145)   struct cgit_page         page;
05d292b2 (kx 2023-03-24 03:51:10 +0300 146)   struct cgit_tmplt_vars   vars;
05d292b2 (kx 2023-03-24 03:51:10 +0300 147)   struct cgit_repository   repo;
05d292b2 (kx 2023-03-24 03:51:10 +0300 148)   struct cgit_versions     vers;
05d292b2 (kx 2023-03-24 03:51:10 +0300 149) };
05d292b2 (kx 2023-03-24 03:51:10 +0300 150) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 151) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 152) extern const char *ptype_repolist;
05d292b2 (kx 2023-03-24 03:51:10 +0300 153) extern const char *ptype_repo;
05d292b2 (kx 2023-03-24 03:51:10 +0300 154) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 155) extern struct cgit_context ctx;
05d292b2 (kx 2023-03-24 03:51:10 +0300 156) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 157) /*
05d292b2 (kx 2023-03-24 03:51:10 +0300 158)   header/footer template variables:
05d292b2 (kx 2023-03-24 03:51:10 +0300 159)   ================================
05d292b2 (kx 2023-03-24 03:51:10 +0300 160)   ${css}
05d292b2 (kx 2023-03-24 03:51:10 +0300 161)   ${owner}
05d292b2 (kx 2023-03-24 03:51:10 +0300 162)   ${author}
05d292b2 (kx 2023-03-24 03:51:10 +0300 163)   ${description}
05d292b2 (kx 2023-03-24 03:51:10 +0300 164)   ${keywords}
05d292b2 (kx 2023-03-24 03:51:10 +0300 165)   ${title}
05d292b2 (kx 2023-03-24 03:51:10 +0300 166)   ${favicon-path}
05d292b2 (kx 2023-03-24 03:51:10 +0300 167)   ${syntax-highlight-css}
05d292b2 (kx 2023-03-24 03:51:10 +0300 168)   ${logo}
05d292b2 (kx 2023-03-24 03:51:10 +0300 169)   ${logo-alt}
05d292b2 (kx 2023-03-24 03:51:10 +0300 170)   ${logo-link}
05d292b2 (kx 2023-03-24 03:51:10 +0300 171)   ${home-page}
05d292b2 (kx 2023-03-24 03:51:10 +0300 172)   ${snapshots}
05d292b2 (kx 2023-03-24 03:51:10 +0300 173)   ${status-line}
05d292b2 (kx 2023-03-24 03:51:10 +0300 174)   ${main-menu-logo}
05d292b2 (kx 2023-03-24 03:51:10 +0300 175)   ${main-menu-item}
05d292b2 (kx 2023-03-24 03:51:10 +0300 176)   ${left-menu-items}
05d292b2 (kx 2023-03-24 03:51:10 +0300 177)   ${popup-menu-items}
05d292b2 (kx 2023-03-24 03:51:10 +0300 178)   ${right-menu-items}
05d292b2 (kx 2023-03-24 03:51:10 +0300 179)   ${relative-html}
05d292b2 (kx 2023-03-24 03:51:10 +0300 180)   ${search-placeholder}
05d292b2 (kx 2023-03-24 03:51:10 +0300 181) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 182)   ${analytic-links}
05d292b2 (kx 2023-03-24 03:51:10 +0300 183)   ${analytic-scripts}
05d292b2 (kx 2023-03-24 03:51:10 +0300 184)   ${donate-css}
05d292b2 (kx 2023-03-24 03:51:10 +0300 185)   ${donate-html}
05d292b2 (kx 2023-03-24 03:51:10 +0300 186)   ${donate-js}
05d292b2 (kx 2023-03-24 03:51:10 +0300 187)   ${donate-header}
05d292b2 (kx 2023-03-24 03:51:10 +0300 188)   ${donate-purpose}
05d292b2 (kx 2023-03-24 03:51:10 +0300 189) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 190)   ${git-version}
05d292b2 (kx 2023-03-24 03:51:10 +0300 191)   ${nginx-version}
05d292b2 (kx 2023-03-24 03:51:10 +0300 192)   ${cgit-version}
05d292b2 (kx 2023-03-24 03:51:10 +0300 193)   ${copyright-notice}
05d292b2 (kx 2023-03-24 03:51:10 +0300 194)   ${copyright}
05d292b2 (kx 2023-03-24 03:51:10 +0300 195) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 196)   ${page-type}
05d292b2 (kx 2023-03-24 03:51:10 +0300 197)   ${page-size}
05d292b2 (kx 2023-03-24 03:51:10 +0300 198)   ${num-of-repos}
05d292b2 (kx 2023-03-24 03:51:10 +0300 199)  */
05d292b2 (kx 2023-03-24 03:51:10 +0300 200) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 201) extern void cgit_prepare_context( void );
05d292b2 (kx 2023-03-24 03:51:10 +0300 202) extern void cgit_prepare_template_variables( void );
05d292b2 (kx 2023-03-24 03:51:10 +0300 203) extern void cgit_release_template_variables( void );
05d292b2 (kx 2023-03-24 03:51:10 +0300 204) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 205) extern void cgit_parse_query( void );
05d292b2 (kx 2023-03-24 03:51:10 +0300 206) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 207) extern int ctx_grab_int_query_param( const char *name );
05d292b2 (kx 2023-03-24 03:51:10 +0300 208) extern const char *ctx_grab_str_query_param( const char *name );
05d292b2 (kx 2023-03-24 03:51:10 +0300 209) extern const char *ctx_remove_query_param( const char *query_string, const char *name );
05d292b2 (kx 2023-03-24 03:51:10 +0300 210) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 211) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 212) #ifdef __cplusplus
05d292b2 (kx 2023-03-24 03:51:10 +0300 213) }
05d292b2 (kx 2023-03-24 03:51:10 +0300 214) #endif
05d292b2 (kx 2023-03-24 03:51:10 +0300 215) 
05d292b2 (kx 2023-03-24 03:51:10 +0300 216) #endif  /* __CONTEXT_H */