| 661 | } |
| 662 | |
| 663 | int apply_pseudo_merges_for_commit(const struct pseudo_merge_map *pm, |
| 664 | struct bitmap *result, |
| 665 | struct commit *commit, uint32_t commit_pos) |
| 666 | { |
| 667 | struct pseudo_merge *merge; |
| 668 | struct pseudo_merge_commit merge_commit; |
| 669 | int ret = 0; |
| 670 | |
| 671 | if (!find_pseudo_merge(pm, commit_pos, &merge_commit)) |
| 672 | return 0; |
| 673 | |
| 674 | if (merge_commit.pseudo_merge_ofs & ((uint64_t)1<<63)) { |
| 675 | struct pseudo_merge_commit_ext ext = { 0 }; |
| 676 | off_t ofs = merge_commit.pseudo_merge_ofs & ~((uint64_t)1<<63); |
| 677 | uint32_t i; |
| 678 | |
| 679 | if (pseudo_merge_ext_at(pm, &ext, ofs) < 0) { |
| 680 | warning(_("could not read extended pseudo-merge table " |
| 681 | "for commit %s"), |
| 682 | oid_to_hex(&commit->object.oid)); |
| 683 | return ret; |
| 684 | } |
| 685 | |
| 686 | for (i = 0; i < ext.nr; i++) { |
| 687 | if (nth_pseudo_merge_ext(pm, &ext, &merge_commit, i) < 0) |
| 688 | return ret; |
| 689 | |
| 690 | merge = pseudo_merge_at(pm, &commit->object.oid, |
| 691 | merge_commit.pseudo_merge_ofs); |
| 692 | |
| 693 | if (!merge) |
| 694 | return ret; |
| 695 | |
| 696 | if (apply_pseudo_merge(pm, merge, result, NULL)) |
| 697 | ret++; |
| 698 | } |
| 699 | } else { |
| 700 | merge = pseudo_merge_at(pm, &commit->object.oid, |
| 701 | merge_commit.pseudo_merge_ofs); |
| 702 | |
| 703 | if (!merge) |
| 704 | return ret; |
| 705 | |
| 706 | if (apply_pseudo_merge(pm, merge, result, NULL)) |
| 707 | ret++; |
| 708 | } |
| 709 | |
| 710 | if (ret) |
| 711 | cascade_pseudo_merges(pm, result, NULL); |
| 712 | |
| 713 | return ret; |
| 714 | } |
| 715 | |
| 716 | int cascade_pseudo_merges(const struct pseudo_merge_map *pm, |
| 717 | struct bitmap *result, |
no test coverage detected