aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Keeping2018-03-31 14:20:01 +0100
committerJason A. Donenfeld2018-06-27 18:11:19 +0200
commitc1572bb5ec4540b5008490cf471cc4a5e65ef728 (patch)
tree5f31bf0e4ca63ab94b74a85897d37481474c92a0
parentd85e8a9810cbfbe5cfe80509a7b47cb39483e6ac (diff)
downloadcgit-c1572bb5ec4540b5008490cf471cc4a5e65ef728.tar.gz
cgit-c1572bb5ec4540b5008490cf471cc4a5e65ef728.tar.bz2
cgit-c1572bb5ec4540b5008490cf471cc4a5e65ef728.zip
Add "snapshot-prefix" repo configuration
Allow using a user-specified value for the prefix in snapshot files instead of the repository basename. For example, files downloaded from the linux-stable.git repository should be named linux-$VERSION and not linux-stable-$VERSION, which can be achieved by setting: repo.snapshot-prefix=linux Signed-off-by: John Keeping <john@keeping.me.uk> Reviewed-by: Christian Hesse <mail@eworm.de>
-rw-r--r--cgit.c2
-rw-r--r--cgit.h1
-rw-r--r--cgitrc.5.txt7
-rw-r--r--ui-refs.c2
-rw-r--r--ui-shared.c10
-rw-r--r--ui-shared.h1
-rw-r--r--ui-snapshot.c4
7 files changed, 23 insertions, 4 deletions
diff --git a/cgit.c b/cgit.c
index bd9cb3f..d2f7b9c 100644
--- a/cgit.c
+++ b/cgit.c
@@ -79,6 +79,8 @@ static void repo_config(struct cgit_repo *repo, const char *name, const char *va
79 item->util = xstrdup(value); 79 item->util = xstrdup(value);
80 } else if (!strcmp(name, "section")) 80 } else if (!strcmp(name, "section"))
81 repo->section = xstrdup(value); 81 repo->section = xstrdup(value);
82 else if (!strcmp(name, "snapshot-prefix"))
83 repo->snapshot_prefix = xstrdup(value);
82 else if (!strcmp(name, "readme") && value != NULL) { 84 else if (!strcmp(name, "readme") && value != NULL) {
83 if (repo->readme.items == ctx.cfg.readme.items) 85 if (repo->readme.items == ctx.cfg.readme.items)
84 memset(&repo->readme, 0, sizeof(repo->readme)); 86 memset(&repo->readme, 0, sizeof(repo->readme));
diff --git a/cgit.h b/cgit.h
index 005ae63..847cd2e 100644
--- a/cgit.h
+++ b/cgit.h
@@ -88,6 +88,7 @@ struct cgit_repo {
88 char *clone_url; 88 char *clone_url;
89 char *logo; 89 char *logo;
90 char *logo_link; 90 char *logo_link;
91 char *snapshot_prefix;
91 int snapshots; 92 int snapshots;
92 int enable_commit_graph; 93 int enable_commit_graph;
93 int enable_log_filecount; 94 int enable_log_filecount;
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index 4da166c..a9d3d0a 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -599,6 +599,13 @@ repo.snapshots::
599 restricted by the global "snapshots" setting. Default value: 599 restricted by the global "snapshots" setting. Default value:
600 <snapshots>. 600 <snapshots>.
601 601
602repo.snapshot-prefix::
603 Prefix to use for snapshot links instead of the repository basename.
604 For example, the "linux-stable" repository may wish to set this to
605 "linux" so that snapshots are in the format "linux-3.15.4" instead
606 of "linux-stable-3.15.4". Default value: <empty> meaning to use
607 the repository basename.
608
602repo.section:: 609repo.section::
603 Override the current section name for this repository. Default value: 610 Override the current section name for this repository. Default value:
604 none. 611 none.
diff --git a/ui-refs.c b/ui-refs.c
index 75f2789..50d9d30 100644
--- a/ui-refs.c
+++ b/ui-refs.c
@@ -100,7 +100,7 @@ static void print_tag_downloads(const struct cgit_repo *repo, const char *ref)
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_snapshot_prefix(repo);
104 if (starts_with(ref, basename)) 104 if (starts_with(ref, basename))
105 strbuf_addstr(&filename, ref); 105 strbuf_addstr(&filename, ref);
106 else 106 else
diff --git a/ui-shared.c b/ui-shared.c
index e719c1b..d857873 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -152,6 +152,14 @@ const char *cgit_repobasename(const char *reponame)
152 return rvbuf; 152 return rvbuf;
153} 153}
154 154
155const char *cgit_snapshot_prefix(const struct cgit_repo *repo)
156{
157 if (repo->snapshot_prefix)
158 return repo->snapshot_prefix;
159
160 return cgit_repobasename(repo->url);
161}
162
155static void site_url(const char *page, const char *search, const char *sort, int ofs, int always_root) 163static void site_url(const char *page, const char *search, const char *sort, int ofs, int always_root)
156{ 164{
157 char *delim = "?"; 165 char *delim = "?";
@@ -1110,7 +1118,7 @@ void cgit_print_snapshot_links(const struct cgit_repo *repo, const char *head,
1110 struct strbuf filename = STRBUF_INIT; 1118 struct strbuf filename = STRBUF_INIT;
1111 size_t prefixlen; 1119 size_t prefixlen;
1112 1120
1113 cgit_compose_snapshot_prefix(&filename, cgit_repobasename(repo->url), hex); 1121 cgit_compose_snapshot_prefix(&filename, cgit_snapshot_prefix(repo), hex);
1114 prefixlen = filename.len; 1122 prefixlen = filename.len;
1115 for (f = cgit_snapshot_formats; f->suffix; f++) { 1123 for (f = cgit_snapshot_formats; f->suffix; f++) {
1116 if (!(repo->snapshots & f->bit)) 1124 if (!(repo->snapshots & f->bit))
diff --git a/ui-shared.h b/ui-shared.h
index b3eb8c5..92a1755 100644
--- a/ui-shared.h
+++ b/ui-shared.h
@@ -78,6 +78,7 @@ extern void cgit_compose_snapshot_prefix(struct strbuf *filename,
78 const char *base, const char *ref); 78 const char *base, const char *ref);
79extern void cgit_print_snapshot_links(const struct cgit_repo *repo, 79extern void cgit_print_snapshot_links(const struct cgit_repo *repo,
80 const char *head, const char *hex); 80 const char *head, const char *hex);
81extern const char *cgit_snapshot_prefix(const struct cgit_repo *repo);
81extern void cgit_add_hidden_formfields(int incl_head, int incl_search, 82extern void cgit_add_hidden_formfields(int incl_head, int incl_search,
82 const char *page); 83 const char *page);
83 84
diff --git a/ui-snapshot.c b/ui-snapshot.c
index 237a75f..b9e2a36 100644
--- a/ui-snapshot.c
+++ b/ui-snapshot.c
@@ -154,7 +154,7 @@ static const char *get_ref_from_filename(const struct cgit_repo *repo,
154 if (get_oid(snapshot.buf, &oid) == 0) 154 if (get_oid(snapshot.buf, &oid) == 0)
155 goto out; 155 goto out;
156 156
157 reponame = cgit_repobasename(repo->url); 157 reponame = cgit_snapshot_prefix(repo);
158 if (starts_with(snapshot.buf, reponame)) { 158 if (starts_with(snapshot.buf, reponame)) {
159 const char *new_start = snapshot.buf; 159 const char *new_start = snapshot.buf;
160 new_start += strlen(reponame); 160 new_start += strlen(reponame);
@@ -214,7 +214,7 @@ void cgit_print_snapshot(const char *head, const char *hex,
214 hex = head; 214 hex = head;
215 215
216 if (!prefix) 216 if (!prefix)
217 prefix = xstrdup(cgit_repobasename(ctx.repo->url)); 217 prefix = xstrdup(cgit_snapshot_prefix(ctx.repo));
218 218
219 make_snapshot(f, hex, prefix, filename); 219 make_snapshot(f, hex, prefix, filename);
220 free(prefix); 220 free(prefix);