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

12 Commits   0 Branches   1 Tag

#ifndef    __CONTEXT_H
#define    __CONTEXT_H

#ifdef __cplusplus
extern "C" {
#endif


#define CONTEXT_MEM_SIZE  524288

struct __context
{
  void *_cur_brk;
  unsigned char _mem[CONTEXT_MEM_SIZE];
};

extern struct __context *pmctx;

#define __cur_brk  (*((void **)&(pmctx->_cur_brk)))
#define __mem      ((unsigned char *)&((pmctx->_mem)[0]))

extern void __mctx_init( void );
extern void *__sbrk( int incr );


struct cgit_tmplt_vars {
  const char *css;
  const char *owner;
  const char *author;
  const char *description;
  const char *keywords;
  const char *title;
  const char *favicon_path;
  const char *syntax_highlight_css;
  const char *logo;
  const char *logo_alt;
  const char *logo_link;
  const char *home_page;
  const char *snapshots;
  const char *status_line;
  const char *main_menu_logo;
  const char *main_menu_item;
  const char *left_menu_items;
  const char *popup_menu_items;
  const char *right_menu_items;
  const char *copyright_notice;
  const char *copyright;
  const char *page_type;
  const char *page_size;
  const char *num_of_repos;
};

#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 }

struct cgit_info {
  git_object_t kind;
  char    revision[GIT_OID_HEXSZ+1];
  char         oid[GIT_OID_HEXSZ+1];
  git_filemode_t  mode;
  const char     *author;
  git_time_t      date;
  int             offset;
  const char     *mime;
  const char     *lang;
};

struct cgit_repository {
  const char       *name;
  struct cgit_info  info;
  const char       *git_root;
  const char       *repo_root;
  const char       *relative_path;
  struct cgit_info  relative_info;
  const char       *relative_html;
  const char       *relative_href;
  const char       *search_placeholder;
  const char       *trunk;    /* trunk    directory name */
  const char       *clone_prefix;
  const char       *clone_ro_prefix;
  int               nbranches; /* number of branches */
  int               ncommits;  /* number of commits (no more than 9999) */
  int               ntags;     /* number of tags     */
};

struct cgit_page {
  time_t modified;
  time_t expires;
  size_t size;
  const char *mimetype;
  const char *charset;
  int status;
  const char *status_message;
  const char *header;
  const char *footer;
};

struct cgit_environment {
  const char *http_host;
  const char *https;
  const char *no_http;
  const char *path_info;
  const char *query_string;
  const char *request_uri;
  const char *request_scheme;
  const char *request_method;
  const char *script_name;
  const char *server_name;
  const char *server_port;
  const char *http_cookie;
  unsigned int content_lenght;
  const char *http_root;
  int authenticated;
};

struct cgit_query {
  int ofs;
  const char *rev;
  const char *revision;
  const char *operation;
  const char *search;
};

struct cgit_versions {
  const char *git;
  const char *nginx;
  const char *cgit;
};

struct cgit_promotion {
  const char *analytic_links;
  const char *analytic_scripts;
  int donate;
  const char *donate_css;
  const char *donate_html;
  const char *donate_js;
  const char *donate_header;
  const char *donate_purpose;
};

struct cgit_context {
  struct cgit_environment  env;
  struct cgit_promotion    promo;
  struct cgit_query        query;
  struct cgit_page         page;
  struct cgit_tmplt_vars   vars;
  struct cgit_repository   repo;
  struct cgit_versions     vers;
};


extern const char *ptype_repolist;
extern const char *ptype_repo;

extern struct cgit_context ctx;

/*
  header/footer template variables:
  ================================
  ${css}
  ${owner}
  ${author}
  ${description}
  ${keywords}
  ${title}
  ${favicon-path}
  ${syntax-highlight-css}
  ${logo}
  ${logo-alt}
  ${logo-link}
  ${home-page}
  ${snapshots}
  ${status-line}
  ${main-menu-logo}
  ${main-menu-item}
  ${left-menu-items}
  ${popup-menu-items}
  ${right-menu-items}
  ${relative-html}
  ${search-placeholder}

  ${analytic-links}
  ${analytic-scripts}
  ${donate-css}
  ${donate-html}
  ${donate-js}
  ${donate-header}
  ${donate-purpose}

  ${git-version}
  ${nginx-version}
  ${cgit-version}
  ${copyright-notice}
  ${copyright}

  ${page-type}
  ${page-size}
  ${num-of-repos}
 */

extern void cgit_prepare_context( void );
extern void cgit_prepare_template_variables( void );
extern void cgit_release_template_variables( void );

extern void cgit_parse_query( void );

extern int ctx_grab_int_query_param( const char *name );
extern const char *ctx_grab_str_query_param( const char *name );
extern const char *ctx_remove_query_param( const char *query_string, const char *name );


#ifdef __cplusplus
}
#endif

#endif  /* __CONTEXT_H */