author | Lars Hjemli <hjemli@gmail.com> | 2007-05-15 22:14:51 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2007-05-15 22:16:00 (UTC) |
commit | b28b105ec172b258ae5d629381a5890697c2f938 (patch) (unidiff) | |
tree | 0673dc5ed94c8ce99c714d1204b6582f9ba96fc5 /cgit.c | |
parent | 47a81c77fdd017227632c4df9a0b7b135b8a738d (diff) | |
download | cgit-b28b105ec172b258ae5d629381a5890697c2f938.zip cgit-b28b105ec172b258ae5d629381a5890697c2f938.tar.gz cgit-b28b105ec172b258ae5d629381a5890697c2f938.tar.bz2 |
Enable default value for head parameter
Pages which expect head to be specified in the querystring can now be
given a default value, configurable per repository (via repo.defbranch,
which defaults to "master").
Currently, only the log page actually works without parameters, but the
defbranch is bound to be exploited.
This also removes some dead code from shared.c
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | cgit.c | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -20,96 +20,99 @@ static struct repoinfo *cgit_get_repoinfo(char *url) | |||
20 | repo = &cgit_repolist.repos[i]; | 20 | repo = &cgit_repolist.repos[i]; |
21 | if (!strcmp(repo->url, url)) | 21 | if (!strcmp(repo->url, url)) |
22 | return repo; | 22 | return repo; |
23 | } | 23 | } |
24 | return NULL; | 24 | return NULL; |
25 | } | 25 | } |
26 | 26 | ||
27 | 27 | ||
28 | static int cgit_prepare_cache(struct cacheitem *item) | 28 | static int cgit_prepare_cache(struct cacheitem *item) |
29 | { | 29 | { |
30 | if (!cgit_query_repo) { | 30 | if (!cgit_query_repo) { |
31 | item->name = xstrdup(fmt("%s/index.html", cgit_cache_root)); | 31 | item->name = xstrdup(fmt("%s/index.html", cgit_cache_root)); |
32 | item->ttl = cgit_cache_root_ttl; | 32 | item->ttl = cgit_cache_root_ttl; |
33 | return 1; | 33 | return 1; |
34 | } | 34 | } |
35 | cgit_repo = cgit_get_repoinfo(cgit_query_repo); | 35 | cgit_repo = cgit_get_repoinfo(cgit_query_repo); |
36 | if (!cgit_repo) { | 36 | if (!cgit_repo) { |
37 | char *title = fmt("%s - %s", cgit_root_title, "Bad request"); | 37 | char *title = fmt("%s - %s", cgit_root_title, "Bad request"); |
38 | cgit_print_docstart(title, item); | 38 | cgit_print_docstart(title, item); |
39 | cgit_print_pageheader(title, 0); | 39 | cgit_print_pageheader(title, 0); |
40 | cgit_print_error(fmt("Unknown repo: %s", cgit_query_repo)); | 40 | cgit_print_error(fmt("Unknown repo: %s", cgit_query_repo)); |
41 | cgit_print_docend(); | 41 | cgit_print_docend(); |
42 | return 0; | 42 | return 0; |
43 | } | 43 | } |
44 | 44 | ||
45 | if (!cgit_query_page) { | 45 | if (!cgit_query_page) { |
46 | item->name = xstrdup(fmt("%s/%s/index.html", cgit_cache_root, | 46 | item->name = xstrdup(fmt("%s/%s/index.html", cgit_cache_root, |
47 | cgit_repo->url)); | 47 | cgit_repo->url)); |
48 | item->ttl = cgit_cache_repo_ttl; | 48 | item->ttl = cgit_cache_repo_ttl; |
49 | } else { | 49 | } else { |
50 | item->name = xstrdup(fmt("%s/%s/%s/%s.html", cgit_cache_root, | 50 | item->name = xstrdup(fmt("%s/%s/%s/%s.html", cgit_cache_root, |
51 | cgit_repo->url, cgit_query_page, | 51 | cgit_repo->url, cgit_query_page, |
52 | cache_safe_filename(cgit_querystring))); | 52 | cache_safe_filename(cgit_querystring))); |
53 | if (cgit_query_has_symref) | 53 | if (cgit_query_has_symref) |
54 | item->ttl = cgit_cache_dynamic_ttl; | 54 | item->ttl = cgit_cache_dynamic_ttl; |
55 | else if (cgit_query_has_sha1) | 55 | else if (cgit_query_has_sha1) |
56 | item->ttl = cgit_cache_static_ttl; | 56 | item->ttl = cgit_cache_static_ttl; |
57 | else | 57 | else |
58 | item->ttl = cgit_cache_repo_ttl; | 58 | item->ttl = cgit_cache_repo_ttl; |
59 | } | 59 | } |
60 | return 1; | 60 | return 1; |
61 | } | 61 | } |
62 | 62 | ||
63 | static void cgit_print_repo_page(struct cacheitem *item) | 63 | static void cgit_print_repo_page(struct cacheitem *item) |
64 | { | 64 | { |
65 | char *title; | 65 | char *title; |
66 | int show_search; | 66 | int show_search; |
67 | 67 | ||
68 | if (!cgit_query_head) | ||
69 | cgit_query_head = cgit_repo->defbranch; | ||
70 | |||
68 | if (chdir(cgit_repo->path)) { | 71 | if (chdir(cgit_repo->path)) { |
69 | title = fmt("%s - %s", cgit_root_title, "Bad request"); | 72 | title = fmt("%s - %s", cgit_root_title, "Bad request"); |
70 | cgit_print_docstart(title, item); | 73 | cgit_print_docstart(title, item); |
71 | cgit_print_pageheader(title, 0); | 74 | cgit_print_pageheader(title, 0); |
72 | cgit_print_error(fmt("Unable to scan repository: %s", | 75 | cgit_print_error(fmt("Unable to scan repository: %s", |
73 | strerror(errno))); | 76 | strerror(errno))); |
74 | cgit_print_docend(); | 77 | cgit_print_docend(); |
75 | return; | 78 | return; |
76 | } | 79 | } |
77 | 80 | ||
78 | title = fmt("%s - %s", cgit_repo->name, cgit_repo->desc); | 81 | title = fmt("%s - %s", cgit_repo->name, cgit_repo->desc); |
79 | show_search = 0; | 82 | show_search = 0; |
80 | setenv("GIT_DIR", cgit_repo->path, 1); | 83 | setenv("GIT_DIR", cgit_repo->path, 1); |
81 | 84 | ||
82 | if (cgit_query_page) { | 85 | if (cgit_query_page) { |
83 | if (cgit_repo->snapshots && !strcmp(cgit_query_page, "snapshot")) { | 86 | if (cgit_repo->snapshots && !strcmp(cgit_query_page, "snapshot")) { |
84 | cgit_print_snapshot(item, cgit_query_sha1, "zip", | 87 | cgit_print_snapshot(item, cgit_query_sha1, "zip", |
85 | cgit_repo->url, cgit_query_name); | 88 | cgit_repo->url, cgit_query_name); |
86 | return; | 89 | return; |
87 | } | 90 | } |
88 | if (!strcmp(cgit_query_page, "blob")) { | 91 | if (!strcmp(cgit_query_page, "blob")) { |
89 | cgit_print_blob(item, cgit_query_sha1, cgit_query_path); | 92 | cgit_print_blob(item, cgit_query_sha1, cgit_query_path); |
90 | return; | 93 | return; |
91 | } | 94 | } |
92 | } | 95 | } |
93 | 96 | ||
94 | if (cgit_query_page && !strcmp(cgit_query_page, "log")) | 97 | if (cgit_query_page && !strcmp(cgit_query_page, "log")) |
95 | show_search = 1; | 98 | show_search = 1; |
96 | 99 | ||
97 | cgit_print_docstart(title, item); | 100 | cgit_print_docstart(title, item); |
98 | 101 | ||
99 | 102 | ||
100 | if (!cgit_query_page) { | 103 | if (!cgit_query_page) { |
101 | cgit_print_pageheader("summary", show_search); | 104 | cgit_print_pageheader("summary", show_search); |
102 | cgit_print_summary(); | 105 | cgit_print_summary(); |
103 | cgit_print_docend(); | 106 | cgit_print_docend(); |
104 | return; | 107 | return; |
105 | } | 108 | } |
106 | 109 | ||
107 | cgit_print_pageheader(cgit_query_page, show_search); | 110 | cgit_print_pageheader(cgit_query_page, show_search); |
108 | 111 | ||
109 | if (!strcmp(cgit_query_page, "log")) { | 112 | if (!strcmp(cgit_query_page, "log")) { |
110 | cgit_print_log(cgit_query_head, cgit_query_ofs, | 113 | cgit_print_log(cgit_query_head, cgit_query_ofs, |
111 | cgit_max_commit_count, cgit_query_search, | 114 | cgit_max_commit_count, cgit_query_search, |
112 | cgit_query_path); | 115 | cgit_query_path); |
113 | } else if (!strcmp(cgit_query_page, "tree")) { | 116 | } else if (!strcmp(cgit_query_page, "tree")) { |
114 | cgit_print_tree(cgit_query_head, cgit_query_sha1, cgit_query_path); | 117 | cgit_print_tree(cgit_query_head, cgit_query_sha1, cgit_query_path); |
115 | } else if (!strcmp(cgit_query_page, "commit")) { | 118 | } else if (!strcmp(cgit_query_page, "commit")) { |