Add support for automatic and custom clone urls

This adds support for two new parameters to cgitrc: clone-prefix and
repo.clone-url.

If clone-prefix is specified, all repos will get a clone url printed in the
sidebar; the url is generated by clone-prefix + repo.url.

Additionally, each repo can specify repo.clone-url which will override any
such auto-generated url.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
This commit is contained in:
Lars Hjemli 2007-12-03 01:49:38 +01:00
父節點 dabb34af76
當前提交 afcdd083da
共有 4 個文件被更改,包括 31 次插入0 次删除

2
cgit.h
查看文件

@ -75,6 +75,7 @@ struct repoinfo {
char *group; char *group;
char *module_link; char *module_link;
char *readme; char *readme;
char *clone_url;
int snapshots; int snapshots;
int enable_log_filecount; int enable_log_filecount;
int enable_log_linecount; int enable_log_linecount;
@ -140,6 +141,7 @@ extern char *cgit_script_name;
extern char *cgit_cache_root; extern char *cgit_cache_root;
extern char *cgit_repo_group; extern char *cgit_repo_group;
extern char *cgit_robots; extern char *cgit_robots;
extern char *cgit_clone_prefix;
extern int cgit_nocache; extern int cgit_nocache;
extern int cgit_snapshots; extern int cgit_snapshots;

7
cgitrc
查看文件

@ -116,6 +116,11 @@
#module-link=./?repo=%s&page=commit&id=%s #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) ## Number of chars shown of repo description (in repolist view)
#max-repodesc-length=60 #max-repodesc-length=60
@ -167,12 +172,14 @@
#repo.enable-log-linecount=0 ## override the default linecount setting #repo.enable-log-linecount=0 ## override the default linecount setting
#repo.module-link=/git/%s/commit/?id=%s ## override the standard module-link #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.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" ## Additional repositories grouped under "mirrors"
#repo.group=mirrors #repo.group=mirrors
#repo.url=git #repo.url=git
#repo.path=/pub/git/git #repo.path=/pub/git/git
#repo.clone-url=git://hjemli.net/pub/git/git
# #
#repo.url=linux #repo.url=linux
#repo.path=/pub/git/linux #repo.path=/pub/git/linux

查看文件

@ -27,6 +27,7 @@ char *cgit_script_name = CGIT_SCRIPT_NAME;
char *cgit_cache_root = CGIT_CACHE_ROOT; char *cgit_cache_root = CGIT_CACHE_ROOT;
char *cgit_repo_group = NULL; char *cgit_repo_group = NULL;
char *cgit_robots = "index, nofollow"; char *cgit_robots = "index, nofollow";
char *cgit_clone_prefix = NULL;
int cgit_nocache = 0; int cgit_nocache = 0;
int cgit_snapshots = 0; int cgit_snapshots = 0;
@ -200,6 +201,8 @@ void cgit_global_config_cb(const char *name, const char *value)
cgit_renamelimit = atoi(value); cgit_renamelimit = atoi(value);
else if (!strcmp(name, "robots")) else if (!strcmp(name, "robots"))
cgit_robots = xstrdup(value); cgit_robots = xstrdup(value);
else if (!strcmp(name, "clone-prefix"))
cgit_clone_prefix = xstrdup(value);
else if (!strcmp(name, "repo.group")) else if (!strcmp(name, "repo.group"))
cgit_repo_group = xstrdup(value); cgit_repo_group = xstrdup(value);
else if (!strcmp(name, "repo.url")) 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); cgit_repo->name = xstrdup(value);
else if (cgit_repo && !strcmp(name, "repo.path")) else if (cgit_repo && !strcmp(name, "repo.path"))
cgit_repo->path = trim_end(value, '/'); 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")) else if (cgit_repo && !strcmp(name, "repo.desc"))
cgit_repo->desc = xstrdup(value); cgit_repo->desc = xstrdup(value);
else if (cgit_repo && !strcmp(name, "repo.owner")) else if (cgit_repo && !strcmp(name, "repo.owner"))

查看文件

@ -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"; static const char *default_info = "This is cgit, a fast webinterface for git repositories";
int header = 0; int header = 0;
char *url;
html("<table id='layout' summary=''>\n"); html("<table id='layout' summary=''>\n");
html("<tr><td id='sidebar'>\n"); html("<tr><td id='sidebar'>\n");
@ -492,6 +493,22 @@ void cgit_print_pageheader(char *title, int show_search)
for_each_ref(print_archive_ref, &header); for_each_ref(print_archive_ref, &header);
if (cgit_repo->clone_url || cgit_clone_prefix) {
html("<h1>clone</h1>\n");
if (cgit_repo->clone_url)
url = cgit_repo->clone_url;
else
url = fmt("%s%s", cgit_clone_prefix,
cgit_repo->url);
html("<a class='menu' href='");
html_attr(url);
html("' title='");
html_attr(url);
html("'>\n");
html_txt(strrpart(url, 20));
html("</a>\n");
}
html("<h1>branch</h1>\n"); html("<h1>branch</h1>\n");
html("<form method='get' action=''>\n"); html("<form method='get' action=''>\n");
add_hidden_formfields(0, 1, cgit_query_page); add_hidden_formfields(0, 1, cgit_query_page);