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

Function show_patch_diff

combine-diff.c:1013–1226  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1011}
1012
1013static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
1014 int working_tree_file,
1015 struct rev_info *rev)
1016{
1017 struct diff_options *opt = &rev->diffopt;
1018 unsigned long result_size, cnt, lno;
1019 int result_deleted = 0;
1020 char *result, *cp;
1021 struct sline *sline; /* survived lines */
1022 int mode_differs = 0;
1023 int i, show_hunks;
1024 mmfile_t result_file;
1025 struct userdiff_driver *userdiff;
1026 struct userdiff_driver *textconv = NULL;
1027 int is_binary;
1028 const char *line_prefix = diff_line_prefix(opt);
1029
1030 context = opt->context;
1031 userdiff = userdiff_find_by_path(opt->repo->index, elem->path);
1032 if (!userdiff)
1033 userdiff = userdiff_find_by_name("default");
1034 if (opt->flags.allow_textconv)
1035 textconv = userdiff_get_textconv(opt->repo, userdiff);
1036
1037 /* Read the result of merge first */
1038 if (!working_tree_file)
1039 result = grab_blob(opt->repo, &elem->oid, elem->mode, &result_size,
1040 textconv, elem->path);
1041 else {
1042 /* Used by diff-tree to read from the working tree */
1043 struct stat st;
1044 int fd = -1;
1045
1046 if (lstat(elem->path, &st) < 0)
1047 goto deleted_file;
1048
1049 if (S_ISLNK(st.st_mode)) {
1050 struct strbuf buf = STRBUF_INIT;
1051
1052 if (strbuf_readlink(&buf, elem->path, st.st_size) < 0) {
1053 error_errno("readlink(%s)", elem->path);
1054 return;
1055 }
1056 result_size = buf.len;
1057 result = strbuf_detach(&buf, NULL);
1058 elem->mode = canon_mode(st.st_mode);
1059 } else if (S_ISDIR(st.st_mode)) {
1060 struct object_id oid;
1061 if (repo_resolve_gitlink_ref(the_repository, elem->path,
1062 "HEAD", &oid) < 0)
1063 result = grab_blob(opt->repo, &elem->oid,
1064 elem->mode, &result_size,
1065 NULL, NULL);
1066 else
1067 result = grab_blob(opt->repo, &oid, elem->mode,
1068 &result_size, NULL, NULL);
1069 } else if (textconv) {
1070 struct diff_filespec *df = alloc_filespec(elem->path);

Callers 2

show_combined_diffFunction · 0.85
diff_tree_combinedFunction · 0.85

Calls 15

diff_line_prefixFunction · 0.85
userdiff_find_by_pathFunction · 0.85
userdiff_find_by_nameFunction · 0.85
userdiff_get_textconvFunction · 0.85
grab_blobFunction · 0.85
strbuf_readlinkFunction · 0.85
error_errnoFunction · 0.85
strbuf_detachFunction · 0.85
canon_modeFunction · 0.85
repo_resolve_gitlink_refFunction · 0.85
alloc_filespecFunction · 0.85
fill_filespecFunction · 0.85

Tested by

no test coverage detected