summaryrefslogtreecommitdiffabout
path: root/ui-tree.c
authorLars Hjemli <hjemli@gmail.com>2007-06-16 23:23:08 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2007-06-16 23:39:05 (UTC)
commit44947bfcdc0d6e8c7d673bea0538cbf2a182f289 (patch) (unidiff)
tree3f65d6842738a8314ed72d5575a0b523061556b7 /ui-tree.c
parentf91b9696a36008c245a3195800ba0c5fa3e890f9 (diff)
downloadcgit-44947bfcdc0d6e8c7d673bea0538cbf2a182f289.zip
cgit-44947bfcdc0d6e8c7d673bea0538cbf2a182f289.tar.gz
cgit-44947bfcdc0d6e8c7d673bea0538cbf2a182f289.tar.bz2
Add and use cgit_tree_link()
This creates a new function used to generate links to 'tree' page and uses the function everywhere a link to the 'tree' page is generated. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (limited to 'ui-tree.c') (more/less context) (ignore whitespace changes)
-rw-r--r--ui-tree.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/ui-tree.c b/ui-tree.c
index db0bef6..3b82374 100644
--- a/ui-tree.c
+++ b/ui-tree.c
@@ -52,45 +52,50 @@ static void print_object(const unsigned char *sha1, char *path)
52 52
53 53
54static int ls_item(const unsigned char *sha1, const char *base, int baselen, 54static int ls_item(const unsigned char *sha1, const char *base, int baselen,
55 const char *pathname, unsigned int mode, int stage) 55 const char *pathname, unsigned int mode, int stage)
56{ 56{
57 char *name; 57 char *name;
58 char *fullpath;
58 enum object_type type; 59 enum object_type type;
59 unsigned long size = 0; 60 unsigned long size = 0;
60 char *url, *qry; 61 char *url, *qry;
61 62
62 name = xstrdup(pathname); 63 name = xstrdup(pathname);
64 fullpath = fmt("%s%s%s", cgit_query_path ? cgit_query_path : "",
65 cgit_query_path ? "/" : "", name);
66
63 type = sha1_object_info(sha1, &size); 67 type = sha1_object_info(sha1, &size);
64 if (type == OBJ_BAD && !S_ISDIRLNK(mode)) { 68 if (type == OBJ_BAD && !S_ISDIRLNK(mode)) {
65 htmlf("<tr><td colspan='3'>Bad object: %s %s</td></tr>", 69 htmlf("<tr><td colspan='3'>Bad object: %s %s</td></tr>",
66 name, 70 name,
67 sha1_to_hex(sha1)); 71 sha1_to_hex(sha1));
68 return 0; 72 return 0;
69 } 73 }
70 qry = fmt("h=%s&amp;path=%s%s%s", curr_rev, 74
71 cgit_query_path ? cgit_query_path : "",
72 cgit_query_path ? "/" : "", pathname);
73 url = cgit_pageurl(cgit_query_repo, "tree", qry);
74 html("<tr><td class='filemode'>"); 75 html("<tr><td class='filemode'>");
75 html_filemode(mode); 76 html_filemode(mode);
76 html("</td><td "); 77 html("</td><td ");
77 if (S_ISDIRLNK(mode)) { 78 if (S_ISDIRLNK(mode)) {
78 htmlf("class='ls-mod'><a href='"); 79 htmlf("class='ls-mod'><a href='");
79 html_attr(fmt(cgit_repo->module_link, 80 html_attr(fmt(cgit_repo->module_link,
80 name, 81 name,
81 sha1_to_hex(sha1))); 82 sha1_to_hex(sha1)));
83 html("'>");
84 html_txt(name);
85 html("</a>");
82 } else if (S_ISDIR(mode)) { 86 } else if (S_ISDIR(mode)) {
83 html("class='ls-dir'><a href='"); 87 html("class='ls-dir'>");
84 html_attr(url); 88 cgit_tree_link(name, NULL, NULL, cgit_query_head,
89 curr_rev, fullpath);
85 } else { 90 } else {
86 html("class='ls-blob'><a href='"); 91 html("class='ls-blob'>");
87 html_attr(url); 92 cgit_tree_link(name, NULL, NULL, cgit_query_head,
93 curr_rev, fullpath);
88 } 94 }
89 htmlf("'>%s</a></td>", name); 95 htmlf("</td><td class='filesize'>%li</td>", size);
90 htmlf("<td class='filesize'>%li</td>", size);
91 96
92 html("<td class='links'><a href='"); 97 html("<td class='links'><a href='");
93 qry = fmt("h=%s&amp;path=%s%s%s", curr_rev, 98 qry = fmt("h=%s&amp;path=%s%s%s", curr_rev,
94 cgit_query_path ? cgit_query_path : "", 99 cgit_query_path ? cgit_query_path : "",
95 cgit_query_path ? "/" : "", pathname); 100 cgit_query_path ? "/" : "", pathname);
96 url = cgit_pageurl(cgit_query_repo, "log", qry); 101 url = cgit_pageurl(cgit_query_repo, "log", qry);
@@ -147,17 +152,15 @@ static int walk_tree(const unsigned char *sha1, const char *base, int baselen,
147 152
148 if (state == 0) { 153 if (state == 0) {
149 memcpy(buffer, base, baselen); 154 memcpy(buffer, base, baselen);
150 strcpy(buffer+baselen, pathname); 155 strcpy(buffer+baselen, pathname);
151 url = cgit_pageurl(cgit_query_repo, "tree", 156 url = cgit_pageurl(cgit_query_repo, "tree",
152 fmt("h=%s&amp;path=%s", curr_rev, buffer)); 157 fmt("h=%s&amp;path=%s", curr_rev, buffer));
153 htmlf(" / <a href='"); 158 html("/");
154 html_attr(url); 159 cgit_tree_link(xstrdup(pathname), NULL, NULL, cgit_query_head,
155 html("'>"); 160 curr_rev, buffer);
156 html_txt(xstrdup(pathname));
157 html("</a>");
158 161
159 if (strcmp(match_path, buffer)) 162 if (strcmp(match_path, buffer))
160 return READ_TREE_RECURSIVE; 163 return READ_TREE_RECURSIVE;
161 164
162 if (S_ISDIR(mode)) { 165 if (S_ISDIR(mode)) {
163 state = 1; 166 state = 1;