X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/fb3655df3bf85bd405c5921bbd4b3a54c705c839..da218fcd9eb554a8405ca72e84bcc0feb371194f:/ui-snapshot.c diff --git a/ui-snapshot.c b/ui-snapshot.c index 8e76977..5136c49 100644 --- a/ui-snapshot.c +++ b/ui-snapshot.c @@ -1,7 +1,6 @@ /* ui-snapshot.c: generate snapshot of a commit * - * Copyright (C) 2006 Lars Hjemli - * Copyright (C) 2012 Jason A. Donenfeld + * Copyright (C) 2006-2014 cgit Development Team * * Licensed under GNU General Public License v2 * (see COPYING for full license text) @@ -59,10 +58,10 @@ static int write_compressed_tar_archive(const char *hex, char *filter_argv[]) { int rv; - struct cgit_filter f; - - f.cmd = filter_argv[0]; - f.argv = filter_argv; + struct cgit_filter f = { + .cmd = filter_argv[0], + .argv = filter_argv, + }; cgit_open_filter(&f); rv = write_tar_archive(hex, prefix); cgit_close_filter(&f); @@ -99,14 +98,9 @@ const struct cgit_snapshot_format cgit_snapshot_formats[] = { static const struct cgit_snapshot_format *get_format(const char *filename) { const struct cgit_snapshot_format *fmt; - int fl, sl; - fl = strlen(filename); for (fmt = cgit_snapshot_formats; fmt->suffix; fmt++) { - sl = strlen(fmt->suffix); - if (sl >= fl) - continue; - if (!strcmp(fmt->suffix, filename + fl - sl)) + if (!suffixcmp(filename, fmt->suffix)) return fmt; } return NULL; @@ -140,8 +134,8 @@ static int make_snapshot(const struct cgit_snapshot_format *format, * repo_basename(), we strip the basename and any following '-' and '_' * characters ("cgit-0.7.2" -> "0.7.2") and check the resulting name once * more. If this still isn't a valid commit object name, we check if pre- - * pending a 'v' to the remaining snapshot name ("0.7.2" -> "v0.7.2") gives - * us something valid. + * pending a 'v' or a 'V' to the remaining snapshot name ("0.7.2" -> + * "v0.7.2") gives us something valid. */ static const char *get_ref_from_filename(const char *url, const char *filename, const struct cgit_snapshot_format *format) @@ -173,6 +167,10 @@ static const char *get_ref_from_filename(const char *url, const char *filename, if (get_sha1(snapshot.buf, sha1) == 0) goto out; + strbuf_splice(&snapshot, 0, 1, "V", 1); + if (get_sha1(snapshot.buf, sha1) == 0) + goto out; + result = 0; strbuf_release(&snapshot);