diff --git a/cgit.h b/cgit.h index ab0efeb..f223dbc 100644 --- a/cgit.h +++ b/cgit.h @@ -75,6 +75,7 @@ struct repoinfo { char *group; char *module_link; char *readme; + char *clone_url; int snapshots; int enable_log_filecount; int enable_log_linecount; @@ -140,6 +141,7 @@ extern char *cgit_script_name; extern char *cgit_cache_root; extern char *cgit_repo_group; extern char *cgit_robots; +extern char *cgit_clone_prefix; extern int cgit_nocache; extern int cgit_snapshots; diff --git a/cgitrc b/cgitrc index 8c616e0..ce0c01b 100644 --- a/cgitrc +++ b/cgitrc @@ -116,6 +116,11 @@ #module-link=./?repo=%s&page=commit&id=%s +## Shared prefix which, when combined with repo url, becomes the url used +## to clone the repo +#clone-prefix= + + ## Number of chars shown of repo description (in repolist view) #max-repodesc-length=60 @@ -167,12 +172,14 @@ #repo.enable-log-linecount=0 ## override the default linecount setting #repo.module-link=/git/%s/commit/?id=%s ## override the standard module-link #repo.readme=info/web/readme ## specify a file to include on summary page +#repo.clone-url=git://hjemli.net/pub/git/cgit ## Additional repositories grouped under "mirrors" #repo.group=mirrors #repo.url=git #repo.path=/pub/git/git +#repo.clone-url=git://hjemli.net/pub/git/git # #repo.url=linux #repo.path=/pub/git/linux diff --git a/shared.c b/shared.c index fd8b1e3..2c309f5 100644 --- a/shared.c +++ b/shared.c @@ -27,6 +27,7 @@ char *cgit_script_name = CGIT_SCRIPT_NAME; char *cgit_cache_root = CGIT_CACHE_ROOT; char *cgit_repo_group = NULL; char *cgit_robots = "index, nofollow"; +char *cgit_clone_prefix = NULL; int cgit_nocache = 0; int cgit_snapshots = 0; @@ -200,6 +201,8 @@ void cgit_global_config_cb(const char *name, const char *value) cgit_renamelimit = atoi(value); else if (!strcmp(name, "robots")) cgit_robots = xstrdup(value); + else if (!strcmp(name, "clone-prefix")) + cgit_clone_prefix = xstrdup(value); else if (!strcmp(name, "repo.group")) cgit_repo_group = xstrdup(value); else if (!strcmp(name, "repo.url")) @@ -208,6 +211,8 @@ void cgit_global_config_cb(const char *name, const char *value) cgit_repo->name = xstrdup(value); else if (cgit_repo && !strcmp(name, "repo.path")) cgit_repo->path = trim_end(value, '/'); + else if (cgit_repo && !strcmp(name, "repo.clone-url")) + cgit_repo->clone_url = xstrdup(value); else if (cgit_repo && !strcmp(name, "repo.desc")) cgit_repo->desc = xstrdup(value); else if (cgit_repo && !strcmp(name, "repo.owner")) diff --git a/ui-shared.c b/ui-shared.c index 3e13c86..ece041c 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -460,6 +460,7 @@ void cgit_print_pageheader(char *title, int show_search) { static const char *default_info = "This is cgit, a fast webinterface for git repositories"; int header = 0; + char *url; html("
\n");
@@ -492,6 +493,22 @@ void cgit_print_pageheader(char *title, int show_search)
for_each_ref(print_archive_ref, &header);
+ if (cgit_repo->clone_url || cgit_clone_prefix) {
+ html("clone\n"); + if (cgit_repo->clone_url) + url = cgit_repo->clone_url; + else + url = fmt("%s%s", cgit_clone_prefix, + cgit_repo->url); + html("\n"); + html_txt(strrpart(url, 20)); + html("\n"); + } + html("branch\n"); html(" |