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/line-log.c | 71 +++++++++++++--------------------------------- 1 file changed, 19 insertions(+), 52 deletions(-) (limited to 'third_party/git/line-log.c') diff --git a/third_party/git/line-log.c b/third_party/git/line-log.c index 9010e00950b3..3aff1849e7d5 100644 --- a/third_party/git/line-log.c +++ b/third_party/git/line-log.c @@ -737,38 +737,6 @@ static struct line_log_data *lookup_line_range(struct rev_info *revs, return ret; } -static int same_paths_in_pathspec_and_range(struct pathspec *pathspec, - struct line_log_data *range) -{ - int i; - struct line_log_data *r; - - for (i = 0, r = range; i < pathspec->nr && r; i++, r = r->next) - if (strcmp(pathspec->items[i].match, r->path)) - return 0; - if (i < pathspec->nr || r) - /* different number of pathspec items and ranges */ - return 0; - - return 1; -} - -static void parse_pathspec_from_ranges(struct pathspec *pathspec, - struct line_log_data *range) -{ - struct line_log_data *r; - struct argv_array array = ARGV_ARRAY_INIT; - const char **paths; - - for (r = range; r; r = r->next) - argv_array_push(&array, r->path); - paths = argv_array_detach(&array); - - parse_pathspec(pathspec, 0, PATHSPEC_PREFER_FULL, "", paths); - /* strings are now owned by pathspec */ - free(paths); -} - void line_log_init(struct rev_info *rev, const char *prefix, struct string_list *args) { struct commit *commit = NULL; @@ -778,7 +746,20 @@ void line_log_init(struct rev_info *rev, const char *prefix, struct string_list range = parse_lines(rev->diffopt.repo, commit, prefix, args); add_line_range(rev, commit, range); - parse_pathspec_from_ranges(&rev->diffopt.pathspec, range); + if (!rev->diffopt.detect_rename) { + struct line_log_data *r; + struct argv_array array = ARGV_ARRAY_INIT; + const char **paths; + + for (r = range; r; r = r->next) + argv_array_push(&array, r->path); + paths = argv_array_detach(&array); + + parse_pathspec(&rev->diffopt.pathspec, 0, + PATHSPEC_PREFER_FULL, "", paths); + /* strings are now owned by pathspec */ + free(paths); + } } static void move_diff_queue(struct diff_queue_struct *dst, @@ -836,29 +817,15 @@ static void queue_diffs(struct line_log_data *range, struct diff_queue_struct *queue, struct commit *commit, struct commit *parent) { - struct object_id *tree_oid, *parent_tree_oid; - assert(commit); - tree_oid = get_commit_tree_oid(commit); - parent_tree_oid = parent ? get_commit_tree_oid(parent) : NULL; - - if (opt->detect_rename && - !same_paths_in_pathspec_and_range(&opt->pathspec, range)) { - clear_pathspec(&opt->pathspec); - parse_pathspec_from_ranges(&opt->pathspec, range); - } DIFF_QUEUE_CLEAR(&diff_queued_diff); - diff_tree_oid(parent_tree_oid, tree_oid, "", opt); - if (opt->detect_rename && diff_might_be_rename()) { - /* must look at the full tree diff to detect renames */ - clear_pathspec(&opt->pathspec); - DIFF_QUEUE_CLEAR(&diff_queued_diff); - - diff_tree_oid(parent_tree_oid, tree_oid, "", opt); - + diff_tree_oid(parent ? get_commit_tree_oid(parent) : NULL, + get_commit_tree_oid(commit), "", opt); + if (opt->detect_rename) { filter_diffs_for_paths(range, 1); - diffcore_std(opt); + if (diff_might_be_rename()) + diffcore_std(opt); filter_diffs_for_paths(range, 0); } move_diff_queue(queue, &diff_queued_diff); -- cgit 1.4.1