summaryrefslogtreecommitdiffabout
path: root/ui-snapshot.c
authorNatanael Copa <natanael.copa@gmail.com>2008-11-30 05:49:07 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2008-11-30 12:39:53 (UTC)
commit314d9ea5a3bc60ec518e314bb0bf8072123dc08f (patch) (unidiff)
treeca65f83e89b301ff6df228785c73c8413a072361 /ui-snapshot.c
parent7b5cee65fd9cf31e4f19ce4ff613778cb95512a9 (diff)
downloadcgit-314d9ea5a3bc60ec518e314bb0bf8072123dc08f.zip
cgit-314d9ea5a3bc60ec518e314bb0bf8072123dc08f.tar.gz
cgit-314d9ea5a3bc60ec518e314bb0bf8072123dc08f.tar.bz2
Set prefix in snapshots when using dwimmery
This patch sets the directory prefix in archives to be the filename, excluding the suffix (.tar.gz, .tar.bz2 etc). The patch also removes the prefix parameter in cgit_print_snapshot() as the prefix might differ. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
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}