summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--ui-log.c11
-rw-r--r--ui-shared.c1
2 files changed, 8 insertions, 4 deletions
diff --git a/ui-log.c b/ui-log.c
index 0947604..4441d1d 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -117,68 +117,71 @@ void print_commit(struct commit *commit)
117 html_txt(info->msg); 117 html_txt(info->msg);
118 html("</td></tr>\n"); 118 html("</td></tr>\n");
119 } 119 }
120 cgit_free_commitinfo(info); 120 cgit_free_commitinfo(info);
121} 121}
122 122
123static const char *disambiguate_ref(const char *ref) 123static const char *disambiguate_ref(const char *ref)
124{ 124{
125 unsigned char sha1[20]; 125 unsigned char sha1[20];
126 const char *longref; 126 const char *longref;
127 127
128 longref = fmt("refs/heads/%s", ref); 128 longref = fmt("refs/heads/%s", ref);
129 if (get_sha1(longref, sha1) == 0) 129 if (get_sha1(longref, sha1) == 0)
130 return longref; 130 return longref;
131 131
132 return ref; 132 return ref;
133} 133}
134 134
135void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern, 135void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern,
136 char *path, int pager) 136 char *path, int pager)
137{ 137{
138 struct rev_info rev; 138 struct rev_info rev;
139 struct commit *commit; 139 struct commit *commit;
140 const char *argv[] = {NULL, NULL, NULL, NULL, NULL}; 140 const char *argv[] = {NULL, NULL, NULL, NULL, NULL};
141 int argc = 2; 141 int argc = 2;
142 int i, columns = 3; 142 int i, columns = 3;
143 143
144 if (!tip) 144 if (!tip)
145 tip = ctx.qry.head; 145 tip = ctx.qry.head;
146 146
147 argv[1] = disambiguate_ref(tip); 147 argv[1] = disambiguate_ref(tip);
148 148
149 if (grep && pattern && (!strcmp(grep, "grep") || 149 if (grep && pattern) {
150 !strcmp(grep, "author") || 150 if (!strcmp(grep, "grep") || !strcmp(grep, "author") ||
151 !strcmp(grep, "committer"))) 151 !strcmp(grep, "committer"))
152 argv[argc++] = fmt("--%s=%s", grep, pattern); 152 argv[argc++] = fmt("--%s=%s", grep, pattern);
153 if (!strcmp(grep, "range"))
154 argv[1] = pattern;
155 }
153 156
154 if (path) { 157 if (path) {
155 argv[argc++] = "--"; 158 argv[argc++] = "--";
156 argv[argc++] = path; 159 argv[argc++] = path;
157 } 160 }
158 init_revisions(&rev, NULL); 161 init_revisions(&rev, NULL);
159 rev.abbrev = DEFAULT_ABBREV; 162 rev.abbrev = DEFAULT_ABBREV;
160 rev.commit_format = CMIT_FMT_DEFAULT; 163 rev.commit_format = CMIT_FMT_DEFAULT;
161 rev.verbose_header = 1; 164 rev.verbose_header = 1;
162 rev.show_root_diff = 0; 165 rev.show_root_diff = 0;
163 setup_revisions(argc, argv, &rev, NULL); 166 setup_revisions(argc, argv, &rev, NULL);
164 load_ref_decorations(DECORATE_FULL_REFS); 167 load_ref_decorations(DECORATE_FULL_REFS);
165 rev.show_decorations = 1; 168 rev.show_decorations = 1;
166 rev.grep_filter.regflags |= REG_ICASE; 169 rev.grep_filter.regflags |= REG_ICASE;
167 compile_grep_patterns(&rev.grep_filter); 170 compile_grep_patterns(&rev.grep_filter);
168 prepare_revision_walk(&rev); 171 prepare_revision_walk(&rev);
169 172
170 if (pager) 173 if (pager)
171 html("<table class='list nowrap'>"); 174 html("<table class='list nowrap'>");
172 175
173 html("<tr class='nohover'><th class='left'>Age</th>" 176 html("<tr class='nohover'><th class='left'>Age</th>"
174 "<th class='left'>Commit message"); 177 "<th class='left'>Commit message");
175 if (pager) { 178 if (pager) {
176 html(" ("); 179 html(" (");
177 cgit_log_link(ctx.qry.showmsg ? "Collapse" : "Expand", NULL, 180 cgit_log_link(ctx.qry.showmsg ? "Collapse" : "Expand", NULL,
178 NULL, ctx.qry.head, ctx.qry.sha1, 181 NULL, ctx.qry.head, ctx.qry.sha1,
179 ctx.qry.path, ctx.qry.ofs, ctx.qry.grep, 182 ctx.qry.path, ctx.qry.ofs, ctx.qry.grep,
180 ctx.qry.search, ctx.qry.showmsg ? 0 : 1); 183 ctx.qry.search, ctx.qry.showmsg ? 0 : 1);
181 html(")"); 184 html(")");
182 } 185 }
183 html("</th><th class='left'>Author</th>"); 186 html("</th><th class='left'>Author</th>");
184 if (ctx.repo->enable_log_filecount) { 187 if (ctx.repo->enable_log_filecount) {
diff --git a/ui-shared.c b/ui-shared.c
index 8827fff..0f65474 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -709,64 +709,65 @@ void cgit_print_pageheader(struct cgit_context *ctx)
709 html("<table class='tabs'><tr><td>\n"); 709 html("<table class='tabs'><tr><td>\n");
710 if (ctx->repo) { 710 if (ctx->repo) {
711 cgit_summary_link("summary", NULL, hc(cmd, "summary"), 711 cgit_summary_link("summary", NULL, hc(cmd, "summary"),
712 ctx->qry.head); 712 ctx->qry.head);
713 cgit_refs_link("refs", NULL, hc(cmd, "refs"), ctx->qry.head, 713 cgit_refs_link("refs", NULL, hc(cmd, "refs"), ctx->qry.head,
714 ctx->qry.sha1, NULL); 714 ctx->qry.sha1, NULL);
715 cgit_log_link("log", NULL, hc(cmd, "log"), ctx->qry.head, 715 cgit_log_link("log", NULL, hc(cmd, "log"), ctx->qry.head,
716 NULL, NULL, 0, NULL, NULL, ctx->qry.showmsg); 716 NULL, NULL, 0, NULL, NULL, ctx->qry.showmsg);
717 cgit_tree_link("tree", NULL, hc(cmd, "tree"), ctx->qry.head, 717 cgit_tree_link("tree", NULL, hc(cmd, "tree"), ctx->qry.head,
718 ctx->qry.sha1, NULL); 718 ctx->qry.sha1, NULL);
719 cgit_commit_link("commit", NULL, hc(cmd, "commit"), 719 cgit_commit_link("commit", NULL, hc(cmd, "commit"),
720 ctx->qry.head, ctx->qry.sha1, 0); 720 ctx->qry.head, ctx->qry.sha1, 0);
721 cgit_diff_link("diff", NULL, hc(cmd, "diff"), ctx->qry.head, 721 cgit_diff_link("diff", NULL, hc(cmd, "diff"), ctx->qry.head,
722 ctx->qry.sha1, ctx->qry.sha2, NULL, 0); 722 ctx->qry.sha1, ctx->qry.sha2, NULL, 0);
723 if (ctx->repo->max_stats) 723 if (ctx->repo->max_stats)
724 cgit_stats_link("stats", NULL, hc(cmd, "stats"), 724 cgit_stats_link("stats", NULL, hc(cmd, "stats"),
725 ctx->qry.head, NULL); 725 ctx->qry.head, NULL);
726 if (ctx->repo->readme) 726 if (ctx->repo->readme)
727 reporevlink("about", "about", NULL, 727 reporevlink("about", "about", NULL,
728 hc(cmd, "about"), ctx->qry.head, NULL, 728 hc(cmd, "about"), ctx->qry.head, NULL,
729 NULL); 729 NULL);
730 html("</td><td class='form'>"); 730 html("</td><td class='form'>");
731 html("<form class='right' method='get' action='"); 731 html("<form class='right' method='get' action='");
732 if (ctx->cfg.virtual_root) 732 if (ctx->cfg.virtual_root)
733 html_url_path(cgit_fileurl(ctx->qry.repo, "log", 733 html_url_path(cgit_fileurl(ctx->qry.repo, "log",
734 ctx->qry.path, NULL)); 734 ctx->qry.path, NULL));
735 html("'>\n"); 735 html("'>\n");
736 cgit_add_hidden_formfields(1, 0, "log"); 736 cgit_add_hidden_formfields(1, 0, "log");
737 html("<select name='qt'>\n"); 737 html("<select name='qt'>\n");
738 html_option("grep", "log msg", ctx->qry.grep); 738 html_option("grep", "log msg", ctx->qry.grep);
739 html_option("author", "author", ctx->qry.grep); 739 html_option("author", "author", ctx->qry.grep);
740 html_option("committer", "committer", ctx->qry.grep); 740 html_option("committer", "committer", ctx->qry.grep);
741 html_option("range", "range", ctx->qry.grep);
741 html("</select>\n"); 742 html("</select>\n");
742 html("<input class='txt' type='text' size='10' name='q' value='"); 743 html("<input class='txt' type='text' size='10' name='q' value='");
743 html_attr(ctx->qry.search); 744 html_attr(ctx->qry.search);
744 html("'/>\n"); 745 html("'/>\n");
745 html("<input type='submit' value='search'/>\n"); 746 html("<input type='submit' value='search'/>\n");
746 html("</form>\n"); 747 html("</form>\n");
747 } else { 748 } else {
748 site_link(NULL, "index", NULL, hc(cmd, "repolist"), NULL, 0); 749 site_link(NULL, "index", NULL, hc(cmd, "repolist"), NULL, 0);
749 if (ctx->cfg.root_readme) 750 if (ctx->cfg.root_readme)
750 site_link("about", "about", NULL, hc(cmd, "about"), 751 site_link("about", "about", NULL, hc(cmd, "about"),
751 NULL, 0); 752 NULL, 0);
752 html("</td><td class='form'>"); 753 html("</td><td class='form'>");
753 html("<form method='get' action='"); 754 html("<form method='get' action='");
754 html_attr(cgit_rooturl()); 755 html_attr(cgit_rooturl());
755 html("'>\n"); 756 html("'>\n");
756 html("<input type='text' name='q' size='10' value='"); 757 html("<input type='text' name='q' size='10' value='");
757 html_attr(ctx->qry.search); 758 html_attr(ctx->qry.search);
758 html("'/>\n"); 759 html("'/>\n");
759 html("<input type='submit' value='search'/>\n"); 760 html("<input type='submit' value='search'/>\n");
760 html("</form>"); 761 html("</form>");
761 } 762 }
762 html("</td></tr></table>\n"); 763 html("</td></tr></table>\n");
763 html("<div class='content'>"); 764 html("<div class='content'>");
764} 765}
765 766
766void cgit_print_filemode(unsigned short mode) 767void cgit_print_filemode(unsigned short mode)
767{ 768{
768 if (S_ISDIR(mode)) 769 if (S_ISDIR(mode))
769 html("d"); 770 html("d");
770 else if (S_ISLNK(mode)) 771 else if (S_ISLNK(mode))
771 html("l"); 772 html("l");
772 else if (S_ISGITLINK(mode)) 773 else if (S_ISGITLINK(mode))