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 <j...@keeping.me.uk>
---
 cgit.c       |  2 ++
 cgit.h       |  1 +
 cgitrc.5.txt |  7 +++++++
 ui-refs.c    |  2 +-
 ui-shared.c  | 10 +++++++++-
 ui-shared.h  |  1 +
 6 files changed, 21 insertions(+), 2 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
                item->util = xstrdup(value);
        } else if (!strcmp(name, "section"))
                repo->section = xstrdup(value);
+       else if (!strcmp(name, "snapshot-prefix"))
+               repo->snapshot_prefix = xstrdup(value);
        else if (!strcmp(name, "readme") && value != NULL) {
                if (repo->readme.items == ctx.cfg.readme.items)
                        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 {
        char *clone_url;
        char *logo;
        char *logo_link;
+       char *snapshot_prefix;
        int snapshots;
        int enable_commit_graph;
        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::
        restricted by the global "snapshots" setting. Default value:
        <snapshots>.
 
+repo.snapshot-prefix::
+       Prefix to use for snapshot links instead of the repository basename.
+       For example, the "linux-stable" repository may wish to set this to
+       "linux" so that snapshots are in the format "linux-3.15.4" instead
+       of "linux-stable-3.15.4".  Default value: <empty> meaning to use
+       the repository basename.
+
 repo.section::
        Override the current section name for this repository. Default value:
        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)
        if (!ref || strlen(ref) < 1)
                return;
 
-       basename = cgit_repobasename(repo->url);
+       basename = cgit_snapshot_prefix(repo);
        if (starts_with(ref, basename))
                strbuf_addstr(&filename, ref);
        else
diff --git a/ui-shared.c b/ui-shared.c
index da92594..df9bbbf 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -151,6 +151,14 @@ const char *cgit_repobasename(const char *reponame)
        return rvbuf;
 }
 
+const char *cgit_snapshot_prefix(const struct cgit_repo *repo)
+{
+       if (repo->snapshot_prefix)
+               return repo->snapshot_prefix;
+
+       return cgit_repobasename(repo->url);
+}
+
 static void site_url(const char *page, const char *search, const char *sort, 
int ofs, int always_root)
 {
        char *delim = "?";
@@ -1109,7 +1117,7 @@ void cgit_print_snapshot_links(const struct cgit_repo 
*repo, const char *head,
        struct strbuf filename = STRBUF_INIT;
        size_t prefixlen;
 
-       cgit_compose_snapshot_prefix(&filename, cgit_repobasename(repo->url), 
hex);
+       cgit_compose_snapshot_prefix(&filename, cgit_snapshot_prefix(repo), 
hex);
        prefixlen = filename.len;
        for (f = cgit_snapshot_formats; f->suffix; f++) {
                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,
                                         const char *base, const char *ref);
 extern void cgit_print_snapshot_links(const struct cgit_repo *repo,
                                      const char *head, const char *hex);
+extern const char *cgit_snapshot_prefix(const struct cgit_repo *repo);
 extern void cgit_add_hidden_formfields(int incl_head, int incl_search,
                                       const char *page);
 
-- 
2.14.1.555.g1b9dbff880.dirty

_______________________________________________
CGit mailing list
CGit@lists.zx2c4.com
https://lists.zx2c4.com/mailman/listinfo/cgit

Reply via email to