From 93ba78d6f4632ef1c5228965e3edc8c0faf88c1e Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Tue, 26 May 2020 00:06:52 +0100 Subject: revert(3p/git): Revert merge of git upstream at v2.26.2 This causes cgit to serve error pages, which is undesirable. This reverts commit 5229c9b232de5bfa959ad6ebbb4c8192ac513352, reversing changes made to f2b211131f2347342dde63975b09cf603149f1a3. --- third_party/git/list-objects.c | 59 ++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 25 deletions(-) (limited to 'third_party/git/list-objects.c') diff --git a/third_party/git/list-objects.c b/third_party/git/list-objects.c index e19589baa0..b5651ddd5b 100644 --- a/third_party/git/list-objects.c +++ b/third_party/git/list-objects.c @@ -18,7 +18,8 @@ struct traversal_context { show_object_fn show_object; show_commit_fn show_commit; void *show_data; - struct filter *filter; + filter_object_fn filter_fn; + void *filter_data; }; static void process_blob(struct traversal_context *ctx, @@ -28,7 +29,7 @@ static void process_blob(struct traversal_context *ctx, { struct object *obj = &blob->object; size_t pathlen; - enum list_objects_filter_result r; + enum list_objects_filter_result r = LOFR_MARK_SEEN | LOFR_DO_SHOW; if (!ctx->revs->blob_objects) return; @@ -53,10 +54,11 @@ static void process_blob(struct traversal_context *ctx, pathlen = path->len; strbuf_addstr(path, name); - r = list_objects_filter__filter_object(ctx->revs->repo, - LOFS_BLOB, obj, - path->buf, &path->buf[pathlen], - ctx->filter); + if ((obj->flags & NOT_USER_GIVEN) && ctx->filter_fn) + r = ctx->filter_fn(ctx->revs->repo, + LOFS_BLOB, obj, + path->buf, &path->buf[pathlen], + ctx->filter_data); if (r & LOFR_MARK_SEEN) obj->flags |= SEEN; if (r & LOFR_DO_SHOW) @@ -155,7 +157,7 @@ static void process_tree(struct traversal_context *ctx, struct object *obj = &tree->object; struct rev_info *revs = ctx->revs; int baselen = base->len; - enum list_objects_filter_result r; + enum list_objects_filter_result r = LOFR_MARK_SEEN | LOFR_DO_SHOW; int failed_parse; if (!revs->tree_objects) @@ -184,10 +186,11 @@ static void process_tree(struct traversal_context *ctx, } strbuf_addstr(base, name); - r = list_objects_filter__filter_object(ctx->revs->repo, - LOFS_BEGIN_TREE, obj, - base->buf, &base->buf[baselen], - ctx->filter); + if ((obj->flags & NOT_USER_GIVEN) && ctx->filter_fn) + r = ctx->filter_fn(ctx->revs->repo, + LOFS_BEGIN_TREE, obj, + base->buf, &base->buf[baselen], + ctx->filter_data); if (r & LOFR_MARK_SEEN) obj->flags |= SEEN; if (r & LOFR_DO_SHOW) @@ -200,14 +203,16 @@ static void process_tree(struct traversal_context *ctx, else if (!failed_parse) process_tree_contents(ctx, tree, base); - r = list_objects_filter__filter_object(ctx->revs->repo, - LOFS_END_TREE, obj, - base->buf, &base->buf[baselen], - ctx->filter); - if (r & LOFR_MARK_SEEN) - obj->flags |= SEEN; - if (r & LOFR_DO_SHOW) - ctx->show_object(obj, base->buf, ctx->show_data); + if ((obj->flags & NOT_USER_GIVEN) && ctx->filter_fn) { + r = ctx->filter_fn(ctx->revs->repo, + LOFS_END_TREE, obj, + base->buf, &base->buf[baselen], + ctx->filter_data); + if (r & LOFR_MARK_SEEN) + obj->flags |= SEEN; + if (r & LOFR_DO_SHOW) + ctx->show_object(obj, base->buf, ctx->show_data); + } strbuf_setlen(base, baselen); free_tree_buffer(tree); @@ -365,9 +370,7 @@ static void do_traverse(struct traversal_context *ctx) * an uninteresting boundary commit may not have its tree * parsed yet, but we are not going to show them anyway */ - if (!ctx->revs->tree_objects) - ; /* do not bother loading tree */ - else if (get_commit_tree(commit)) { + if (get_commit_tree(commit)) { struct tree *tree = get_commit_tree(commit); tree->object.flags |= NOT_USER_GIVEN; add_pending_tree(ctx->revs, tree); @@ -399,7 +402,8 @@ void traverse_commit_list(struct rev_info *revs, ctx.show_commit = show_commit; ctx.show_object = show_object; ctx.show_data = show_data; - ctx.filter = NULL; + ctx.filter_fn = NULL; + ctx.filter_data = NULL; do_traverse(&ctx); } @@ -412,12 +416,17 @@ void traverse_commit_list_filtered( struct oidset *omitted) { struct traversal_context ctx; + filter_free_fn filter_free_fn = NULL; ctx.revs = revs; ctx.show_object = show_object; ctx.show_commit = show_commit; ctx.show_data = show_data; - ctx.filter = list_objects_filter__init(omitted, filter_options); + ctx.filter_fn = NULL; + + ctx.filter_data = list_objects_filter__init(omitted, filter_options, + &ctx.filter_fn, &filter_free_fn); do_traverse(&ctx); - list_objects_filter__free(ctx.filter); + if (ctx.filter_data && filter_free_fn) + filter_free_fn(ctx.filter_data); } -- cgit 1.4.1