Diffstat (limited to 'shared.c')
| -rw-r--r-- | shared.c | 68 |
1 files changed, 19 insertions, 49 deletions
@@ -1,28 +1,16 @@ /* shared.c: global vars + some callback functions * * Copyright (C) 2006-2014 cgit Development Team <cgit@lists.zx2c4.com> - * Copyright (C) 2026 Saya Andy <saya.andy@posteo.com> - * - * Modified 2026 by Saya Andy: - * Add cgit_have_repository() - * Add ci filter configuration * * Licensed under GNU General Public License v2 * (see COPYING for full license text) */ -#define USE_THE_REPOSITORY_VARIABLE - #include "cgit.h" struct cgit_repolist cgit_repolist; struct cgit_context ctx; -int cgit_have_repository(void) -{ - return startup_info->have_repository; -} - int chk_zero(int result, char *msg) { if (result != 0) @@ -62,21 +50,16 @@ struct cgit_repo *cgit_add_repo(const char *url) ret = &cgit_repolist.repos[cgit_repolist.count-1]; memset(ret, 0, sizeof(struct cgit_repo)); ret->url = trim_end(url, '/'); - *strchrnul(ret->url, '\n') = '\0'; ret->name = ret->url; ret->path = NULL; ret->desc = cgit_default_repo_desc; ret->extra_head_content = NULL; ret->owner = NULL; ret->homepage = NULL; - ret->ci_url = ctx.cfg.ci_url; - ret->ci_branch_url = ctx.cfg.ci_branch_url; - ret->ci_tag_url = ctx.cfg.ci_tag_url; ret->section = ctx.cfg.section; ret->snapshots = ctx.cfg.snapshots; ret->enable_blame = ctx.cfg.enable_blame; ret->enable_commit_graph = ctx.cfg.enable_commit_graph; - ret->enable_follow_links = ctx.cfg.enable_follow_links; ret->enable_log_filecount = ctx.cfg.enable_log_filecount; ret->enable_log_linecount = ctx.cfg.enable_log_linecount; ret->enable_remote_branches = ctx.cfg.enable_remote_branches; @@ -93,7 +76,6 @@ struct cgit_repo *cgit_add_repo(const char *url) ret->source_filter = ctx.cfg.source_filter; ret->email_filter = ctx.cfg.email_filter; ret->owner_filter = ctx.cfg.owner_filter; - ret->ci_filter = ctx.cfg.ci_filter; ret->clone_url = ctx.cfg.clone_url; ret->submodules.strdup_strings = 1; ret->hide = ret->ignore = 0; @@ -228,10 +210,11 @@ void cgit_free_reflist_inner(struct reflist *list) free(list->refs); } -int cgit_refs_cb(const struct reference *ref, void *cb_data) +int cgit_refs_cb(const char *refname, const struct object_id *oid, int flags, + void *cb_data) { struct reflist *list = (struct reflist *)cb_data; - struct refinfo *info = cgit_mk_refinfo(ref->name, ref->oid); + struct refinfo *info = cgit_mk_refinfo(refname, oid); if (info) cgit_add_ref(list, info); @@ -258,7 +241,7 @@ static int load_mmfile(mmfile_t *file, const struct object_id *oid) file->ptr = (char *)""; file->size = 0; } else { - file->ptr = odb_read_object(the_repository->objects, oid, &type, + file->ptr = read_object_file(oid, &type, (unsigned long *)&file->size); } return 1; @@ -358,9 +341,10 @@ void cgit_diff_tree(const struct object_id *old_oid, filepair_fn fn, const char *prefix, int ignorews) { struct diff_options opt; - struct pathspec_item *item; + struct pathspec_item item; - repo_diff_setup(the_repository, &opt); + memset(&item, 0, sizeof(item)); + diff_setup(&opt); opt.output_format = DIFF_FORMAT_CALLBACK; opt.detect_rename = 1; opt.rename_limit = ctx.cfg.renamelimit; @@ -370,11 +354,10 @@ void cgit_diff_tree(const struct object_id *old_oid, opt.format_callback = cgit_diff_tree_cb; opt.format_callback_data = fn; if (prefix) { - item = xcalloc(1, sizeof(*item)); - item->match = xstrdup(prefix); - item->len = strlen(prefix); + item.match = xstrdup(prefix); + item.len = strlen(prefix); opt.pathspec.nr = 1; - opt.pathspec.items = item; + opt.pathspec.items = &item; } diff_setup_done(&opt); @@ -384,6 +367,8 @@ void cgit_diff_tree(const struct object_id *old_oid, diff_root_tree_oid(new_oid, "", &opt); diffcore_std(&opt); diff_flush(&opt); + + free(item.match); } void cgit_diff_commit(struct commit *commit, filepair_fn fn, const char *prefix) @@ -410,7 +395,7 @@ int cgit_parse_snapshots_mask(const char *str) if (strcmp(str, "all") == 0) return INT_MAX; - string_list_split(&tokens, str, " ", -1); + string_list_split(&tokens, str, ' ', -1); string_list_remove_empty_items(&tokens, 0); for_each_string_list_item(item, &tokens) { @@ -455,10 +440,9 @@ void cgit_prepare_repo_env(struct cgit_repo * repo) } /* Read the content of the specified file into a newly allocated buffer, - * zeroterminate the buffer, truncate at a new line, and return 0 on success, - * errno otherwise. + * zeroterminate the buffer and return 0 on success, errno otherwise. */ -int read_first_line(const char *path, char **buf, size_t *size) +int readfile(const char *path, char **buf, size_t *size) { int fd, e; struct stat st; @@ -479,18 +463,10 @@ int read_first_line(const char *path, char **buf, size_t *size) *size = read_in_full(fd, *buf, st.st_size); e = errno; (*buf)[*size] = '\0'; - *strchrnul(*buf, '\n') = '\0'; close(fd); return (*size == st.st_size ? 0 : e); } -char *strdup_first_line(const char *txt) -{ - char *t = xstrdup(txt); - *strchrnul(t, '\n') = '\0'; - return t; -} - static int is_token_char(char c) { return isalnum(c) || c == '_'; @@ -565,10 +541,7 @@ char *expand_macros(const char *txt) char *get_mimetype_for_filename(const char *filename) { - const char *ext; - char *mimetype, line[1024]; - struct string_list list = STRING_LIST_INIT_NODUP; - int i; + char *ext, *mimetype, *token, line[1024], *saveptr; FILE *file; struct string_list_item *mime; @@ -593,16 +566,13 @@ char *get_mimetype_for_filename(const char *filename) while (fgets(line, sizeof(line), file)) { if (!line[0] || line[0] == '#') continue; - string_list_split_in_place(&list, line, " \t\r\n", -1); - string_list_remove_empty_items(&list, 0); - mimetype = list.items[0].string; - for (i = 1; i < list.nr; i++) { - if (!strcasecmp(ext, list.items[i].string)) { + mimetype = strtok_r(line, " \t\r\n", &saveptr); + while ((token = strtok_r(NULL, " \t\r\n", &saveptr))) { + if (!strcasecmp(ext, token)) { fclose(file); return xstrdup(mimetype); } } - string_list_clear(&list, 0); } fclose(file); return NULL; |