Skip to content

Commit c5984a9

Browse files
committed
Add separate header-files for each page/view
Yet another step towards removing cgit.h. Signed-off-by: Lars Hjemli <[email protected]>
1 parent f34478c commit c5984a9

15 files changed

+257
-189
lines changed

cgit.h

-17
Original file line numberDiff line numberDiff line change
@@ -269,23 +269,6 @@ extern void cgit_print_docstart(struct cgit_context *ctx);
269269
extern void cgit_print_docend();
270270
extern void cgit_print_pageheader(struct cgit_context *ctx);
271271
extern void cgit_print_filemode(unsigned short mode);
272-
extern void cgit_print_branches(int maxcount);
273-
extern void cgit_print_tags(int maxcount);
274-
275-
extern void cgit_print_repolist();
276-
extern void cgit_print_summary();
277-
extern void cgit_print_log(const char *tip, int ofs, int cnt, char *grep,
278-
char *pattern, char *path, int pager);
279-
extern void cgit_print_blob(const char *hex, char *path);
280-
extern void cgit_print_tree(const char *rev, char *path);
281-
extern void cgit_print_commit(char *hex);
282-
extern void cgit_print_refs();
283-
extern void cgit_print_tag(char *revname);
284-
extern void cgit_print_diff(const char *new_hex, const char *old_hex, const char *prefix);
285-
extern void cgit_print_patch(char *hex);
286-
extern void cgit_print_snapshot(const char *head, const char *hex,
287-
const char *prefix, const char *filename,
288-
int snapshot);
289272
extern void cgit_print_snapshot_links(const char *repo, const char *head,
290273
const char *hex, int snapshots);
291274
extern int cgit_parse_snapshots_mask(const char *str);

cmd.c

+11
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,17 @@
88

99
#include "cgit.h"
1010
#include "cmd.h"
11+
#include "ui-blob.h"
12+
#include "ui-commit.h"
13+
#include "ui-diff.h"
14+
#include "ui-log.h"
15+
#include "ui-patch.h"
16+
#include "ui-refs.h"
17+
#include "ui-repolist.h"
18+
#include "ui-snapshot.h"
19+
#include "ui-summary.h"
20+
#include "ui-tag.h"
21+
#include "ui-tree.h"
1122

