Diffstat (limited to 'shared.c')
| -rw-r--r-- | shared.c | 43 |
1 files changed, 35 insertions, 8 deletions
@@ -1,16 +1,28 @@ /* 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) @@ -50,16 +62,21 @@ 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; @@ -76,6 +93,7 @@ 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; @@ -210,11 +228,10 @@ void cgit_free_reflist_inner(struct reflist *list) free(list->refs); } -int cgit_refs_cb(const char *refname, const struct object_id *oid, int flags, - void *cb_data) +int cgit_refs_cb(const struct reference *ref, void *cb_data) { struct reflist *list = (struct reflist *)cb_data; - struct refinfo *info = cgit_mk_refinfo(refname, oid); + struct refinfo *info = cgit_mk_refinfo(ref->name, ref->oid); if (info) cgit_add_ref(list, info); @@ -241,7 +258,7 @@ static int load_mmfile(mmfile_t *file, const struct object_id *oid) file->ptr = (char *)""; file->size = 0; } else { - file->ptr = repo_read_object_file(the_repository, oid, &type, + file->ptr = odb_read_object(the_repository->objects, oid, &type, (unsigned long *)&file->size); } return 1; @@ -393,7 +410,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) { @@ -438,9 +455,10 @@ void cgit_prepare_repo_env(struct cgit_repo * repo) } /* Read the content of the specified file into a newly allocated buffer, - * zeroterminate the buffer and return 0 on success, errno otherwise. + * zeroterminate the buffer, truncate at a new line, and return 0 on success, + * errno otherwise. */ -int readfile(const char *path, char **buf, size_t *size) +int read_first_line(const char *path, char **buf, size_t *size) { int fd, e; struct stat st; @@ -461,10 +479,18 @@ int readfile(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 == '_'; @@ -539,7 +565,8 @@ char *expand_macros(const char *txt) char *get_mimetype_for_filename(const char *filename) { - char *ext, *mimetype, line[1024]; + const char *ext; + char *mimetype, line[1024]; struct string_list list = STRING_LIST_INIT_NODUP; int i; FILE *file; |