about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorLars Hjemli2006-12-14 00:40:34 +0100
committerLars Hjemli2006-12-14 00:40:34 +0100
commit420712ac2531f65a2b94d5ec6d8e03de6942331e (patch)
tree4849b20b4341a55d1b6435c104de860cda5f6ad6
parentAdd separate makefile-rule to clear current cache (diff)
downloadcgit-420712ac2531f65a2b94d5ec6d8e03de6942331e.tar.gz
cgit-420712ac2531f65a2b94d5ec6d8e03de6942331e.zip
Add simple pager to log page
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r--cgit.c2
-rw-r--r--cgit.h1
-rw-r--r--shared.c9
-rw-r--r--ui-log.c31
4 files changed, 37 insertions, 6 deletions
diff --git a/cgit.c b/cgit.c index ada488b..d7e586d 100644 --- a/cgit.c +++ b/cgit.c
@@ -29,7 +29,7 @@ static void cgit_print_repo_page(struct cacheitem *item)
29 if (!cgit_query_page) { 29 if (!cgit_query_page) {
30 cgit_print_summary(); 30 cgit_print_summary();
31 } else if (!strcmp(cgit_query_page, "log")) { 31 } else if (!strcmp(cgit_query_page, "log")) {
32 cgit_print_log(cgit_query_head, 0, 100); 32 cgit_print_log(cgit_query_head, cgit_query_ofs, 100);
33 } else if (!strcmp(cgit_query_page, "tree")) { 33 } else if (!strcmp(cgit_query_page, "tree")) {
34 cgit_print_tree(cgit_query_sha1); 34 cgit_print_tree(cgit_query_sha1);
35 } else if (!strcmp(cgit_query_page, "view")) { 35 } else if (!strcmp(cgit_query_page, "view")) {
diff --git a/cgit.h b/cgit.h index 2fdfab3..82e8681 100644 --- a/cgit.h +++ b/cgit.h
@@ -44,6 +44,7 @@ extern char *cgit_query_repo;
44extern char *cgit_query_page; 44extern char *cgit_query_page;
45extern char *cgit_query_head; 45extern char *cgit_query_head;
46extern char *cgit_query_sha1; 46extern char *cgit_query_sha1;
47extern int cgit_query_ofs;
47 48
48extern int htmlfd; 49extern int htmlfd;
49 50
diff --git a/shared.c b/shared.c index c58a2ff..6b5cfc2 100644 --- a/shared.c +++ b/shared.c
@@ -28,6 +28,7 @@ char *cgit_query_repo = NULL;
28char *cgit_query_page = NULL; 28char *cgit_query_page = NULL;
29char *cgit_query_head = NULL; 29char *cgit_query_head = NULL;
30char *cgit_query_sha1 = NULL; 30char *cgit_query_sha1 = NULL;
31int cgit_query_ofs = 0;
31 32
32int htmlfd = 0; 33int htmlfd = 0;
33 34
@@ -59,16 +60,18 @@ void cgit_repo_config_cb(const char *name, const char *value)
59 60
60void cgit_querystring_cb(const char *name, const char *value) 61void cgit_querystring_cb(const char *name, const char *value)
61{ 62{
62 if (!strcmp(name,"r")) 63 if (!strcmp(name,"r")) {
63 cgit_query_repo = xstrdup(value); 64 cgit_query_repo = xstrdup(value);
64 else if (!strcmp(name, "p")) 65 } else if (!strcmp(name, "p")) {
65 cgit_query_page = xstrdup(value); 66 cgit_query_page = xstrdup(value);
66 else if (!strcmp(name, "h")) { 67 } else if (!strcmp(name, "h")) {
67 cgit_query_head = xstrdup(value); 68 cgit_query_head = xstrdup(value);
68 cgit_query_has_symref = 1; 69 cgit_query_has_symref = 1;
69 } else if (!strcmp(name, "id")) { 70 } else if (!strcmp(name, "id")) {
70 cgit_query_sha1 = xstrdup(value); 71 cgit_query_sha1 = xstrdup(value);
71 cgit_query_has_sha1 = 1; 72 cgit_query_has_sha1 = 1;
73 } else if (!strcmp(name, "ofs")) {
74 cgit_query_ofs = atoi(value);
72 } 75 }
73} 76}
74 77
diff --git a/ui-log.c b/ui-log.c index 4d2c2e0..dce50f7 100644 --- a/ui-log.c +++ b/ui-log.c
@@ -95,7 +95,7 @@ void cgit_print_log(const char *tip, int ofs, int cnt)
95 struct rev_info rev; 95 struct rev_info rev;
96 struct commit *commit; 96 struct commit *commit;
97 const char *argv[2] = {NULL, tip}; 97 const char *argv[2] = {NULL, tip};
98 int n = 0; 98 int i;
99 99
100 init_revisions(&rev, NULL); 100 init_revisions(&rev, NULL);
101 rev.abbrev = DEFAULT_ABBREV; 101 rev.abbrev = DEFAULT_ABBREV;
@@ -108,7 +108,18 @@ void cgit_print_log(const char *tip, int ofs, int cnt)
108 html("<h2>Log</h2>"); 108 html("<h2>Log</h2>");
109 html("<table class='list'>"); 109 html("<table class='list'>");
110 html("<tr><th>Date</th><th>Message</th><th>Author</th><th>Link</th></tr>\n"); 110 html("<tr><th>Date</th><th>Message</th><th>Author</th><th>Link</th></tr>\n");
111 while ((commit = get_revision(&rev)) != NULL && n++ < 100) { 111
112 if (ofs<0)
113 ofs = 0;
114
115 for (i = 0; i < ofs && (commit = get_revision(&rev)) != NULL; i++) {
116 free(commit->buffer);
117 commit->buffer = NULL;
118 free_commit_list(commit->parents);
119 commit->parents = NULL;
120 }
121
122 for (i = 0; i < cnt && (commit = get_revision(&rev)) != NULL; i++) {
112 cgit_print_commit_shortlog(commit); 123 cgit_print_commit_shortlog(commit);
113 free(commit->buffer); 124 free(commit->buffer);
114 commit->buffer = NULL; 125 commit->buffer = NULL;
@@ -116,5 +127,21 @@ void cgit_print_log(const char *tip, int ofs, int cnt)
116 commit->parents = NULL; 127 commit->parents = NULL;
117 } 128 }
118 html("</table>\n"); 129 html("</table>\n");
130
131 html("<div class='pager'>");
132 if (ofs > 0) {
133 html("&nbsp;<a href='");
134 html(cgit_pageurl(cgit_query_repo, cgit_query_page,
135 fmt("h=%s&ofs=%d", tip, ofs-cnt)));
136 html("'>[prev]</a>&nbsp;");
137 }
138
139 if ((commit = get_revision(&rev)) != NULL) {
140 html("&nbsp;<a href='");
141 html(cgit_pageurl(cgit_query_repo, "log",
142 fmt("h=%s&ofs=%d", tip, ofs+cnt)));
143 html("'>[next]</a>&nbsp;");
144 }
145 html("</div>");
119} 146}
120 147