summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2007-07-21 13:29:55 (UTC)
committer Michael Krelin <hacker@klever.net>2007-07-21 13:29:55 (UTC)
commit97c025ae8ecf9764fd6996c81c51c3de4adb837c (patch) (side-by-side diff)
tree83395f8230a8589b5d167ab796055133f739090d
parent1cb8bedf1e0a4aa73bb8ad3f96bfa7eda50919b3 (diff)
downloadcgit-97c025ae8ecf9764fd6996c81c51c3de4adb837c.zip
cgit-97c025ae8ecf9764fd6996c81c51c3de4adb837c.tar.gz
cgit-97c025ae8ecf9764fd6996c81c51c3de4adb837c.tar.bz2
shorten snapshot names to repo basename
Signed-off-by: Michael Krelin <hacker@klever.net>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.c3
-rw-r--r--ui-snapshot.c2
2 files changed, 3 insertions, 2 deletions
diff --git a/cgit.c b/cgit.c
index a0f88ad..7b55b7b 100644
--- a/cgit.c
+++ b/cgit.c
@@ -24,97 +24,98 @@ static int cgit_prepare_cache(struct cacheitem *item)
item->ttl = cgit_cache_root_ttl;
return 1;
}
if (!cgit_cmd) {
item->name = xstrdup(fmt("%s/%s/index.%s.html", cgit_cache_root,
cache_safe_filename(cgit_repo->url),
cache_safe_filename(cgit_querystring)));
item->ttl = cgit_cache_repo_ttl;
} else {
item->name = xstrdup(fmt("%s/%s/%s/%s.html", cgit_cache_root,
cache_safe_filename(cgit_repo->url),
cgit_query_page,
cache_safe_filename(cgit_querystring)));
if (cgit_query_has_symref)
item->ttl = cgit_cache_dynamic_ttl;
else if (cgit_query_has_sha1)
item->ttl = cgit_cache_static_ttl;
else
item->ttl = cgit_cache_repo_ttl;
}
return 1;
}
static void cgit_print_repo_page(struct cacheitem *item)
{
char *title;
int show_search;
if (!cgit_query_head)
cgit_query_head = cgit_repo->defbranch;
if (chdir(cgit_repo->path)) {
title = fmt("%s - %s", cgit_root_title, "Bad request");
cgit_print_docstart(title, item);
cgit_print_pageheader(title, 0);
cgit_print_error(fmt("Unable to scan repository: %s",
strerror(errno)));
cgit_print_docend();
return;
}
title = fmt("%s - %s", cgit_repo->name, cgit_repo->desc);
show_search = 0;
setenv("GIT_DIR", cgit_repo->path, 1);
if ((cgit_cmd == CMD_SNAPSHOT) && cgit_repo->snapshots) {
cgit_print_snapshot(item, cgit_query_sha1,
- cgit_repo->url, cgit_query_name);
+ cgit_repobasename(cgit_repo->url),
+ cgit_query_name);
return;
}
if (cgit_cmd == CMD_BLOB) {
cgit_print_blob(item, cgit_query_sha1, cgit_query_path);
return;
}
show_search = (cgit_cmd == CMD_LOG);
cgit_print_docstart(title, item);
if (!cgit_cmd) {
cgit_print_pageheader("summary", show_search);
cgit_print_summary();
cgit_print_docend();
return;
}
cgit_print_pageheader(cgit_query_page, show_search);
switch(cgit_cmd) {
case CMD_LOG:
cgit_print_log(cgit_query_sha1, cgit_query_ofs,
cgit_max_commit_count, cgit_query_search,
cgit_query_path, 1);
break;
case CMD_TREE:
cgit_print_tree(cgit_query_sha1, cgit_query_path);
break;
case CMD_COMMIT:
cgit_print_commit(cgit_query_sha1);
break;
case CMD_DIFF:
cgit_print_diff(cgit_query_sha1, cgit_query_sha2);
break;
default:
cgit_print_error("Invalid request");
}
cgit_print_docend();
}
static void cgit_fill_cache(struct cacheitem *item, int use_cache)
{
static char buf[PATH_MAX];
int stdout2;
getcwd(buf, sizeof(buf));
item->st.st_mtime = time(NULL);
diff --git a/ui-snapshot.c b/ui-snapshot.c
index 7076b50..053fd48 100644
--- a/ui-snapshot.c
+++ b/ui-snapshot.c
@@ -62,55 +62,55 @@ static const struct snapshot_archive_t {
{ ".tar.gz", "application/x-tar", write_tar_gzip_archive },
{ ".tar.bz2", "application/x-tar", write_tar_bzip2_archive },
{ ".tar", "application/x-tar", write_tar_archive }
};
void cgit_print_snapshot(struct cacheitem *item, const char *hex,
const char *prefix, const char *filename)
{
int fnl = strlen(filename);
int f;
for(f=0;f<(sizeof(snapshot_archives)/sizeof(*snapshot_archives));++f) {
const struct snapshot_archive_t* sat = &snapshot_archives[f];
int sl = strlen(sat->suffix);
if(fnl<sl || strcmp(&filename[fnl-sl],sat->suffix))
continue;
struct archiver_args args;
struct commit *commit;
unsigned char sha1[20];
if(get_sha1(hex, sha1)) {
cgit_print_error(fmt("Bad object id: %s", hex));
return;
}
commit = lookup_commit_reference(sha1);
if(!commit) {
cgit_print_error(fmt("Not a commit reference: %s", hex));
return;;
}
memset(&args,0,sizeof(args));
args.base = fmt("%s/", prefix);
args.tree = commit->tree;
cgit_print_snapshot_start(sat->mimetype, filename, item);
(*sat->write_func)(&args);
return;
}
cgit_print_error(fmt("Unsupported snapshot format: %s", filename));
}
void cgit_print_snapshot_links(const char *repo,const char *hex)
{
char *filename;
int f;
for(f=0;f<(sizeof(snapshot_archives)/sizeof(*snapshot_archives));++f) {
const struct snapshot_archive_t* sat = &snapshot_archives[f];
- filename = fmt("%s-%s%s",repo,hex,sat->suffix);
+ filename = fmt("%s-%s%s",cgit_repobasename(repo),hex,sat->suffix);
htmlf("<a href='%s'>%s</a><br/>",
cgit_fileurl(repo,"snapshot",filename,
fmt("id=%s&amp;name=%s",hex,filename)), filename);
}
}
/* vim:set sw=8: */