summaryrefslogtreecommitdiffabout
path: root/ui-shared.c
Unidiff
Diffstat (limited to 'ui-shared.c') (more/less context) (ignore whitespace changes)
-rw-r--r--ui-shared.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/ui-shared.c b/ui-shared.c
index 07d5dd4..6cb7edb 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -667,107 +667,112 @@ static void print_header(struct cgit_context *ctx)
667 } else { 667 } else {
668 if (ctx->cfg.root_desc) 668 if (ctx->cfg.root_desc)
669 html_txt(ctx->cfg.root_desc); 669 html_txt(ctx->cfg.root_desc);
670 else if (ctx->cfg.index_info) 670 else if (ctx->cfg.index_info)
671 html_include(ctx->cfg.index_info); 671 html_include(ctx->cfg.index_info);
672 } 672 }
673 html("</td></tr></table>\n"); 673 html("</td></tr></table>\n");
674} 674}
675 675
676void cgit_print_pageheader(struct cgit_context *ctx) 676void cgit_print_pageheader(struct cgit_context *ctx)
677{ 677{
678 struct cgit_cmd *cmd = cgit_get_cmd(ctx); 678 struct cgit_cmd *cmd = cgit_get_cmd(ctx);
679 679
680 if (!cmd && ctx->repo) 680 if (!cmd && ctx->repo)
681 fallback_cmd = "summary"; 681 fallback_cmd = "summary";
682 682
683 html("<div id='cgit'>"); 683 html("<div id='cgit'>");
684 if (!ctx->cfg.noheader) 684 if (!ctx->cfg.noheader)
685 print_header(ctx); 685 print_header(ctx);
686 686
687 html("<table class='tabs'><tr><td>\n"); 687 html("<table class='tabs'><tr><td>\n");
688 if (ctx->repo) { 688 if (ctx->repo) {
689 cgit_summary_link("summary", NULL, hc(cmd, "summary"), 689 cgit_summary_link("summary", NULL, hc(cmd, "summary"),
690 ctx->qry.head); 690 ctx->qry.head);
691 cgit_refs_link("refs", NULL, hc(cmd, "refs"), ctx->qry.head, 691 cgit_refs_link("refs", NULL, hc(cmd, "refs"), ctx->qry.head,
692 ctx->qry.sha1, NULL); 692 ctx->qry.sha1, NULL);
693 cgit_log_link("log", NULL, hc(cmd, "log"), ctx->qry.head, 693 cgit_log_link("log", NULL, hc(cmd, "log"), ctx->qry.head,
694 NULL, NULL, 0, NULL, NULL, ctx->qry.showmsg); 694 NULL, NULL, 0, NULL, NULL, ctx->qry.showmsg);
695 cgit_tree_link("tree", NULL, hc(cmd, "tree"), ctx->qry.head, 695 cgit_tree_link("tree", NULL, hc(cmd, "tree"), ctx->qry.head,
696 ctx->qry.sha1, NULL); 696 ctx->qry.sha1, NULL);
697 cgit_commit_link("commit", NULL, hc(cmd, "commit"), 697 cgit_commit_link("commit", NULL, hc(cmd, "commit"),
698 ctx->qry.head, ctx->qry.sha1); 698 ctx->qry.head, ctx->qry.sha1);
699 cgit_diff_link("diff", NULL, hc(cmd, "diff"), ctx->qry.head, 699 cgit_diff_link("diff", NULL, hc(cmd, "diff"), ctx->qry.head,
700 ctx->qry.sha1, ctx->qry.sha2, NULL); 700 ctx->qry.sha1, ctx->qry.sha2, NULL);
701 if (ctx->repo->max_stats) 701 if (ctx->repo->max_stats)
702 cgit_stats_link("stats", NULL, hc(cmd, "stats"), 702 cgit_stats_link("stats", NULL, hc(cmd, "stats"),
703 ctx->qry.head, NULL); 703 ctx->qry.head, NULL);
704 if (ctx->repo->readme) 704 if (ctx->repo->readme)
705 reporevlink("about", "about", NULL, 705 reporevlink("about", "about", NULL,
706 hc(cmd, "about"), ctx->qry.head, NULL, 706 hc(cmd, "about"), ctx->qry.head, NULL,
707 NULL); 707 NULL);
708 html("</td><td class='form'>"); 708 html("</td><td class='form'>");
709 html("<form class='right' method='get' action='"); 709 html("<form class='right' method='get' action='");
710 if (ctx->cfg.virtual_root) 710 if (ctx->cfg.virtual_root)
711 html_url_path(cgit_fileurl(ctx->qry.repo, "log", 711 html_url_path(cgit_fileurl(ctx->qry.repo, "log",
712 ctx->qry.path, NULL)); 712 ctx->qry.path, NULL));
713 html("'>\n"); 713 html("'>\n");
714 cgit_add_hidden_formfields(1, 0, "log"); 714 cgit_add_hidden_formfields(1, 0, "log");
715 html("<select name='qt'>\n"); 715 html("<select name='qt'>\n");
716 html_option("grep", "log msg", ctx->qry.grep); 716 html_option("grep", "log msg", ctx->qry.grep);
717 html_option("author", "author", ctx->qry.grep); 717 html_option("author", "author", ctx->qry.grep);
718 html_option("committer", "committer", ctx->qry.grep); 718 html_option("committer", "committer", ctx->qry.grep);
719 html("</select>\n"); 719 html("</select>\n");
720 html("<input class='txt' type='text' size='10' name='q' value='"); 720 html("<input class='txt' type='text' size='10' name='q' value='");
721 html_attr(ctx->qry.search); 721 html_attr(ctx->qry.search);
722 html("'/>\n"); 722 html("'/>\n");
723 html("<input type='submit' value='search'/>\n"); 723 html("<input type='submit' value='search'/>\n");
724 html("</form>\n"); 724 html("</form>\n");
725 } else { 725 } else {
726 site_link(NULL, "index", NULL, hc(cmd, "repolist"), NULL, 0); 726 site_link(NULL, "index", NULL, hc(cmd, "repolist"), NULL, 0);
727 if (ctx->cfg.root_readme) 727 if (ctx->cfg.root_readme)
728 site_link("about", "about", NULL, hc(cmd, "about"), 728 site_link("about", "about", NULL, hc(cmd, "about"),
729 NULL, 0); 729 NULL, 0);
730 html("</td><td class='form'>"); 730 html("</td><td class='form'>");
731 html("<form method='get' action='"); 731 html("<form method='get' action='");
732 html_attr(cgit_rooturl()); 732 html_attr(cgit_rooturl());
733 html("'>\n"); 733 html("'>\n");
734 html("<input type='text' name='q' size='10' value='"); 734 html("<input type='text' name='q' size='10' value='");
735 html_attr(ctx->qry.search); 735 html_attr(ctx->qry.search);
736 html("'/>\n"); 736 html("'/>\n");
737 html("<input type='submit' value='search'/>\n"); 737 html("<input type='submit' value='search'/>\n");
738 html("</form>"); 738 html("</form>");
739 } 739 }
740 html("</td></tr></table>\n"); 740 html("</td></tr></table>\n");
741 html("<div class='content'>"); 741 html("<div class='content'>");
742} 742}
743 743
744void cgit_print_filemode(unsigned short mode) 744void cgit_print_filemode(unsigned short mode)
745{ 745{
746 if (S_ISDIR(mode)) 746 if (S_ISDIR(mode))
747 html("d"); 747 html("d");
748 else if (S_ISLNK(mode)) 748 else if (S_ISLNK(mode))
749 html("l"); 749 html("l");
750 else if (S_ISGITLINK(mode)) 750 else if (S_ISGITLINK(mode))
751 html("m"); 751 html("m");
752 else 752 else
753 html("-"); 753 html("-");
754 html_fileperm(mode >> 6); 754 html_fileperm(mode >> 6);
755 html_fileperm(mode >> 3); 755 html_fileperm(mode >> 3);
756 html_fileperm(mode); 756 html_fileperm(mode);
757} 757}
758 758
759void cgit_print_snapshot_links(const char *repo, const char *head, 759void cgit_print_snapshot_links(const char *repo, const char *head,
760 const char *hex, int snapshots) 760 const char *hex, int snapshots)
761{ 761{
762 const struct cgit_snapshot_format* f; 762 const struct cgit_snapshot_format* f;
763 char *prefix;
763 char *filename; 764 char *filename;
765 unsigned char sha1[20];
764 766
767 if (get_sha1(fmt("refs/tags/%s", hex), sha1) == 0 &&
768 (hex[0] == 'v' || hex[0] == 'V') && isdigit(hex[1]))
769 hex++;
770 prefix = xstrdup(fmt("%s-%s", cgit_repobasename(repo), hex));
765 for (f = cgit_snapshot_formats; f->suffix; f++) { 771 for (f = cgit_snapshot_formats; f->suffix; f++) {
766 if (!(snapshots & f->bit)) 772 if (!(snapshots & f->bit))
767 continue; 773 continue;
768 filename = fmt("%s-%s%s", cgit_repobasename(repo), hex, 774 filename = fmt("%s%s", prefix, f->suffix);
769 f->suffix);
770 cgit_snapshot_link(filename, NULL, NULL, NULL, NULL, filename); 775 cgit_snapshot_link(filename, NULL, NULL, NULL, NULL, filename);
771 html("<br/>"); 776 html("<br/>");
772 } 777 }
773} 778}