From: Lars Hjemli Date: Sun, 22 Jul 2007 21:57:48 +0000 (+0200) Subject: Merge branch 'master' of git://git.klever.net/patchwork/cgit X-Git-Url: https://gitweb.ps.run/ps-cgit/commitdiff_plain/1d4aaff696ee1b9085dda0f0f3d84d9d20d96db0?hp=-c Merge branch 'master' of git://git.klever.net/patchwork/cgit * 'master' of git://git.klever.net/patchwork/cgit: link raw blob from tree file view fix: changed view link to blob in summary. allow selective enabling of snapshots shorten snapshot names to repo basename introduce cgit_repobasename added snapshot filename to the link add plain uncompressed tar snapshort format introduced .tar.bz2 snapshots compress .tar.gz using gzip as a filter added a chk_non_negative check css: adjust vertical-align of commit info th cells add support for snapshot tarballs Conflicts: ui-summary.c Signed-off-by: Lars Hjemli --- 1d4aaff696ee1b9085dda0f0f3d84d9d20d96db0 diff --combined cgit.c index 4b91829,8795bbc..6597529 --- a/cgit.c +++ b/cgit.c @@@ -68,8 -68,10 +68,10 @@@ static void cgit_print_repo_page(struc setenv("GIT_DIR", cgit_repo->path, 1); if ((cgit_cmd == CMD_SNAPSHOT) && cgit_repo->snapshots) { - cgit_print_snapshot(item, cgit_query_sha1, "zip", - cgit_repo->url, cgit_query_name); + cgit_print_snapshot(item, cgit_query_sha1, + cgit_repobasename(cgit_repo->url), + cgit_query_name, + cgit_repo->snapshots ); return; } @@@ -101,9 -103,6 +103,9 @@@ case CMD_COMMIT: cgit_print_commit(cgit_query_sha1); break; + case CMD_TAG: + cgit_print_tag(cgit_query_sha1); + break; case CMD_DIFF: cgit_print_diff(cgit_query_sha1, cgit_query_sha2); break; diff --combined cgit.h index 610a16d,ea61be7..eddcaa3 --- a/cgit.h +++ b/cgit.h @@@ -27,7 -27,7 +27,7 @@@ #define CMD_TREE 4 #define CMD_BLOB 5 #define CMD_SNAPSHOT 6 - +#define CMD_TAG 7 /* * Dateformats used on misc. pages @@@ -157,6 -157,7 +157,7 @@@ extern void cgit_querystring_cb(const c extern int chk_zero(int result, char *msg); extern int chk_positive(int result, char *msg); + extern int chk_non_negative(int result, char *msg); extern int hextoint(char c); extern char *trim_end(const char *str, char c); @@@ -200,9 -201,13 +201,13 @@@ extern int cache_exist(struct cacheite extern int cache_expired(struct cacheitem *item); extern char *cgit_repourl(const char *reponame); + extern char *cgit_fileurl(const char *reponame, const char *pagename, + const char *filename, const char *query); extern char *cgit_pageurl(const char *reponame, const char *pagename, const char *query); + extern const char *cgit_repobasename(const char *reponame); + extern void cgit_tree_link(char *name, char *title, char *class, char *head, char *rev, char *path); extern void cgit_log_link(char *name, char *title, char *class, char *head, @@@ -212,8 -217,6 +217,8 @@@ extern void cgit_commit_link(char *name extern void cgit_diff_link(char *name, char *title, char *class, char *head, char *new_rev, char *old_rev, char *path); +extern void cgit_object_link(struct object *obj); + extern void cgit_print_error(char *msg); extern void cgit_print_date(time_t secs, char *format); extern void cgit_print_age(time_t t, time_t max_relative, char *format); @@@ -230,10 -233,11 +235,12 @@@ extern void cgit_print_log(const char * extern void cgit_print_blob(struct cacheitem *item, const char *hex, char *path); extern void cgit_print_tree(const char *rev, char *path); extern void cgit_print_commit(char *hex); +extern void cgit_print_tag(char *revname); extern void cgit_print_diff(const char *new_hex, const char *old_hex); extern void cgit_print_snapshot(struct cacheitem *item, const char *hex, - const char *format, const char *prefix, - const char *filename); + const char *prefix, const char *filename, + int snapshot); + extern void cgit_print_snapshot_links(const char *repo, const char *hex,int snapshots); + extern int cgit_parse_snapshots_mask(const char *str); #endif /* CGIT_H */ diff --combined shared.c index 06693b0,ccbde27..077934f --- a/shared.c +++ b/shared.c @@@ -63,7 -63,7 +63,7 @@@ int htmlfd = 0 int cgit_get_cmd_index(const char *cmd) { static char *cmds[] = {"log", "commit", "diff", "tree", "blob", - "snapshot", NULL}; + "snapshot", "tag", NULL}; int i; for(i = 0; cmds[i]; i++) @@@ -86,6 -86,13 +86,13 @@@ int chk_positive(int result, char *msg return result; } + int chk_non_negative(int result, char *msg) + { + if (result < 0) + die("%s: %s",msg, strerror(errno)); + return result; + } + struct repoinfo *add_repo(const char *url) { struct repoinfo *ret; @@@ -148,7 -155,7 +155,7 @@@ void cgit_global_config_cb(const char * else if (!strcmp(name, "nocache")) cgit_nocache = atoi(value); else if (!strcmp(name, "snapshots")) - cgit_snapshots = atoi(value); + cgit_snapshots = cgit_parse_snapshots_mask(value); else if (!strcmp(name, "enable-index-links")) cgit_enable_index_links = atoi(value); else if (!strcmp(name, "enable-log-filecount")) @@@ -190,7 -197,7 +197,7 @@@ else if (cgit_repo && !strcmp(name, "repo.defbranch")) cgit_repo->defbranch = xstrdup(value); else if (cgit_repo && !strcmp(name, "repo.snapshots")) - cgit_repo->snapshots = cgit_snapshots * atoi(value); + cgit_repo->snapshots = cgit_snapshots & cgit_parse_snapshots_mask(value); /* XXX: &? */ else if (cgit_repo && !strcmp(name, "repo.enable-log-filecount")) cgit_repo->enable_log_filecount = cgit_enable_log_filecount * atoi(value); else if (cgit_repo && !strcmp(name, "repo.enable-log-linecount")) diff --combined ui-shared.c index fd71c12,3e378a4..ca2ee82 --- a/ui-shared.c +++ b/ui-shared.c @@@ -57,13 -57,13 +57,13 @@@ char *cgit_repourl(const char *reponame } } - char *cgit_pageurl(const char *reponame, const char *pagename, - const char *query) + char *cgit_fileurl(const char *reponame, const char *pagename, + const char *filename, const char *query) { if (cgit_virtual_root) { if (query) - return fmt("%s/%s/%s/?%s", cgit_virtual_root, reponame, - pagename, query); + return fmt("%s/%s/%s/%s?%s", cgit_virtual_root, reponame, + pagename, filename?filename:"", query); else return fmt("%s/%s/%s/", cgit_virtual_root, reponame, pagename); @@@ -75,6 -75,37 +75,37 @@@ } } + char *cgit_pageurl(const char *reponame, const char *pagename, + const char *query) + { + return cgit_fileurl(reponame,pagename,0,query); + } + + const char *cgit_repobasename(const char *reponame) + { + /* I assume we don't need to store more than one repo basename */ + static char rvbuf[1024]; + int p; + const char *rv; + strncpy(rvbuf,reponame,sizeof(rvbuf)); + if(rvbuf[sizeof(rvbuf)-1]) + die("cgit_repobasename: truncated repository name '%s'", reponame); + p = strlen(rvbuf)-1; + /* strip trailing slashes */ + while(p && rvbuf[p]=='/') rvbuf[p--]=0; + /* strip trailing .git */ + if(p>=3 && !strncmp(&rvbuf[p-3],".git",4)) { + p -= 3; rvbuf[p--] = 0; + } + /* strip more trailing slashes if any */ + while( p && rvbuf[p]=='/') rvbuf[p--]=0; + /* find last slash in the remaining string */ + rv = strrchr(rvbuf,'/'); + if(rv) + return ++rv; + return rvbuf; + } + char *cgit_currurl() { if (!cgit_virtual_root) @@@ -218,30 -249,6 +249,30 @@@ void cgit_diff_link(char *name, char *t html(""); } +void cgit_object_link(struct object *obj) +{ + char *page, *arg, *url; + + if (obj->type == OBJ_COMMIT) { + cgit_commit_link(fmt("commit %s", sha1_to_hex(obj->sha1)), NULL, NULL, + cgit_query_head, sha1_to_hex(obj->sha1)); + return; + } else if (obj->type == OBJ_TREE) { + page = "tree"; + arg = "id"; + } else { + page = "blob"; + arg = "id"; + } + + url = cgit_pageurl(cgit_query_repo, page, + fmt("%s=%s", arg, sha1_to_hex(obj->sha1))); + html_link_open(url, NULL, NULL); + htmlf("%s %s", typename(obj->type), + sha1_to_hex(obj->sha1)); + html_link_close(); +} + void cgit_print_date(time_t secs, char *format) { char buf[64]; @@@ -392,3 -399,5 +423,5 @@@ void cgit_print_snapshot_start(const ch ttl_seconds(item->ttl))); html("\n"); } + + /* vim:set sw=8: */