Author: Natanael Copa <natanael.copa@gmail.com>
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>
cmd.c | 3 +-- ui-snapshot.c | 14 ++++++++++++-- ui-snapshot.h | 3 +--
diff --git a/cmd.c b/cmd.c index 5b3c14c557e0b5aa56a95263cdbd559c2460de04..8914fa50132b7e87ffc6caa9bfd58a93eedff02c 100644 --- a/cmd.c +++ b/cmd.c @@ -104,8 +104,7 @@ } static void snapshot_fn(struct cgit_context *ctx) { - cgit_print_snapshot(ctx->qry.head, ctx->qry.sha1, - cgit_repobasename(ctx->repo->url), ctx->qry.path, + cgit_print_snapshot(ctx->qry.head, ctx->qry.sha1, ctx->qry.path, ctx->repo->snapshots, ctx->qry.nohead); } diff --git a/ui-snapshot.c b/ui-snapshot.c index 9c4d086eeba591d1069a28e20401b2f2b4631f02..76457d62e7fa3f4a5d48eb2ee597ea9ce790f54c 100644 --- a/ui-snapshot.c +++ b/ui-snapshot.c @@ -162,10 +162,11 @@ for_each_tag_ref(ref_cb, NULL); return dwim_refname; } -void cgit_print_snapshot(const char *head, const char *hex, const char *prefix, +void cgit_print_snapshot(const char *head, const char *hex, const char *filename, int snapshots, int dwim) { const struct cgit_snapshot_format* f; + char *prefix = NULL; f = get_format(filename); if (!f) { @@ -178,11 +179,20 @@ cgit_print_docend(); return; } - if (!hex && dwim) + if (!hex && dwim) { hex = get_ref_from_filename(ctx.repo->url, filename, f); + if (hex != NULL) { + prefix = xstrdup(filename); + prefix[strlen(filename) - strlen(f->suffix)] = '\0'; + } + } if (!hex) hex = head; + if (!prefix) + prefix = xstrdup(cgit_repobasename(ctx.repo->url)); + make_snapshot(f, hex, prefix, filename); + free(prefix); } diff --git a/ui-snapshot.h b/ui-snapshot.h index 35403033394035374ddda0f2844f341c9400a298..b6ede5225a847c57ae734f1d59f875994a94c571 100644 --- a/ui-snapshot.h +++ b/ui-snapshot.h @@ -2,7 +2,6 @@ #ifndef UI_SNAPSHOT_H #define UI_SNAPSHOT_H extern void cgit_print_snapshot(const char *head, const char *hex, - const char *prefix, const char *filename, - int snapshot, int dwim); + const char *filename, int snapshot, int dwim); #endif /* UI_SNAPSHOT_H */