f86a23ff53
This new page, which is disabled by default, can be used to print some statistics about the number of commits per period in the repository, where period can be either weeks, months, quarters or years. The function can be activated globally by setting 'enable-stats=1' in cgitrc and disabled for individual repos by setting 'repo.enable-stats=0'. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
176 lines
3.5 KiB
C
176 lines
3.5 KiB
C
/* cmd.c: the cgit command dispatcher
|
|
*
|
|
* Copyright (C) 2008 Lars Hjemli
|
|
*
|
|
* Licensed under GNU General Public License v2
|
|
* (see COPYING for full license text)
|
|
*/
|
|
|
|
#include "cgit.h"
|
|
#include "cmd.h"
|
|
#include "cache.h"
|
|
#include "ui-shared.h"
|
|
#include "ui-atom.h"
|
|
#include "ui-blob.h"
|
|
#include "ui-clone.h"
|
|
#include "ui-commit.h"
|
|
#include "ui-diff.h"
|
|
#include "ui-log.h"
|
|
#include "ui-patch.h"
|
|
#include "ui-plain.h"
|
|
#include "ui-refs.h"
|
|
#include "ui-repolist.h"
|
|
#include "ui-snapshot.h"
|
|
#include "ui-stats.h"
|
|
#include "ui-summary.h"
|
|
#include "ui-tag.h"
|
|
#include "ui-tree.h"
|
|
|
|
static void HEAD_fn(struct cgit_context *ctx)
|
|
{
|
|
cgit_clone_head(ctx);
|
|
}
|
|
|
|
static void atom_fn(struct cgit_context *ctx)
|
|
{
|
|
cgit_print_atom(ctx->qry.head, ctx->qry.path, 10);
|
|
}
|
|
|
|
static void about_fn(struct cgit_context *ctx)
|
|
{
|
|
if (ctx->repo)
|
|
cgit_print_repo_readme();
|
|
else
|
|
cgit_print_site_readme();
|
|
}
|
|
|
|
static void blob_fn(struct cgit_context *ctx)
|
|
{
|
|
cgit_print_blob(ctx->qry.sha1, ctx->qry.path, ctx->qry.head);
|
|
}
|
|
|
|
static void commit_fn(struct cgit_context *ctx)
|
|
{
|
|
cgit_print_commit(ctx->qry.sha1);
|
|
}
|
|
|
|
static void diff_fn(struct cgit_context *ctx)
|
|
{
|
|
cgit_print_diff(ctx->qry.sha1, ctx->qry.sha2, ctx->qry.path);
|
|
}
|
|
|
|
static void info_fn(struct cgit_context *ctx)
|
|
{
|
|
cgit_clone_info(ctx);
|
|
}
|
|
|
|
static void log_fn(struct cgit_context *ctx)
|
|
{
|
|
cgit_print_log(ctx->qry.sha1, ctx->qry.ofs, ctx->cfg.max_commit_count,
|
|
ctx->qry.grep, ctx->qry.search, ctx->qry.path, 1);
|
|
}
|
|
|
|
static void ls_cache_fn(struct cgit_context *ctx)
|
|
{
|
|
ctx->page.mimetype = "text/plain";
|
|
ctx->page.filename = "ls-cache.txt";
|
|
cgit_print_http_headers(ctx);
|
|
cache_ls(ctx->cfg.cache_root);
|
|
}
|
|
|
|
static void objects_fn(struct cgit_context *ctx)
|
|
{
|
|
cgit_clone_objects(ctx);
|
|
}
|
|
|
|
static void repolist_fn(struct cgit_context *ctx)
|
|
{
|
|
cgit_print_repolist();
|
|
}
|
|
|
|
static void patch_fn(struct cgit_context *ctx)
|
|
{
|
|
cgit_print_patch(ctx->qry.sha1);
|
|
}
|
|
|
|
static void plain_fn(struct cgit_context *ctx)
|
|
{
|
|
cgit_print_plain(ctx);
|
|
}
|
|
|
|
static void refs_fn(struct cgit_context *ctx)
|
|
{
|
|
cgit_print_refs();
|
|
}
|
|
|
|
static void snapshot_fn(struct cgit_context *ctx)
|
|
{
|
|
cgit_print_snapshot(ctx->qry.head, ctx->qry.sha1,
|
|
cgit_repobasename(ctx->repo->url), ctx->qry.path,
|
|
ctx->repo->snapshots, ctx->qry.nohead);
|
|
}
|
|
|
|
static void stats_fn(struct cgit_context *ctx)
|
|
{
|
|
if (ctx->repo->enable_stats)
|
|
cgit_show_stats(ctx);
|
|
else
|
|
cgit_print_error("Stats disabled for this repo");
|
|
}
|
|
|
|
static void summary_fn(struct cgit_context *ctx)
|
|
{
|
|
cgit_print_summary();
|
|
}
|
|
|
|
static void tag_fn(struct cgit_context *ctx)
|
|
{
|
|
cgit_print_tag(ctx->qry.sha1);
|
|
}
|
|
|
|
static void tree_fn(struct cgit_context *ctx)
|
|
{
|
|
cgit_print_tree(ctx->qry.sha1, ctx->qry.path);
|
|
}
|
|
|
|
#define def_cmd(name, want_repo, want_layout) \
|
|
{#name, name##_fn, want_repo, want_layout}
|
|
|
|
struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx)
|
|
{
|
|
static struct cgit_cmd cmds[] = {
|
|
def_cmd(HEAD, 1, 0),
|
|
def_cmd(atom, 1, 0),
|
|
def_cmd(about, 0, 1),
|
|
def_cmd(blob, 1, 0),
|
|
def_cmd(commit, 1, 1),
|
|
def_cmd(diff, 1, 1),
|
|
def_cmd(info, 1, 0),
|
|
def_cmd(log, 1, 1),
|
|
def_cmd(ls_cache, 0, 0),
|
|
def_cmd(objects, 1, 0),
|
|
def_cmd(patch, 1, 0),
|
|
def_cmd(plain, 1, 0),
|
|
def_cmd(refs, 1, 1),
|
|
def_cmd(repolist, 0, 0),
|
|
def_cmd(snapshot, 1, 0),
|
|
def_cmd(stats, 1, 1),
|
|
def_cmd(summary, 1, 1),
|
|
def_cmd(tag, 1, 1),
|
|
def_cmd(tree, 1, 1),
|
|
};
|
|
int i;
|
|
|
|
if (ctx->qry.page == NULL) {
|
|
if (ctx->repo)
|
|
ctx->qry.page = "summary";
|
|
else
|
|
ctx->qry.page = "repolist";
|
|
}
|
|
|
|
for(i = 0; i < sizeof(cmds)/sizeof(*cmds); i++)
|
|
if (!strcmp(ctx->qry.page, cmds[i].name))
|
|
return &cmds[i];
|
|
return NULL;
|
|
}
|