summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-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
@@ -24,17 +24,17 @@ static void cgit_print_repo_page(struct cacheitem *item)
24 } 24 }
25 setenv("GIT_DIR", fmt("%s/%s", cgit_root, cgit_query_repo), 1); 25 setenv("GIT_DIR", fmt("%s/%s", cgit_root, cgit_query_repo), 1);
26 char *title = fmt("%s - %s", cgit_repo_name, cgit_repo_desc); 26 char *title = fmt("%s - %s", cgit_repo_name, cgit_repo_desc);
27 cgit_print_docstart(title, item); 27 cgit_print_docstart(title, item);
28 cgit_print_pageheader(title); 28 cgit_print_pageheader(title);
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")) {
36 cgit_print_view(cgit_query_sha1); 36 cgit_print_view(cgit_query_sha1);
37 } 37 }
38 cgit_print_docend(); 38 cgit_print_docend();
39} 39}
40 40
diff --git a/cgit.h b/cgit.h
index 2fdfab3..82e8681 100644
--- a/cgit.h
+++ b/cgit.h
@@ -39,16 +39,17 @@ extern char *cgit_repo_owner;
39extern int cgit_query_has_symref; 39extern int cgit_query_has_symref;
40extern int cgit_query_has_sha1; 40extern int cgit_query_has_sha1;
41 41
42extern char *cgit_querystring; 42extern char *cgit_querystring;
43extern char *cgit_query_repo; 43extern 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
50extern void cgit_global_config_cb(const char *name, const char *value); 51extern void cgit_global_config_cb(const char *name, const char *value);
51extern void cgit_repo_config_cb(const char *name, const char *value); 52extern void cgit_repo_config_cb(const char *name, const char *value);
52extern void cgit_querystring_cb(const char *name, const char *value); 53extern void cgit_querystring_cb(const char *name, const char *value);
53 54
54extern char *fmt(const char *format,...); 55extern char *fmt(const char *format,...);
diff --git a/shared.c b/shared.c
index c58a2ff..6b5cfc2 100644
--- a/shared.c
+++ b/shared.c
@@ -23,16 +23,17 @@ char *cgit_repo_owner = NULL;
23int cgit_query_has_symref = 0; 23int cgit_query_has_symref = 0;
24int cgit_query_has_sha1 = 0; 24int cgit_query_has_sha1 = 0;
25 25
26char *cgit_querystring = NULL; 26char *cgit_querystring = NULL;
27char *cgit_query_repo = NULL; 27char *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
34void cgit_global_config_cb(const char *name, const char *value) 35void cgit_global_config_cb(const char *name, const char *value)
35{ 36{
36 if (!strcmp(name, "root")) 37 if (!strcmp(name, "root"))
37 cgit_root = xstrdup(value); 38 cgit_root = xstrdup(value);
38 else if (!strcmp(name, "root-title")) 39 else if (!strcmp(name, "root-title"))
@@ -54,21 +55,23 @@ void cgit_repo_config_cb(const char *name, const char *value)
54 else if (!strcmp(name, "desc")) 55 else if (!strcmp(name, "desc"))
55 cgit_repo_desc = xstrdup(value); 56 cgit_repo_desc = xstrdup(value);
56 else if (!strcmp(name, "owner")) 57 else if (!strcmp(name, "owner"))
57 cgit_repo_owner = xstrdup(value); 58 cgit_repo_owner = xstrdup(value);
58} 59}
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
@@ -90,31 +90,58 @@ static void cgit_print_commit_shortlog(struct commit *commit)
90 html("</td></tr>\n"); 90 html("</td></tr>\n");
91} 91}
92 92
93void cgit_print_log(const char *tip, int ofs, int cnt) 93void cgit_print_log(const char *tip, int ofs, int cnt)
94{ 94{
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;
102 rev.commit_format = CMIT_FMT_DEFAULT; 102 rev.commit_format = CMIT_FMT_DEFAULT;
103 rev.verbose_header = 1; 103 rev.verbose_header = 1;
104 rev.show_root_diff = 0; 104 rev.show_root_diff = 0;
105 setup_revisions(2, argv, &rev, NULL); 105 setup_revisions(2, argv, &rev, NULL);
106 prepare_revision_walk(&rev); 106 prepare_revision_walk(&rev);
107 107
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;
115 free_commit_list(commit->parents); 126 free_commit_list(commit->parents);
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