diff options
Diffstat (limited to 'shared.c')
| -rw-r--r-- | shared.c | 45 |
1 files changed, 40 insertions, 5 deletions
| @@ -12,6 +12,8 @@ struct repolist cgit_repolist; | |||
| 12 | struct repoinfo *cgit_repo; | 12 | struct repoinfo *cgit_repo; |
| 13 | int cgit_cmd; | 13 | int cgit_cmd; |
| 14 | 14 | ||
| 15 | const char *cgit_version = CGIT_VERSION; | ||
| 16 | |||
| 15 | char *cgit_root_title = "Git repository browser"; | 17 | char *cgit_root_title = "Git repository browser"; |
| 16 | char *cgit_css = "/cgit.css"; | 18 | char *cgit_css = "/cgit.css"; |
| 17 | char *cgit_logo = "/git-logo.png"; | 19 | char *cgit_logo = "/git-logo.png"; |
| @@ -26,6 +28,7 @@ char *cgit_repo_group = NULL; | |||
| 26 | 28 | ||
| 27 | int cgit_nocache = 0; | 29 | int cgit_nocache = 0; |
| 28 | int cgit_snapshots = 0; | 30 | int cgit_snapshots = 0; |
| 31 | int cgit_enable_index_links = 0; | ||
| 29 | int cgit_enable_log_filecount = 0; | 32 | int cgit_enable_log_filecount = 0; |
| 30 | int cgit_enable_log_linecount = 0; | 33 | int cgit_enable_log_linecount = 0; |
| 31 | int cgit_max_lock_attempts = 5; | 34 | int cgit_max_lock_attempts = 5; |
| @@ -59,7 +62,8 @@ int htmlfd = 0; | |||
| 59 | 62 | ||
| 60 | int cgit_get_cmd_index(const char *cmd) | 63 | int cgit_get_cmd_index(const char *cmd) |
| 61 | { | 64 | { |
| 62 | static char *cmds[] = {"log", "commit", "diff", "tree", "view", "blob", "snapshot", NULL}; | 65 | static char *cmds[] = {"log", "commit", "diff", "tree", "blob", |
| 66 | "snapshot", "tag", NULL}; | ||
| 63 | int i; | 67 | int i; |
| 64 | 68 | ||
| 65 | for(i = 0; cmds[i]; i++) | 69 | for(i = 0; cmds[i]; i++) |
| @@ -82,6 +86,13 @@ int chk_positive(int result, char *msg) | |||
| 82 | return result; | 86 | return result; |
| 83 | } | 87 | } |
| 84 | 88 | ||
| 89 | int chk_non_negative(int result, char *msg) | ||
| 90 | { | ||
| 91 | if (result < 0) | ||
| 92 | die("%s: %s",msg, strerror(errno)); | ||
| 93 | return result; | ||
| 94 | } | ||
| 95 | |||
| 85 | struct repoinfo *add_repo(const char *url) | 96 | struct repoinfo *add_repo(const char *url) |
| 86 | { | 97 | { |
| 87 | struct repoinfo *ret; | 98 | struct repoinfo *ret; |
| @@ -144,7 +155,9 @@ void cgit_global_config_cb(const char *name, const char *value) | |||
| 144 | else if (!strcmp(name, "nocache")) | 155 | else if (!strcmp(name, "nocache")) |
| 145 | cgit_nocache = atoi(value); | 156 | cgit_nocache = atoi(value); |
| 146 | else if (!strcmp(name, "snapshots")) | 157 | else if (!strcmp(name, "snapshots")) |
| 147 | cgit_snapshots = atoi(value); | 158 | cgit_snapshots = cgit_parse_snapshots_mask(value); |
| 159 | else if (!strcmp(name, "enable-index-links")) | ||
| 160 | cgit_enable_index_links = atoi(value); | ||
| 148 | else if (!strcmp(name, "enable-log-filecount")) | 161 | else if (!strcmp(name, "enable-log-filecount")) |
| 149 | cgit_enable_log_filecount = atoi(value); | 162 | cgit_enable_log_filecount = atoi(value); |
| 150 | else if (!strcmp(name, "enable-log-linecount")) | 163 | else if (!strcmp(name, "enable-log-linecount")) |
| @@ -184,7 +197,7 @@ void cgit_global_config_cb(const char *name, const char *value) | |||
| 184 | else if (cgit_repo && !strcmp(name, "repo.defbranch")) | 197 | else if (cgit_repo && !strcmp(name, "repo.defbranch")) |
| 185 | cgit_repo->defbranch = xstrdup(value); | 198 | cgit_repo->defbranch = xstrdup(value); |
| 186 | else if (cgit_repo && !strcmp(name, "repo.snapshots")) | 199 | else if (cgit_repo && !strcmp(name, "repo.snapshots")) |
| 187 | cgit_repo->snapshots = cgit_snapshots * atoi(value); | 200 | cgit_repo->snapshots = cgit_snapshots & cgit_parse_snapshots_mask(value); /* XXX: &? */ |
| 188 | else if (cgit_repo && !strcmp(name, "repo.enable-log-filecount")) | 201 | else if (cgit_repo && !strcmp(name, "repo.enable-log-filecount")) |
| 189 | cgit_repo->enable_log_filecount = cgit_enable_log_filecount * atoi(value); | 202 | cgit_repo->enable_log_filecount = cgit_enable_log_filecount * atoi(value); |
| 190 | else if (cgit_repo && !strcmp(name, "repo.enable-log-linecount")) | 203 | else if (cgit_repo && !strcmp(name, "repo.enable-log-linecount")) |
| @@ -224,7 +237,7 @@ void cgit_querystring_cb(const char *name, const char *value) | |||
| 224 | } else if (!strcmp(name, "ofs")) { | 237 | } else if (!strcmp(name, "ofs")) { |
| 225 | cgit_query_ofs = atoi(value); | 238 | cgit_query_ofs = atoi(value); |
| 226 | } else if (!strcmp(name, "path")) { | 239 | } else if (!strcmp(name, "path")) { |
| 227 | cgit_query_path = xstrdup(value); | 240 | cgit_query_path = trim_end(value, '/'); |
| 228 | } else if (!strcmp(name, "name")) { | 241 | } else if (!strcmp(name, "name")) { |
| 229 | cgit_query_name = xstrdup(value); | 242 | cgit_query_name = xstrdup(value); |
| 230 | } | 243 | } |
| @@ -253,6 +266,28 @@ int hextoint(char c) | |||
| 253 | return -1; | 266 | return -1; |
| 254 | } | 267 | } |
| 255 | 268 | ||
| 269 | char *trim_end(const char *str, char c) | ||
| 270 | { | ||
| 271 | int len; | ||
| 272 | char *s, *t; | ||
| 273 | |||
| 274 | if (str == NULL) | ||
| 275 | return NULL; | ||
| 276 | t = (char *)str; | ||
| 277 | len = strlen(t); | ||
| 278 | while(len > 0 && t[len - 1] == c) | ||
| 279 | len--; | ||
| 280 | |||
| 281 | if (len == 0) | ||
| 282 | return NULL; | ||
| 283 | |||
| 284 | c = t[len]; | ||
| 285 | t[len] = '\0'; | ||
| 286 | s = xstrdup(t); | ||
| 287 | t[len] = c; | ||
| 288 | return s; | ||
| 289 | } | ||
| 290 | |||
| 256 | void cgit_diff_tree_cb(struct diff_queue_struct *q, | 291 | void cgit_diff_tree_cb(struct diff_queue_struct *q, |
| 257 | struct diff_options *options, void *data) | 292 | struct diff_options *options, void *data) |
| 258 | { | 293 | { |
| @@ -359,7 +394,7 @@ void cgit_diff_tree(const unsigned char *old_sha1, | |||
| 359 | opt.format_callback_data = fn; | 394 | opt.format_callback_data = fn; |
| 360 | diff_setup_done(&opt); | 395 | diff_setup_done(&opt); |
| 361 | 396 | ||
| 362 | if (old_sha1) | 397 | if (old_sha1 && !is_null_sha1(old_sha1)) |
| 363 | ret = diff_tree_sha1(old_sha1, new_sha1, "", &opt); | 398 | ret = diff_tree_sha1(old_sha1, new_sha1, "", &opt); |
| 364 | else | 399 | else |
| 365 | ret = diff_root_tree_sha1(new_sha1, "", &opt); | 400 | ret = diff_root_tree_sha1(new_sha1, "", &opt); |
