]> git.cameronkatri.com Git - cgit.git/commitdiff
Add "snapshot-prefix" repo configuration
authorJohn Keeping <john@keeping.me.uk>
Sat, 31 Mar 2018 13:20:01 +0000 (14:20 +0100)
committerJason A. Donenfeld <Jason@zx2c4.com>
Wed, 27 Jun 2018 16:11:19 +0000 (18:11 +0200)
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>
cgit.c
cgit.h
cgitrc.5.txt
ui-refs.c
ui-shared.c
ui-shared.h
ui-snapshot.c

diff --git a/cgit.c b/cgit.c
index bd9cb3fb11a66383d56256b2c0426e0070e7208c..d2f7b9c7bbb4f30e0c2ee813c79b50466e1a5d3e 100644 (file)
--- 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 005ae63017050f0e6d5821fd51515ca0775f4469..847cd2e075ff7efc3d71eb01e4113ab8faa580c9 100644 (file)
--- 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;
index 4da166c51f90ed16a12731179a9988a674fdbf0b..a9d3d0a4052a93e59c220208adf503314a867d5e 100644 (file)
@@ -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.
index 75f2789fc1653b76509f2ff3f8a9120051dd30e6..50d9d3002951760c4cf228d0cce6af7c016b9511 100644 (file)
--- 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
index e719c1b00303e7258df96f18a96b0c1482217ef7..d8578739576f090256f4b1bbe8232f1ff77f0b36 100644 (file)
@@ -152,6 +152,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 = "?";
@@ -1110,7 +1118,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))
index b3eb8c5be63f763bb6c3f24d132c2b50b5803d5c..92a1755012f163370bd4782f9a2bbcf30c8983ae 100644 (file)
@@ -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);
 
index 237a75f76d71d3e1be29cb98b4e5b6f4fd333060..b9e2a36f9dd57a475c364437c7de82d487986565 100644 (file)
@@ -154,7 +154,7 @@ static const char *get_ref_from_filename(const struct cgit_repo *repo,
        if (get_oid(snapshot.buf, &oid) == 0)
                goto out;
 
-       reponame = cgit_repobasename(repo->url);
+       reponame = cgit_snapshot_prefix(repo);
        if (starts_with(snapshot.buf, reponame)) {
                const char *new_start = snapshot.buf;
                new_start += strlen(reponame);
@@ -214,7 +214,7 @@ void cgit_print_snapshot(const char *head, const char *hex,
                hex = head;
 
        if (!prefix)
-               prefix = xstrdup(cgit_repobasename(ctx.repo->url));
+               prefix = xstrdup(cgit_snapshot_prefix(ctx.repo));
 
        make_snapshot(f, hex, prefix, filename);
        free(prefix);