]> gitweb.ps.run Git - ps-cgit/blobdiff - shared.c
git: update to v2.46.0
[ps-cgit] / shared.c
index 609bd2a30670e5eab7974593fd98c6d9e95c24bc..ae3f6c131adfbaf14dccfd91ae9ec9db797f9849 100644 (file)
--- a/shared.c
+++ b/shared.c
@@ -6,6 +6,8 @@
  *   (see COPYING for full license text)
  */
 
  *   (see COPYING for full license text)
  */
 
+#define USE_THE_REPOSITORY_VARIABLE
+
 #include "cgit.h"
 
 struct cgit_repolist cgit_repolist;
 #include "cgit.h"
 
 struct cgit_repolist cgit_repolist;
@@ -58,6 +60,7 @@ struct cgit_repo *cgit_add_repo(const char *url)
        ret->homepage = NULL;
        ret->section = ctx.cfg.section;
        ret->snapshots = ctx.cfg.snapshots;
        ret->homepage = NULL;
        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_log_filecount = ctx.cfg.enable_log_filecount;
        ret->enable_log_linecount = ctx.cfg.enable_log_linecount;
        ret->enable_commit_graph = ctx.cfg.enable_commit_graph;
        ret->enable_log_filecount = ctx.cfg.enable_log_filecount;
        ret->enable_log_linecount = ctx.cfg.enable_log_linecount;
@@ -161,7 +164,7 @@ static struct refinfo *cgit_mk_refinfo(const char *refname, const struct object_
 
        ref = xmalloc(sizeof (struct refinfo));
        ref->refname = xstrdup(refname);
 
        ref = xmalloc(sizeof (struct refinfo));
        ref->refname = xstrdup(refname);
-       ref->object = parse_object(oid);
+       ref->object = parse_object(the_repository, oid);
        switch (ref->object->type) {
        case OBJ_TAG:
                ref->tag = cgit_parse_tag((struct tag *)ref->object);
        switch (ref->object->type) {
        case OBJ_TAG:
                ref->tag = cgit_parse_tag((struct tag *)ref->object);
@@ -240,7 +243,7 @@ static int load_mmfile(mmfile_t *file, const struct object_id *oid)
                file->ptr = (char *)"";
                file->size = 0;
        } else {
                file->ptr = (char *)"";
                file->size = 0;
        } else {
-               file->ptr = read_object_file(oid, &type,
+               file->ptr = repo_read_object_file(the_repository, oid, &type,
                                           (unsigned long *)&file->size);
        }
        return 1;
                                           (unsigned long *)&file->size);
        }
        return 1;
@@ -325,7 +328,7 @@ int cgit_diff_files(const struct object_id *old_oid,
                diff_params.flags |= XDF_IGNORE_WHITESPACE;
        emit_params.ctxlen = context > 0 ? context : 3;
        emit_params.flags = XDL_EMIT_FUNCNAMES;
                diff_params.flags |= XDF_IGNORE_WHITESPACE;
        emit_params.ctxlen = context > 0 ? context : 3;
        emit_params.flags = XDL_EMIT_FUNCNAMES;
-       emit_cb.outf = filediff_cb;
+       emit_cb.out_line = filediff_cb;
        emit_cb.priv = fn;
        xdl_diff(&file1, &file2, &diff_params, &emit_params, &emit_cb);
        if (file1.size)
        emit_cb.priv = fn;
        xdl_diff(&file1, &file2, &diff_params, &emit_params, &emit_cb);
        if (file1.size)
@@ -340,10 +343,9 @@ void cgit_diff_tree(const struct object_id *old_oid,
                    filepair_fn fn, const char *prefix, int ignorews)
 {
        struct diff_options opt;
                    filepair_fn fn, const char *prefix, int ignorews)
 {
        struct diff_options opt;
-       struct pathspec_item item;
+       struct pathspec_item *item;
 
 
-       memset(&item, 0, sizeof(item));
-       diff_setup(&opt);
+       repo_diff_setup(the_repository, &opt);
        opt.output_format = DIFF_FORMAT_CALLBACK;
        opt.detect_rename = 1;
        opt.rename_limit = ctx.cfg.renamelimit;
        opt.output_format = DIFF_FORMAT_CALLBACK;
        opt.detect_rename = 1;
        opt.rename_limit = ctx.cfg.renamelimit;
@@ -353,10 +355,11 @@ void cgit_diff_tree(const struct object_id *old_oid,
        opt.format_callback = cgit_diff_tree_cb;
        opt.format_callback_data = fn;
        if (prefix) {
        opt.format_callback = cgit_diff_tree_cb;
        opt.format_callback_data = fn;
        if (prefix) {
-               item.match = xstrdup(prefix);
-               item.len = strlen(prefix);
+               item = xcalloc(1, sizeof(*item));
+               item->match = xstrdup(prefix);
+               item->len = strlen(prefix);
                opt.pathspec.nr = 1;
                opt.pathspec.nr = 1;
-               opt.pathspec.items = &item;
+               opt.pathspec.items = item;
        }
        diff_setup_done(&opt);
 
        }
        diff_setup_done(&opt);
 
@@ -366,8 +369,6 @@ void cgit_diff_tree(const struct object_id *old_oid,
                diff_root_tree_oid(new_oid, "", &opt);
        diffcore_std(&opt);
        diff_flush(&opt);
                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)
 }
 
 void cgit_diff_commit(struct commit *commit, filepair_fn fn, const char *prefix)
@@ -540,7 +541,9 @@ char *expand_macros(const char *txt)
 
 char *get_mimetype_for_filename(const char *filename)
 {
 
 char *get_mimetype_for_filename(const char *filename)
 {
-       char *ext, *mimetype, *token, line[1024], *saveptr;
+       char *ext, *mimetype, line[1024];
+       struct string_list list = STRING_LIST_INIT_NODUP;
+       int i;
        FILE *file;
        struct string_list_item *mime;
 
        FILE *file;
        struct string_list_item *mime;
 
@@ -565,13 +568,16 @@ char *get_mimetype_for_filename(const char *filename)
        while (fgets(line, sizeof(line), file)) {
                if (!line[0] || line[0] == '#')
                        continue;
        while (fgets(line, sizeof(line), file)) {
                if (!line[0] || line[0] == '#')
                        continue;
-               mimetype = strtok_r(line, " \t\r\n", &saveptr);
-               while ((token = strtok_r(NULL, " \t\r\n", &saveptr))) {
-                       if (!strcasecmp(ext, token)) {
+               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)) {
                                fclose(file);
                                return xstrdup(mimetype);
                        }
                }
                                fclose(file);
                                return xstrdup(mimetype);
                        }
                }
+               string_list_clear(&list, 0);
        }
        fclose(file);
        return NULL;
        }
        fclose(file);
        return NULL;