MCPcopy Index your code
hub / github.com/git/git / process_diff_filepair

Function process_diff_filepair

line-log.c:891–946  ·  view source on GitHub ↗

* Unlike most other functions, this destructively operates on * 'range'. */

Source from the content-addressed store, hash-verified

889 * 'range'.
890 */
891static int process_diff_filepair(struct rev_info *rev,
892 struct diff_filepair *pair,
893 struct line_log_data *range,
894 struct diff_ranges **diff_out)
895{
896 struct line_log_data *rg = range;
897 struct range_set tmp;
898 struct diff_ranges diff;
899 mmfile_t file_parent, file_target;
900 char *parent_data_to_free = NULL;
901
902 assert(pair->two->path);
903 while (rg) {
904 assert(rg->path);
905 if (!strcmp(rg->path, pair->two->path))
906 break;
907 rg = rg->next;
908 }
909
910 if (!rg)
911 return 0;
912 if (rg->ranges.nr == 0)
913 return 0;
914
915 assert(pair->two->oid_valid);
916 diff_populate_filespec(rev->diffopt.repo, pair->two, NULL);
917 file_target.ptr = pair->two->data;
918 file_target.size = pair->two->size;
919
920 if (pair->one->oid_valid) {
921 diff_populate_filespec(rev->diffopt.repo, pair->one, NULL);
922 file_parent.ptr = pair->one->data;
923 file_parent.size = pair->one->size;
924 } else {
925 file_parent.ptr = parent_data_to_free = xstrdup("");
926 file_parent.size = 0;
927 }
928
929 diff_ranges_init(&diff);
930 if (collect_diff(&file_parent, &file_target, &diff))
931 die("unable to generate diff for %s", pair->one->path);
932
933 /* NEEDSWORK should apply some heuristics to prevent mismatches */
934 free(rg->path);
935 rg->path = xstrdup(pair->one->path);
936
937 range_set_init(&tmp, 0);
938 range_set_map_across_diff(&tmp, &rg->ranges, &diff, diff_out);
939 range_set_release(&rg->ranges);
940 range_set_move(&rg->ranges, &tmp);
941
942 diff_ranges_release(&diff);
943
944 free(parent_data_to_free);
945 return ((*diff_out)->parent.nr > 0);
946}
947
948static struct diff_filepair *diff_filepair_dup(struct diff_filepair *pair)

Callers 1

process_all_filesFunction · 0.85

Calls 10

diff_populate_filespecFunction · 0.85
xstrdupFunction · 0.85
diff_ranges_initFunction · 0.85
collect_diffFunction · 0.85
range_set_initFunction · 0.85
range_set_releaseFunction · 0.85
range_set_moveFunction · 0.85
diff_ranges_releaseFunction · 0.85
dieFunction · 0.70

Tested by

no test coverage detected