summaryrefslogtreecommitdiffabout
path: root/ui-snapshot.c
Unidiff
Diffstat (limited to 'ui-snapshot.c') (more/less context) (ignore whitespace changes)
-rw-r--r--ui-snapshot.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/ui-snapshot.c b/ui-snapshot.c
index 9c4d086..76457d6 100644
--- a/ui-snapshot.c
+++ b/ui-snapshot.c
@@ -149,40 +149,50 @@ static int ref_cb(const char *refname, const unsigned char *sha1, int flags,
149static const char *get_ref_from_filename(const char *url, const char *filename, 149static const char *get_ref_from_filename(const char *url, const char *filename,
150 const struct cgit_snapshot_format *fmt) 150 const struct cgit_snapshot_format *fmt)
151{ 151{
152 const char *reponame = cgit_repobasename(url); 152 const char *reponame = cgit_repobasename(url);
153 fprintf(stderr, "reponame=%s, filename=%s\n", reponame, filename); 153 fprintf(stderr, "reponame=%s, filename=%s\n", reponame, filename);
154 if (prefixcmp(filename, reponame)) 154 if (prefixcmp(filename, reponame))
155 return NULL; 155 return NULL;
156 filename += strlen(reponame); 156 filename += strlen(reponame);
157 while (filename && (*filename == '-' || *filename == '_')) 157 while (filename && (*filename == '-' || *filename == '_'))
158 filename++; 158 filename++;
159 dwim_filename = xstrdup(filename); 159 dwim_filename = xstrdup(filename);
160 dwim_filename[strlen(filename) - strlen(fmt->suffix)] = '\0'; 160 dwim_filename[strlen(filename) - strlen(fmt->suffix)] = '\0';
161 for_each_tag_ref(ref_cb, NULL); 161 for_each_tag_ref(ref_cb, NULL);
162 return dwim_refname; 162 return dwim_refname;
163} 163}
164 164
165void cgit_print_snapshot(const char *head, const char *hex, const char *prefix, 165void cgit_print_snapshot(const char *head, const char *hex,
166 const char *filename, int snapshots, int dwim) 166 const char *filename, int snapshots, int dwim)
167{ 167{
168 const struct cgit_snapshot_format* f; 168 const struct cgit_snapshot_format* f;
169 char *prefix = NULL;
169 170
170 f = get_format(filename); 171 f = get_format(filename);
171 if (!f) { 172 if (!f) {
172 ctx.page.mimetype = "text/html"; 173 ctx.page.mimetype = "text/html";
173 cgit_print_http_headers(&ctx); 174 cgit_print_http_headers(&ctx);
174 cgit_print_docstart(&ctx); 175 cgit_print_docstart(&ctx);
175 cgit_print_pageheader(&ctx); 176 cgit_print_pageheader(&ctx);
176 cgit_print_error(fmt("Unsupported snapshot format: %s", filename)); 177 cgit_print_error(fmt("Unsupported snapshot format: %s", filename));
177 cgit_print_docend(); 178 cgit_print_docend();
178 return; 179 return;
179 } 180 }
180 181
181 if (!hex && dwim) 182 if (!hex && dwim) {
182 hex = get_ref_from_filename(ctx.repo->url, filename, f); 183 hex = get_ref_from_filename(ctx.repo->url, filename, f);
184 if (hex != NULL) {
185 prefix = xstrdup(filename);
186 prefix[strlen(filename) - strlen(f->suffix)] = '\0';
187 }
188 }
183 189
184 if (!hex) 190 if (!hex)
185 hex = head; 191 hex = head;
186 192
193 if (!prefix)
194 prefix = xstrdup(cgit_repobasename(ctx.repo->url));
195
187 make_snapshot(f, hex, prefix, filename); 196 make_snapshot(f, hex, prefix, filename);
197 free(prefix);
188} 198}