diff options
Diffstat (limited to 'ui-refs.c')
-rw-r--r-- | ui-refs.c | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/ui-refs.c b/ui-refs.c index 5b4530e..75f2789 100644 --- a/ui-refs.c +++ b/ui-refs.c | |||
@@ -93,34 +93,28 @@ static void print_tag_header(void) | |||
93 | static void print_tag_downloads(const struct cgit_repo *repo, const char *ref) | 93 | static void print_tag_downloads(const struct cgit_repo *repo, const char *ref) |
94 | { | 94 | { |
95 | const struct cgit_snapshot_format* f; | 95 | const struct cgit_snapshot_format* f; |
96 | struct strbuf filename = STRBUF_INIT; | ||
97 | const char *basename; | 96 | const char *basename; |
98 | int free_ref = 0; | 97 | struct strbuf filename = STRBUF_INIT; |
98 | size_t prefixlen; | ||
99 | 99 | ||
100 | if (!ref || strlen(ref) < 1) | 100 | if (!ref || strlen(ref) < 1) |
101 | return; | 101 | return; |
102 | 102 | ||
103 | basename = cgit_repobasename(repo->url); | 103 | basename = cgit_repobasename(repo->url); |
104 | if (!starts_with(ref, basename)) { | 104 | if (starts_with(ref, basename)) |
105 | if ((ref[0] == 'v' || ref[0] == 'V') && isdigit(ref[1])) | 105 | strbuf_addstr(&filename, ref); |
106 | ref++; | 106 | else |
107 | if (isdigit(ref[0])) { | 107 | cgit_compose_snapshot_prefix(&filename, basename, ref); |
108 | ref = fmtalloc("%s-%s", basename, ref); | 108 | prefixlen = filename.len; |
109 | free_ref = 1; | ||
110 | } | ||
111 | } | ||
112 | |||
113 | for (f = cgit_snapshot_formats; f->suffix; f++) { | 109 | for (f = cgit_snapshot_formats; f->suffix; f++) { |
114 | if (!(repo->snapshots & f->bit)) | 110 | if (!(repo->snapshots & f->bit)) |
115 | continue; | 111 | continue; |
116 | strbuf_reset(&filename); | 112 | strbuf_setlen(&filename, prefixlen); |
117 | strbuf_addf(&filename, "%s%s", ref, f->suffix); | 113 | strbuf_addstr(&filename, f->suffix); |
118 | cgit_snapshot_link(filename.buf, NULL, NULL, NULL, NULL, filename.buf); | 114 | cgit_snapshot_link(filename.buf, NULL, NULL, NULL, NULL, filename.buf); |
119 | html(" "); | 115 | html(" "); |
120 | } | 116 | } |
121 | 117 | ||
122 | if (free_ref) | ||
123 | free((char *)ref); | ||
124 | strbuf_release(&filename); | 118 | strbuf_release(&filename); |
125 | } | 119 | } |
126 | 120 | ||