author | Lars Hjemli <hjemli@gmail.com> | 2007-05-15 22:58:35 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2007-05-15 22:58:35 (UTC) |
commit | f9ff7df613b4ee86fe5914c4ae3400650882c03d (patch) (unidiff) | |
tree | c26fde3a4d3485943c275232f18359bebd133f1a /cgit.c | |
parent | a2ddc10479ec463708e422ca5ce7ec02c22a7d02 (diff) | |
download | cgit-f9ff7df613b4ee86fe5914c4ae3400650882c03d.zip cgit-f9ff7df613b4ee86fe5914c4ae3400650882c03d.tar.gz cgit-f9ff7df613b4ee86fe5914c4ae3400650882c03d.tar.bz2 |
Add support for commitdiff via h parameter
The commitdiff will be generated against the first parent, and the
diff page also gets the benefit of repo.defbranch.
Cleaned up some bad whitespace in cgit.h while at it.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | cgit.c | 3 |
1 files changed, 2 insertions, 1 deletions
@@ -59,129 +59,130 @@ static int cgit_prepare_cache(struct cacheitem *item) | |||
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) | 68 | if (!cgit_query_head) |
69 | cgit_query_head = cgit_repo->defbranch; | 69 | cgit_query_head = cgit_repo->defbranch; |
70 | 70 | ||
71 | if (chdir(cgit_repo->path)) { | 71 | if (chdir(cgit_repo->path)) { |
72 | title = fmt("%s - %s", cgit_root_title, "Bad request"); | 72 | title = fmt("%s - %s", cgit_root_title, "Bad request"); |
73 | cgit_print_docstart(title, item); | 73 | cgit_print_docstart(title, item); |
74 | cgit_print_pageheader(title, 0); | 74 | cgit_print_pageheader(title, 0); |
75 | cgit_print_error(fmt("Unable to scan repository: %s", | 75 | cgit_print_error(fmt("Unable to scan repository: %s", |
76 | strerror(errno))); | 76 | strerror(errno))); |
77 | cgit_print_docend(); | 77 | cgit_print_docend(); |
78 | return; | 78 | return; |
79 | } | 79 | } |
80 | 80 | ||
81 | title = fmt("%s - %s", cgit_repo->name, cgit_repo->desc); | 81 | title = fmt("%s - %s", cgit_repo->name, cgit_repo->desc); |
82 | show_search = 0; | 82 | show_search = 0; |
83 | setenv("GIT_DIR", cgit_repo->path, 1); | 83 | setenv("GIT_DIR", cgit_repo->path, 1); |
84 | 84 | ||
85 | if (cgit_query_page) { | 85 | if (cgit_query_page) { |
86 | if (cgit_repo->snapshots && !strcmp(cgit_query_page, "snapshot")) { | 86 | if (cgit_repo->snapshots && !strcmp(cgit_query_page, "snapshot")) { |
87 | cgit_print_snapshot(item, cgit_query_sha1, "zip", | 87 | cgit_print_snapshot(item, cgit_query_sha1, "zip", |
88 | cgit_repo->url, cgit_query_name); | 88 | cgit_repo->url, cgit_query_name); |
89 | return; | 89 | return; |
90 | } | 90 | } |
91 | if (!strcmp(cgit_query_page, "blob")) { | 91 | if (!strcmp(cgit_query_page, "blob")) { |
92 | cgit_print_blob(item, cgit_query_sha1, cgit_query_path); | 92 | cgit_print_blob(item, cgit_query_sha1, cgit_query_path); |
93 | return; | 93 | return; |
94 | } | 94 | } |
95 | } | 95 | } |
96 | 96 | ||
97 | if (cgit_query_page && !strcmp(cgit_query_page, "log")) | 97 | if (cgit_query_page && !strcmp(cgit_query_page, "log")) |
98 | show_search = 1; | 98 | show_search = 1; |
99 | 99 | ||
100 | cgit_print_docstart(title, item); | 100 | cgit_print_docstart(title, item); |
101 | 101 | ||
102 | 102 | ||
103 | if (!cgit_query_page) { | 103 | if (!cgit_query_page) { |
104 | cgit_print_pageheader("summary", show_search); | 104 | cgit_print_pageheader("summary", show_search); |
105 | cgit_print_summary(); | 105 | cgit_print_summary(); |
106 | cgit_print_docend(); | 106 | cgit_print_docend(); |
107 | return; | 107 | return; |
108 | } | 108 | } |
109 | 109 | ||
110 | cgit_print_pageheader(cgit_query_page, show_search); | 110 | cgit_print_pageheader(cgit_query_page, show_search); |
111 | 111 | ||
112 | if (!strcmp(cgit_query_page, "log")) { | 112 | if (!strcmp(cgit_query_page, "log")) { |
113 | cgit_print_log(cgit_query_head, cgit_query_ofs, | 113 | cgit_print_log(cgit_query_head, cgit_query_ofs, |
114 | cgit_max_commit_count, cgit_query_search, | 114 | cgit_max_commit_count, cgit_query_search, |
115 | cgit_query_path); | 115 | cgit_query_path); |
116 | } else if (!strcmp(cgit_query_page, "tree")) { | 116 | } else if (!strcmp(cgit_query_page, "tree")) { |
117 | 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); |
118 | } else if (!strcmp(cgit_query_page, "commit")) { | 118 | } else if (!strcmp(cgit_query_page, "commit")) { |
119 | cgit_print_commit(cgit_query_head); | 119 | cgit_print_commit(cgit_query_head); |
120 | } else if (!strcmp(cgit_query_page, "view")) { | 120 | } else if (!strcmp(cgit_query_page, "view")) { |
121 | cgit_print_view(cgit_query_sha1, cgit_query_path); | 121 | cgit_print_view(cgit_query_sha1, cgit_query_path); |
122 | } else if (!strcmp(cgit_query_page, "diff")) { | 122 | } else if (!strcmp(cgit_query_page, "diff")) { |
123 | cgit_print_diff(cgit_query_sha1, cgit_query_sha2, cgit_query_path); | 123 | cgit_print_diff(cgit_query_head, cgit_query_sha1, cgit_query_sha2, |
124 | cgit_query_path); | ||
124 | } else { | 125 | } else { |
125 | cgit_print_error("Invalid request"); | 126 | cgit_print_error("Invalid request"); |
126 | } | 127 | } |
127 | cgit_print_docend(); | 128 | cgit_print_docend(); |
128 | } | 129 | } |
129 | 130 | ||
130 | static void cgit_fill_cache(struct cacheitem *item, int use_cache) | 131 | static void cgit_fill_cache(struct cacheitem *item, int use_cache) |
131 | { | 132 | { |
132 | static char buf[PATH_MAX]; | 133 | static char buf[PATH_MAX]; |
133 | int stdout2; | 134 | int stdout2; |
134 | 135 | ||
135 | getcwd(buf, sizeof(buf)); | 136 | getcwd(buf, sizeof(buf)); |
136 | item->st.st_mtime = time(NULL); | 137 | item->st.st_mtime = time(NULL); |
137 | 138 | ||
138 | if (use_cache) { | 139 | if (use_cache) { |
139 | stdout2 = chk_positive(dup(STDOUT_FILENO), | 140 | stdout2 = chk_positive(dup(STDOUT_FILENO), |
140 | "Preserving STDOUT"); | 141 | "Preserving STDOUT"); |
141 | chk_zero(close(STDOUT_FILENO), "Closing STDOUT"); | 142 | chk_zero(close(STDOUT_FILENO), "Closing STDOUT"); |
142 | chk_positive(dup2(item->fd, STDOUT_FILENO), "Dup2(cachefile)"); | 143 | chk_positive(dup2(item->fd, STDOUT_FILENO), "Dup2(cachefile)"); |
143 | } | 144 | } |
144 | 145 | ||
145 | if (cgit_query_repo) | 146 | if (cgit_query_repo) |
146 | cgit_print_repo_page(item); | 147 | cgit_print_repo_page(item); |
147 | else | 148 | else |
148 | cgit_print_repolist(item); | 149 | cgit_print_repolist(item); |
149 | 150 | ||
150 | if (use_cache) { | 151 | if (use_cache) { |
151 | chk_zero(close(STDOUT_FILENO), "Close redirected STDOUT"); | 152 | chk_zero(close(STDOUT_FILENO), "Close redirected STDOUT"); |
152 | chk_positive(dup2(stdout2, STDOUT_FILENO), | 153 | chk_positive(dup2(stdout2, STDOUT_FILENO), |
153 | "Restoring original STDOUT"); | 154 | "Restoring original STDOUT"); |
154 | chk_zero(close(stdout2), "Closing temporary STDOUT"); | 155 | chk_zero(close(stdout2), "Closing temporary STDOUT"); |
155 | } | 156 | } |
156 | 157 | ||
157 | chdir(buf); | 158 | chdir(buf); |
158 | } | 159 | } |
159 | 160 | ||
160 | static void cgit_check_cache(struct cacheitem *item) | 161 | static void cgit_check_cache(struct cacheitem *item) |
161 | { | 162 | { |
162 | int i = 0; | 163 | int i = 0; |
163 | 164 | ||
164 | top: | 165 | top: |
165 | if (++i > cgit_max_lock_attempts) { | 166 | if (++i > cgit_max_lock_attempts) { |
166 | die("cgit_refresh_cache: unable to lock %s: %s", | 167 | die("cgit_refresh_cache: unable to lock %s: %s", |
167 | item->name, strerror(errno)); | 168 | item->name, strerror(errno)); |
168 | } | 169 | } |
169 | if (!cache_exist(item)) { | 170 | if (!cache_exist(item)) { |
170 | if (!cache_lock(item)) { | 171 | if (!cache_lock(item)) { |
171 | sleep(1); | 172 | sleep(1); |
172 | goto top; | 173 | goto top; |
173 | } | 174 | } |
174 | if (!cache_exist(item)) { | 175 | if (!cache_exist(item)) { |
175 | cgit_fill_cache(item, 1); | 176 | cgit_fill_cache(item, 1); |
176 | cache_unlock(item); | 177 | cache_unlock(item); |
177 | } else { | 178 | } else { |
178 | cache_cancel_lock(item); | 179 | cache_cancel_lock(item); |
179 | } | 180 | } |
180 | } else if (cache_expired(item) && cache_lock(item)) { | 181 | } else if (cache_expired(item) && cache_lock(item)) { |
181 | if (cache_expired(item)) { | 182 | if (cache_expired(item)) { |
182 | cgit_fill_cache(item, 1); | 183 | cgit_fill_cache(item, 1); |
183 | cache_unlock(item); | 184 | cache_unlock(item); |
184 | } else { | 185 | } else { |
185 | cache_cancel_lock(item); | 186 | cache_cancel_lock(item); |
186 | } | 187 | } |
187 | } | 188 | } |