Branch Coverage

deps/libgit2/src/libgit2/diff_tform.c
Criterion Covered Total %
branch 210 456 46.0


line true false branch
24 0 27 if (!delta)
30 27 0 if (d->old_file.path != NULL) {
32 0 27 if (delta->old_file.path == NULL)
36 0 27 if (d->new_file.path != d->old_file.path && d->new_file.path != NULL) {
0 0 if (d->new_file.path != d->old_file.path && d->new_file.path != NULL) {
38 0 0 if (delta->new_file.path == NULL)
71 0 3 if (b->status == GIT_DELTA_CONFLICTED)
73 0 3 if (a->status == GIT_DELTA_CONFLICTED)
77 3 0 if (b->status == GIT_DELTA_UNMODIFIED || a->status == GIT_DELTA_DELETED)
0 3 if (b->status == GIT_DELTA_UNMODIFIED || a->status == GIT_DELTA_DELETED)
81 0 3 if ((dup = git_diff__delta_dup(b, pool)) == NULL)
85 3 0 if (a->status == GIT_DELTA_UNMODIFIED ||
3 0 if (a->status == GIT_DELTA_UNMODIFIED ||
86 0 3 a->status == GIT_DELTA_UNTRACKED ||
90 0 3 GIT_ASSERT_WITH_RETVAL(b->status != GIT_DELTA_UNMODIFIED, NULL);
95 0 3 if (dup->status == GIT_DELTA_DELETED) {
96 0 0 if (a->status == GIT_DELTA_ADDED) {
124 0 6 GIT_ASSERT_ARG(onto);
125 0 6 GIT_ASSERT_ARG(from);
127 2 4 if (!from->deltas.length)
133 4 0 if (ignore_case != ((from->opts.flags & GIT_DIFF_IGNORE_CASE) != 0) ||
0 4 if (ignore_case != ((from->opts.flags & GIT_DIFF_IGNORE_CASE) != 0) ||
144 18 13 for (i = 0, j = 0; i < onto->deltas.length || j < from->deltas.length; ) {
9 4 for (i = 0, j = 0; i < onto->deltas.length || j < from->deltas.length; ) {
145 18 9 git_diff_delta *o = GIT_VECTOR_GET(&onto->deltas, i);
146 27 0 const git_diff_delta *f = GIT_VECTOR_GET(&from->deltas, j);
147 27 0 int cmp = !f ? -1 : !o ? 1 :
18 9 int cmp = !f ? -1 : !o ? 1 :
148 0 18 STRCMP_CASESELECT(ignore_case, o->old_file.path, f->old_file.path);
150 0 27 if (cmp < 0) {
153 24 3 } else if (cmp > 0) {
157 0 3 const git_diff_delta *left = reversed ? f : o;
158 0 3 const git_diff_delta *right = reversed ? o : f;
168 27 0 if (delta && git_diff_delta__should_skip(&onto->opts, delta)) {
0 27 if (delta && git_diff_delta__should_skip(&onto->opts, delta)) {
173 27 0 if ((error = !delta ? -1 : git_vector_insert(&onto_new, delta)) < 0)
0 27 if ((error = !delta ? -1 : git_vector_insert(&onto_new, delta)) < 0)
177 4 0 if (!error) {
181 0 4 if ((onto->opts.flags & GIT_DIFF_REVERSE) != 0)
235 0 7 if (error < 0)
254 0 11 GIT_ERROR_CHECK_VERSION(given, GIT_DIFF_FIND_OPTIONS_VERSION, "git_diff_find_options");
260 11 0 if (given)
263 11 0 if (!given ||
2 9 if (!given ||
266 2 0 if (cfg) {
271 2 0 if (!git__parse_bool(&boolval, rule) && !boolval)
0 2 if (!git__parse_bool(&boolval, rule) && !boolval)
273 2 0 else if (!strcasecmp(rule, "copies") || !strcasecmp(rule, "copy"))
0 2 else if (!strcasecmp(rule, "copies") || !strcasecmp(rule, "copy"))
287 0 11 if (opts->flags & GIT_DIFF_FIND_EXACT_MATCH_ONLY) {
297 0 11 if (opts->flags & GIT_DIFF_FIND_RENAMES_FROM_REWRITES)
300 0 11 if (opts->flags & GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED)
303 1 10 if (opts->flags & GIT_DIFF_BREAK_REWRITES)
308 1 10 if (USE_DEFAULT(opts->rename_threshold))
0 1 if (USE_DEFAULT(opts->rename_threshold))
311 1 10 if (USE_DEFAULT(opts->rename_from_rewrite_threshold))
0 1 if (USE_DEFAULT(opts->rename_from_rewrite_threshold))
314 1 10 if (USE_DEFAULT(opts->copy_threshold))
0 1 if (USE_DEFAULT(opts->copy_threshold))
317 1 10 if (USE_DEFAULT(opts->break_rewrite_threshold))
0 1 if (USE_DEFAULT(opts->break_rewrite_threshold))
322 10 1 if (!opts->rename_limit) {
323 10 0 if (cfg) {
328 0 10 if (opts->rename_limit <= 0)
333 11 0 if (!opts->metric) {
335 0 11 GIT_ERROR_CHECK_ALLOC(opts->metric);
342 1 10 if (opts->flags & GIT_DIFF_FIND_IGNORE_WHITESPACE)
344 0 10 else if (opts->flags & GIT_DIFF_FIND_DONT_IGNORE_WHITESPACE)
360 0 0 GIT_ERROR_CHECK_ALLOC(deleted);
378 0 6 if (git_vector_init(&onto, expected_size, diff->deltas._cmp) < 0)
382 15 6 git_vector_foreach(&diff->deltas, i, delta) {
383 6 9 if ((delta->flags & GIT_DIFF_FLAG__TO_DELETE) != 0)
386 0 9 if ((delta->flags & GIT_DIFF_FLAG__TO_SPLIT) != 0 && actually_split) {
0 0 if ((delta->flags & GIT_DIFF_FLAG__TO_SPLIT) != 0 && actually_split) {
389 0 0 if (insert_delete_side_of_split(diff, &onto, delta) < 0)
392 0 0 if (diff->new_src == GIT_ITERATOR_WORKDIR)
405 9 0 if (delta->status != GIT_DELTA_COPIED &&
3 6 if (delta->status != GIT_DELTA_COPIED &&
406 0 3 delta->status != GIT_DELTA_RENAMED &&
407 0 0 (delta->status != GIT_DELTA_MODIFIED || actually_split))
411 0 9 if (git_vector_insert(&onto, delta) < 0)
418 15 6 git_vector_foreach(&diff->deltas, i, delta) {
419 6 9 if ((delta->flags & GIT_DIFF_FLAG__TO_DELETE) != 0)
439 17 14 return (idx & 1) ? &delta->new_file : &delta->old_file;
456 7 4 info->src = (file_idx & 1) ? diff->new_src : diff->old_src;
463 4 7 if ((info->file->flags & GIT_DIFF_FLAG_VALID_SIZE) ||
0 4 if ((info->file->flags & GIT_DIFF_FLAG_VALID_SIZE) ||
479 5 6 if (info->src == GIT_ITERATOR_WORKDIR) {
480 0 5 if ((error = git_repository_workdir_path(
485 0 5 if (!git_fs_path_isfile(info->data.ptr))
497 0 6 if (info->odb_obj != NULL)
504 0 6 if (error < 0) {
511 0 6 if (file->size != git_blob_rawsize(info->blob))
514 6 0 sz = git__is_sizet(file->size) ? (size_t)file->size : (size_t)-1;
527 0 14 if (info->odb_obj)
530 6 8 if (info->blob)
559 10 0 if (!GIT_MODE_ISBLOB(a_file->mode) || !GIT_MODE_ISBLOB(b_file->mode))
0 10 if (!GIT_MODE_ISBLOB(a_file->mode) || !GIT_MODE_ISBLOB(b_file->mode))
563 0 10 if (exact_match) {
564 0 0 if (git_oid_is_zero(&a_file->id) &&
0 0 if (git_oid_is_zero(&a_file->id) &&
565 0 0 diff->old_src == GIT_ITERATOR_WORKDIR &&
570 0 0 if (git_oid_is_zero(&b_file->id) &&
0 0 if (git_oid_is_zero(&b_file->id) &&
571 0 0 diff->new_src == GIT_ITERATOR_WORKDIR &&
578 3 7 if (git_oid__cmp(&a_file->id, &b_file->id) == 0) {
584 0 7 if (exact_match) {
593 4 3 if (!cache[a_idx] && (error = similarity_init(&a_info, diff, a_idx)) < 0)
0 4 if (!cache[a_idx] && (error = similarity_init(&a_info, diff, a_idx)) < 0)
595 7 0 if (!cache[b_idx] && (error = similarity_init(&b_info, diff, b_idx)) < 0)
0 7 if (!cache[b_idx] && (error = similarity_init(&b_info, diff, b_idx)) < 0)
599 0 7 if (a_file->size > 127 &&
0 0 if (a_file->size > 127 &&
600 0 0 b_file->size > 127 &&
601 0 0 (a_file->size > (b_file->size << 3) ||
606 4 3 if (!cache[a_idx]) {
607 0 4 if ((error = similarity_sig(&a_info, opts, cache)) < 0)
610 7 0 if (!cache[b_idx]) {
611 0 7 if ((error = similarity_sig(&b_info, opts, cache)) < 0)
618 7 0 if (cache[a_idx] && cache[b_idx])
7 0 if (cache[a_idx] && cache[b_idx])
636 0 0 git_diff_delta *delta = GIT_VECTOR_GET(&diff->deltas, delta_idx);
638 0 0 if ((delta->flags & GIT_DIFF_FLAG__HAS_SELF_SIMILARITY) != 0)
643 0 0 if (error < 0)
646 0 0 if (similarity >= 0) {
660 25 0 git_diff_delta *delta = GIT_VECTOR_GET(&diff->deltas, delta_idx);
663 10 15 if (!GIT_MODE_ISBLOB(delta->new_file.mode))
677 2 0 if (!FLAG_SET(opts, GIT_DIFF_FIND_REWRITES) &&
2 0 if (!FLAG_SET(opts, GIT_DIFF_FIND_REWRITES) &&
681 0 0 if (calc_self_similarity(diff, opts, delta_idx, cache) < 0)
684 0 0 if (FLAG_SET(opts, GIT_DIFF_BREAK_REWRITES) &&
0 0 if (FLAG_SET(opts, GIT_DIFF_BREAK_REWRITES) &&
689 0 0 if (FLAG_SET(opts, GIT_DIFF_FIND_RENAMES_FROM_REWRITES) &&
0 0 if (FLAG_SET(opts, GIT_DIFF_FIND_RENAMES_FROM_REWRITES) &&
698 0 7 if (!FLAG_SET(opts, GIT_DIFF_FIND_FOR_UNTRACKED))
716 25 0 git_diff_delta *delta = GIT_VECTOR_GET(&diff->deltas, delta_idx);
719 16 9 if (!GIT_MODE_ISBLOB(delta->old_file.mode))
735 0 0 if (!FLAG_SET(opts, GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED))
737 0 0 if (FLAG_SET(opts, GIT_DIFF_FIND_REMOVE_UNMODIFIED))
743 0 2 if (FLAG_SET(opts, GIT_DIFF_FIND_COPIES))
747 2 0 if (!FLAG_SET(opts, GIT_DIFF_FIND_REWRITES) &&
2 0 if (!FLAG_SET(opts, GIT_DIFF_FIND_REWRITES) &&
751 0 0 if (calc_self_similarity(diff, opts, delta_idx, cache) < 0)
754 0 0 if (FLAG_SET(opts, GIT_DIFF_BREAK_REWRITES) &&
0 0 if (FLAG_SET(opts, GIT_DIFF_BREAK_REWRITES) &&
760 0 0 if (FLAG_SET(opts, GIT_DIFF_FIND_RENAMES_FROM_REWRITES) &&
0 0 if (FLAG_SET(opts, GIT_DIFF_FIND_RENAMES_FROM_REWRITES) &&
773 0 0 return (delta->status == GIT_DELTA_TYPECHANGE ||
0 0 return (delta->status == GIT_DELTA_TYPECHANGE ||
779 0 1 return (delta->status == GIT_DELTA_ADDED ||
780 0 0 delta->status == GIT_DELTA_UNTRACKED ||
781 1 5 delta->status == GIT_DELTA_UNREADABLE ||
0 0 delta->status == GIT_DELTA_UNREADABLE ||
820 0 11 GIT_ASSERT_ARG(diff);
822 0 11 if ((error = normalize_find_opts(diff, &opts, given_opts)) < 0)
828 11 0 if (!num_deltas || !git__is_uint32(num_deltas))
11 0 if (!num_deltas || !git__is_uint32(num_deltas))
832 0 11 if ((opts.flags & GIT_DIFF_FIND_ALL) == 0)
835 0 11 GIT_ERROR_CHECK_ALLOC_MULTIPLY(&sigcache_size, num_deltas, 2);
0 11 GIT_ERROR_CHECK_ALLOC_MULTIPLY(&sigcache_size, num_deltas, 2);
837 0 11 GIT_ERROR_CHECK_ALLOC(sigcache);
844 25 11 git_vector_foreach(&diff->deltas, t, tgt) {
845 7 18 if (is_rename_source(diff, &opts, t, sigcache))
848 13 12 if (is_rename_target(diff, &opts, t, sigcache))
851 0 25 if ((tgt->flags & GIT_DIFF_FLAG__TO_SPLIT) != 0)
856 7 4 if (!num_srcs || !num_tgts)
7 0 if (!num_srcs || !num_tgts)
860 0 7 GIT_ERROR_CHECK_ALLOC(src2tgt);
862 0 7 GIT_ERROR_CHECK_ALLOC(tgt2src);
864 0 7 if (FLAG_SET(&opts, GIT_DIFF_FIND_COPIES)) {
866 0 0 GIT_ERROR_CHECK_ALLOC(tgt2src_copy);
876 17 0 git_vector_foreach(&diff->deltas, t, tgt) {
878 7 10 if ((tgt->flags & GIT_DIFF_FLAG__IS_RENAME_TARGET) == 0)
883 17 0 git_vector_foreach(&diff->deltas, s, src) {
885 7 10 if ((src->flags & GIT_DIFF_FLAG__IS_RENAME_SOURCE) == 0)
889 0 10 if (s == t)
891 0 10 else if ((error = similarity_measure(
895 0 10 if (result < 0)
900 6 4 if (tgt2src[t].similarity < similarity &&
6 0 if (tgt2src[t].similarity < similarity &&
904 0 6 if (src2tgt[s].similarity > 0) {
908 0 6 if (tgt2src[t].similarity > 0) {
921 0 10 if (tgt2src_copy != NULL &&
0 0 if (tgt2src_copy != NULL &&
928 10 0 if (++tried_srcs >= num_srcs)
932 0 0 if (tried_srcs > opts.rename_limit)
936 7 3 if (++tried_tgts >= num_tgts)
940 0 7 if (num_bumped > 0) /* try again if we bumped some items */
947 19 7 git_vector_foreach(&diff->deltas, t, tgt) {
949 9 10 if ((tgt->flags & GIT_DIFF_FLAG__IS_RENAME_TARGET) == 0)
953 6 4 if (tgt2src[t].similarity)
955 0 4 else if (tgt2src_copy && tgt2src_copy[t].similarity)
0 0 else if (tgt2src_copy && tgt2src_copy[t].similarity)
961 6 0 src = GIT_VECTOR_GET(&diff->deltas, s);
971 6 0 if (src->status == GIT_DELTA_DELETED) {
973 6 0 if (delta_is_new_only(tgt)) {
975 0 6 if (best_match->similarity < opts.rename_threshold)
983 0 0 GIT_ASSERT(delta_is_split(tgt));
985 0 0 if (best_match->similarity < opts.rename_from_rewrite_threshold)
993 0 0 GIT_ASSERT(src->status == GIT_DELTA_DELETED);
1001 0 0 if (src2tgt[t].similarity > 0 && src2tgt[t].idx > t) {
0 0 if (src2tgt[t].similarity > 0 && src2tgt[t].idx > t) {
1008 0 0 else if (delta_is_split(src)) {
1010 0 0 if (delta_is_new_only(tgt)) {
1012 0 0 if (best_match->similarity < opts.rename_threshold)
1017 0 0 src->status = (diff->new_src == GIT_ITERATOR_WORKDIR) ?
1029 0 0 GIT_ASSERT(delta_is_split(src));
1031 0 0 if (best_match->similarity < opts.rename_from_rewrite_threshold)
1045 0 0 if (tgt2src[s].idx == t &&
0 0 if (tgt2src[s].idx == t &&
1055 0 0 else if (src2tgt[t].similarity > 0 && src2tgt[t].idx > t) {
0 0 else if (src2tgt[t].similarity > 0 && src2tgt[t].idx > t) {
1064 0 0 else if (FLAG_SET(&opts, GIT_DIFF_FIND_COPIES)) {
1065 0 0 if (tgt2src_copy[t].similarity < opts.copy_threshold)
1070 0 0 src = GIT_VECTOR_GET(&diff->deltas, best_match->idx);
1072 0 0 if (delta_is_split(tgt)) {
1074 0 0 if (error < 0)
1079 0 0 if (!delta_is_split(tgt) && !delta_is_new_only(tgt))
0 0 if (!delta_is_split(tgt) && !delta_is_new_only(tgt))
1096 1 6 if (num_rewrites > 0 || num_updates > 0)
0 1 if (num_rewrites > 0 || num_updates > 0)
1099 1 5 FLAG_SET(&opts, GIT_DIFF_BREAK_REWRITES) &&
1 0 FLAG_SET(&opts, GIT_DIFF_BREAK_REWRITES) &&
1107 11 0 if (sigcache) {
1108 50 11 for (t = 0; t < num_deltas * 2; ++t) {
1109 11 39 if (sigcache[t] != NULL)
1115 11 0 if (!given_opts || !given_opts->metric)
11 0 if (!given_opts || !given_opts->metric)