summaryrefslogtreecommitdiffabout
path: root/cmd.c
authorLars Hjemli <hjemli@gmail.com>2008-12-06 16:38:19 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2008-12-06 16:38:19 (UTC)
commitf86a23ff537258d36bf8f1876fa7a4bede6673d8 (patch) (unidiff)
tree8328d415416058cdc5b0fd2c6564ddcab5766c7a /cmd.c
parent140012d7a8e51df5a9f9c556696778b86ade4fc9 (diff)
downloadcgit-f86a23ff537258d36bf8f1876fa7a4bede6673d8.zip
cgit-f86a23ff537258d36bf8f1876fa7a4bede6673d8.tar.gz
cgit-f86a23ff537258d36bf8f1876fa7a4bede6673d8.tar.bz2
Add a 'stats' page to each repo
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>
Diffstat (limited to 'cmd.c') (more/less context) (ignore whitespace changes)
-rw-r--r--cmd.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/cmd.c b/cmd.c
index 5b3c14c..744bf84 100644
--- a/cmd.c
+++ b/cmd.c
@@ -1,165 +1,175 @@
1/* cmd.c: the cgit command dispatcher 1/* cmd.c: the cgit command dispatcher
2 * 2 *
3 * Copyright (C) 2008 Lars Hjemli 3 * Copyright (C) 2008 Lars Hjemli
4 * 4 *
5 * Licensed under GNU General Public License v2 5 * Licensed under GNU General Public License v2
6 * (see COPYING for full license text) 6 * (see COPYING for full license text)
7 */ 7 */
8 8
9#include "cgit.h" 9#include "cgit.h"
10#include "cmd.h" 10#include "cmd.h"
11#include "cache.h" 11#include "cache.h"
12#include "ui-shared.h" 12#include "ui-shared.h"
13#include "ui-atom.h" 13#include "ui-atom.h"
14#include "ui-blob.h" 14#include "ui-blob.h"
15#include "ui-clone.h" 15#include "ui-clone.h"
16#include "ui-commit.h" 16#include "ui-commit.h"
17#include "ui-diff.h" 17#include "ui-diff.h"
18#include "ui-log.h" 18#include "ui-log.h"
19#include "ui-patch.h" 19#include "ui-patch.h"
20#include "ui-plain.h" 20#include "ui-plain.h"
21#include "ui-refs.h" 21#include "ui-refs.h"
22#include "ui-repolist.h" 22#include "ui-repolist.h"
23#include "ui-snapshot.h" 23#include "ui-snapshot.h"
24#include "ui-stats.h"
24#include "ui-summary.h" 25#include "ui-summary.h"
25#include "ui-tag.h" 26#include "ui-tag.h"
26#include "ui-tree.h" 27#include "ui-tree.h"
27 28
28static void HEAD_fn(struct cgit_context *ctx) 29static void HEAD_fn(struct cgit_context *ctx)
29{ 30{
30 cgit_clone_head(ctx); 31 cgit_clone_head(ctx);
31} 32}
32 33
33static void atom_fn(struct cgit_context *ctx) 34static void atom_fn(struct cgit_context *ctx)
34{ 35{
35 cgit_print_atom(ctx->qry.head, ctx->qry.path, 10); 36 cgit_print_atom(ctx->qry.head, ctx->qry.path, 10);
36} 37}
37 38
38static void about_fn(struct cgit_context *ctx) 39static void about_fn(struct cgit_context *ctx)
39{ 40{
40 if (ctx->repo) 41 if (ctx->repo)
41 cgit_print_repo_readme(); 42 cgit_print_repo_readme();
42 else 43 else
43 cgit_print_site_readme(); 44 cgit_print_site_readme();
44} 45}
45 46
46static void blob_fn(struct cgit_context *ctx) 47static void blob_fn(struct cgit_context *ctx)
47{ 48{
48 cgit_print_blob(ctx->qry.sha1, ctx->qry.path, ctx->qry.head); 49 cgit_print_blob(ctx->qry.sha1, ctx->qry.path, ctx->qry.head);
49} 50}
50 51
51static void commit_fn(struct cgit_context *ctx) 52static void commit_fn(struct cgit_context *ctx)
52{ 53{
53 cgit_print_commit(ctx->qry.sha1); 54 cgit_print_commit(ctx->qry.sha1);
54} 55}
55 56
56static void diff_fn(struct cgit_context *ctx) 57static void diff_fn(struct cgit_context *ctx)
57{ 58{
58 cgit_print_diff(ctx->qry.sha1, ctx->qry.sha2, ctx->qry.path); 59 cgit_print_diff(ctx->qry.sha1, ctx->qry.sha2, ctx->qry.path);
59} 60}
60 61
61static void info_fn(struct cgit_context *ctx) 62static void info_fn(struct cgit_context *ctx)
62{ 63{
63 cgit_clone_info(ctx); 64 cgit_clone_info(ctx);
64} 65}
65 66
66static void log_fn(struct cgit_context *ctx) 67static void log_fn(struct cgit_context *ctx)
67{ 68{
68 cgit_print_log(ctx->qry.sha1, ctx->qry.ofs, ctx->cfg.max_commit_count, 69 cgit_print_log(ctx->qry.sha1, ctx->qry.ofs, ctx->cfg.max_commit_count,
69 ctx->qry.grep, ctx->qry.search, ctx->qry.path, 1); 70 ctx->qry.grep, ctx->qry.search, ctx->qry.path, 1);
70} 71}
71 72
72static void ls_cache_fn(struct cgit_context *ctx) 73static void ls_cache_fn(struct cgit_context *ctx)
73{ 74{
74 ctx->page.mimetype = "text/plain"; 75 ctx->page.mimetype = "text/plain";
75 ctx->page.filename = "ls-cache.txt"; 76 ctx->page.filename = "ls-cache.txt";
76 cgit_print_http_headers(ctx); 77 cgit_print_http_headers(ctx);
77 cache_ls(ctx->cfg.cache_root); 78 cache_ls(ctx->cfg.cache_root);
78} 79}
79 80
80static void objects_fn(struct cgit_context *ctx) 81static void objects_fn(struct cgit_context *ctx)
81{ 82{
82 cgit_clone_objects(ctx); 83 cgit_clone_objects(ctx);
83} 84}
84 85
85static void repolist_fn(struct cgit_context *ctx) 86static void repolist_fn(struct cgit_context *ctx)
86{ 87{
87 cgit_print_repolist(); 88 cgit_print_repolist();
88} 89}
89 90
90static void patch_fn(struct cgit_context *ctx) 91static void patch_fn(struct cgit_context *ctx)
91{ 92{
92 cgit_print_patch(ctx->qry.sha1); 93 cgit_print_patch(ctx->qry.sha1);
93} 94}
94 95
95static void plain_fn(struct cgit_context *ctx) 96static void plain_fn(struct cgit_context *ctx)
96{ 97{
97 cgit_print_plain(ctx); 98 cgit_print_plain(ctx);
98} 99}
99 100
100static void refs_fn(struct cgit_context *ctx) 101static void refs_fn(struct cgit_context *ctx)
101{ 102{
102 cgit_print_refs(); 103 cgit_print_refs();
103} 104}
104 105
105static void snapshot_fn(struct cgit_context *ctx) 106static void snapshot_fn(struct cgit_context *ctx)
106{ 107{
107 cgit_print_snapshot(ctx->qry.head, ctx->qry.sha1, 108 cgit_print_snapshot(ctx->qry.head, ctx->qry.sha1,
108 cgit_repobasename(ctx->repo->url), ctx->qry.path, 109 cgit_repobasename(ctx->repo->url), ctx->qry.path,
109 ctx->repo->snapshots, ctx->qry.nohead); 110 ctx->repo->snapshots, ctx->qry.nohead);
110} 111}
111 112
113static void stats_fn(struct cgit_context *ctx)
114{
115 if (ctx->repo->enable_stats)
116 cgit_show_stats(ctx);
117 else
118 cgit_print_error("Stats disabled for this repo");
119}
120
112static void summary_fn(struct cgit_context *ctx) 121static void summary_fn(struct cgit_context *ctx)
113{ 122{
114 cgit_print_summary(); 123 cgit_print_summary();
115} 124}
116 125
117static void tag_fn(struct cgit_context *ctx) 126static void tag_fn(struct cgit_context *ctx)
118{ 127{
119 cgit_print_tag(ctx->qry.sha1); 128 cgit_print_tag(ctx->qry.sha1);
120} 129}
121 130
122static void tree_fn(struct cgit_context *ctx) 131static void tree_fn(struct cgit_context *ctx)
123{ 132{
124 cgit_print_tree(ctx->qry.sha1, ctx->qry.path); 133 cgit_print_tree(ctx->qry.sha1, ctx->qry.path);
125} 134}
126 135
127#define def_cmd(name, want_repo, want_layout) \ 136#define def_cmd(name, want_repo, want_layout) \
128 {#name, name##_fn, want_repo, want_layout} 137 {#name, name##_fn, want_repo, want_layout}
129 138
130struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx) 139struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx)
131{ 140{
132 static struct cgit_cmd cmds[] = { 141 static struct cgit_cmd cmds[] = {
133 def_cmd(HEAD, 1, 0), 142 def_cmd(HEAD, 1, 0),
134 def_cmd(atom, 1, 0), 143 def_cmd(atom, 1, 0),
135 def_cmd(about, 0, 1), 144 def_cmd(about, 0, 1),
136 def_cmd(blob, 1, 0), 145 def_cmd(blob, 1, 0),
137 def_cmd(commit, 1, 1), 146 def_cmd(commit, 1, 1),
138 def_cmd(diff, 1, 1), 147 def_cmd(diff, 1, 1),
139 def_cmd(info, 1, 0), 148 def_cmd(info, 1, 0),
140 def_cmd(log, 1, 1), 149 def_cmd(log, 1, 1),
141 def_cmd(ls_cache, 0, 0), 150 def_cmd(ls_cache, 0, 0),
142 def_cmd(objects, 1, 0), 151 def_cmd(objects, 1, 0),
143 def_cmd(patch, 1, 0), 152 def_cmd(patch, 1, 0),
144 def_cmd(plain, 1, 0), 153 def_cmd(plain, 1, 0),
145 def_cmd(refs, 1, 1), 154 def_cmd(refs, 1, 1),
146 def_cmd(repolist, 0, 0), 155 def_cmd(repolist, 0, 0),
147 def_cmd(snapshot, 1, 0), 156 def_cmd(snapshot, 1, 0),
157 def_cmd(stats, 1, 1),
148 def_cmd(summary, 1, 1), 158 def_cmd(summary, 1, 1),
149 def_cmd(tag, 1, 1), 159 def_cmd(tag, 1, 1),
150 def_cmd(tree, 1, 1), 160 def_cmd(tree, 1, 1),
151 }; 161 };
152 int i; 162 int i;
153 163
154 if (ctx->qry.page == NULL) { 164 if (ctx->qry.page == NULL) {
155 if (ctx->repo) 165 if (ctx->repo)
156 ctx->qry.page = "summary"; 166 ctx->qry.page = "summary";
157 else 167 else
158 ctx->qry.page = "repolist"; 168 ctx->qry.page = "repolist";
159 } 169 }
160 170
161 for(i = 0; i < sizeof(cmds)/sizeof(*cmds); i++) 171 for(i = 0; i < sizeof(cmds)/sizeof(*cmds); i++)
162 if (!strcmp(ctx->qry.page, cmds[i].name)) 172 if (!strcmp(ctx->qry.page, cmds[i].name))
163 return &cmds[i]; 173 return &cmds[i];
164 return NULL; 174 return NULL;
165} 175}