1223
static void blob_fn(struct cgit_context *ctx)
1324
{

ui-blob.h

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#ifndef UI_BLOB_H
2+
#define UI_BLOB_H
3+
4+
extern void cgit_print_blob(const char *hex, char *path);
5+
6+
#endif /* UI_BLOB_H */

ui-commit.h

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#ifndef UI_COMMIT_H
2+
#define UI_COMMIT_H
3+
4+
extern void cgit_print_commit(char *hex);
5+
6+
#endif /* UI_COMMIT_H */

ui-diff.h

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#ifndef UI_DIFF_H
2+
#define UI_DIFF_H
3+
4+
extern void cgit_print_diff(const char *new_hex, const char *old_hex,
5+
const char *prefix);
6+
7+
#endif /* UI_DIFF_H */

ui-log.h

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#ifndef UI_LOG_H
2+
#define UI_LOG_H
3+
4+
extern void cgit_print_log(const char *tip, int ofs, int cnt, char *grep,
5+
char *pattern, char *path, int pager);
6+
7+
#endif /* UI_LOG_H */

ui-patch.h

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#ifndef UI_PATCH_H
2+
#define UI_PATCH_H
3+
4+
extern void cgit_print_patch(char *hex);
5+
6+
#endif /* UI_PATCH_H */

ui-refs.c

+172
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,178 @@
99
#include "cgit.h"
1010
#include "html.h"
1111

12+
static int header;
13+
14+
static int cmp_age(int age1, int age2)
15+
{
16+
if (age1 != 0 && age2 != 0)
17+
return age2 - age1;
18+
19+
if (age1 == 0 && age2 == 0)
20+
return 0;
21+
22+
if (age1 == 0)
23+
return +1;
24+
25+
return -1;
26+
}
27+
28+
static int cmp_ref_name(const void *a, const void *b)
29+
{
30+
struct refinfo *r1 = *(struct refinfo **)a;
31+
struct refinfo *r2 = *(struct refinfo **)b;
32+
33+
return strcmp(r1->refname, r2->refname);
34+
}
35+
36+
static int cmp_branch_age(const void *a, const void *b)
37+
{
38+
struct refinfo *r1 = *(struct refinfo **)a;
39+
struct refinfo *r2 = *(struct refinfo **)b;
40+
41+
return cmp_age(r1->commit->committer_date, r2->commit->committer_date);
42+
}
43+
44+
static int cmp_tag_age(const void *a, const void *b)
45+
{
46+
struct refinfo *r1 = *(struct refinfo **)a;
47+
struct refinfo *r2 = *(struct refinfo **)b;
48+
49+
return cmp_age(r1->tag->tagger_date, r2->tag->tagger_date);
50+
}
51+
52+
static int print_branch(struct refinfo *ref)
53+
{
54+
struct commitinfo *info = ref->commit;
55+
char *name = (char *)ref->refname;
56+
57+
if (!info)
58+
return 1;
59+
html("<tr><td>");
60+
cgit_log_link(name, NULL, NULL, name, NULL, NULL, 0, NULL, NULL);
61+
html("</td><td>");
62+
63+
if (ref->object->type == OBJ_COMMIT) {
64+
cgit_print_age(info->commit->date, -1, NULL);
65+
html("</td><td>");
66+
html_txt(info->author);
67+
html("</td><td>");
68+
cgit_commit_link(info->subject, NULL, NULL, name, NULL);
69+
} else {
70+
html("</td><td></td><td>");
71+
cgit_object_link(ref->object);
72+
}
73+
html("</td></tr>\n");
74+
return 0;
75+
}
76+
77+
static void print_tag_header()
78+
{
79+
html("<tr class='nohover'><th class='left'>Tag</th>"
80+
"<th class='left'>Age</th>"
81+
"<th class='left'>Author</th>"
82+
"<th class='left'>Reference</th></tr>\n");
83+
header = 1;
84+
}
85+
86+
static int print_tag(struct refinfo *ref)
87+
{
88+
struct tag *tag;
89+
struct taginfo *info;
90+
char *url, *name = (char *)ref->refname;
91+
92+
if (ref->object->type == OBJ_TAG) {
93+
tag = (struct tag *)ref->object;
94+
info = ref->tag;
95+
if (!tag || !info)
96+
return 1;
97+
html("<tr><td>");
98+
url = cgit_pageurl(ctx.qry.repo, "tag",
99+
fmt("id=%s", name));
100+
html_link_open(url, NULL, NULL);
101+
html_txt(name);
102+
html_link_close();
103+
html("</td><td>");
104+
if (info->tagger_date > 0)
105+
cgit_print_age(info->tagger_date, -1, NULL);
106+
html("</td><td>");
107+
if (info->tagger)
108+
html(info->tagger);
109+
html("</td><td>");
110+
cgit_object_link(tag->tagged);
111+
html("</td></tr>\n");
112+
} else {
113+
if (!header)
114+
print_tag_header();
115+
html("<tr><td>");
116+
html_txt(name);
117+
html("</td><td colspan='2'/><td>");
118+
cgit_object_link(ref->object);
119+
html("</td></tr>\n");
120+
}
121+
return 0;
122+
}
123+
124+
static void print_refs_link(char *path)
125+
{
126+
html("<tr class='nohover'><td colspan='4'>");
127+
cgit_refs_link("[...]", NULL, NULL, ctx.qry.head, NULL, path);
128+
html("</td></tr>");
129+
}
130+
131+
void cgit_print_branches(int maxcount)
132+
{
133+
struct reflist list;
134+
int i;
135+
136+
html("<tr class='nohover'><th class='left'>Branch</th>"
137+
"<th class='left'>Idle</th>"
138+
"<th class='left'>Author</th>"
139+
"<th class='left'>Head commit</th></tr>\n");
140+
141+
list.refs = NULL;
142+
list.alloc = list.count = 0;
143+
for_each_branch_ref(cgit_refs_cb, &list);
144+
145+
if (maxcount == 0 || maxcount > list.count)
146+
maxcount = list.count;
147+
148+
if (maxcount < list.count) {
149+
qsort(list.refs, list.count, sizeof(*list.refs), cmp_branch_age);
150+
qsort(list.refs, maxcount, sizeof(*list.refs), cmp_ref_name);
151+
}
152+
153+
for(i=0; i<maxcount; i++)
154+
print_branch(list.refs[i]);
155+
156+
if (maxcount < list.count)
157+
print_refs_link("heads");
158+
}
159+
160+
void cgit_print_tags(int maxcount)
161+
{
162+
struct reflist list;
163+
int i;
164+
165+
header = 0;
166+
list.refs = NULL;
167+
list.alloc = list.count = 0;
168+
for_each_tag_ref(cgit_refs_cb, &list);
169+
if (list.count == 0)
170+
return;
171+
qsort(list.refs, list.count, sizeof(*list.refs), cmp_tag_age);
172+
if (!maxcount)
173+
maxcount = list.count;
174+
else if (maxcount > list.count)
175+
maxcount = list.count;
176+
print_tag_header();
177+
for(i=0; i<maxcount; i++)
178+
print_tag(list.refs[i]);
179+
180+
if (maxcount < list.count)
181+
print_refs_link("tags");
182+
}
183+
12184
void cgit_print_refs()
13185
{
14186

ui-refs.h

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#ifndef UI_REFS_H
2+
#define UI_REFS_H
3+
4+
extern void cgit_print_branches(int maxcount);
5+
extern void cgit_print_tags(int maxcount);
6+
extern void cgit_print_refs();
7+
8+
#endif /* UI_REFS_H */

ui-repolist.h

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#ifndef UI_REPOLIST_H
2+
#define UI_REPOLIST_H
3+
4+
extern void cgit_print_repolist();
5+
6+
#endif /* UI_REPOLIST_H */

ui-snapshot.h

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#ifndef UI_SNAPSHOT_H
2+
#define UI_SNAPSHOT_H
3+
4+
extern void cgit_print_snapshot(const char *head, const char *hex,
5+
const char *prefix, const char *filename,
6+
int snapshot);
7+
8+
#endif /* UI_SNAPSHOT_H */

0 commit comments

Comments
 (0)