Lines Matching refs:fc

20 static bool diff_file_content_binary_by_size(git_diff_file_content *fc)  in diff_file_content_binary_by_size()  argument
23 if ((fc->file->flags & DIFF_FLAGS_KNOWN_BINARY) == 0 && in diff_file_content_binary_by_size()
24 fc->opts_max_size > 0 && in diff_file_content_binary_by_size()
25 fc->file->size > fc->opts_max_size) in diff_file_content_binary_by_size()
26 fc->file->flags |= GIT_DIFF_FLAG_BINARY; in diff_file_content_binary_by_size()
28 return ((fc->file->flags & GIT_DIFF_FLAG_BINARY) != 0); in diff_file_content_binary_by_size()
31 static void diff_file_content_binary_by_content(git_diff_file_content *fc) in diff_file_content_binary_by_content() argument
33 if ((fc->file->flags & DIFF_FLAGS_KNOWN_BINARY) != 0) in diff_file_content_binary_by_content()
37 fc->driver, fc->map.data, fc->map.len)) { in diff_file_content_binary_by_content()
38 case 0: fc->file->flags |= GIT_DIFF_FLAG_NOT_BINARY; break; in diff_file_content_binary_by_content()
39 case 1: fc->file->flags |= GIT_DIFF_FLAG_BINARY; break; in diff_file_content_binary_by_content()
45 git_diff_file_content *fc, const git_diff_options *opts) in diff_file_content_init_common() argument
47 fc->opts_flags = opts ? opts->flags : GIT_DIFF_NORMAL; in diff_file_content_init_common()
50 fc->opts_max_size = opts->max_size ? in diff_file_content_init_common()
53 if (fc->src == GIT_ITERATOR_EMPTY) in diff_file_content_init_common()
54 fc->src = GIT_ITERATOR_TREE; in diff_file_content_init_common()
56 if (!fc->driver && in diff_file_content_init_common()
57 git_diff_driver_lookup(&fc->driver, fc->repo, in diff_file_content_init_common()
58 NULL, fc->file->path) < 0) in diff_file_content_init_common()
62 git_diff_driver_update_options(&fc->opts_flags, fc->driver); in diff_file_content_init_common()
65 if ((size_t)fc->file->size != fc->file->size) in diff_file_content_init_common()
66 fc->file->flags |= GIT_DIFF_FLAG_BINARY; in diff_file_content_init_common()
68 else if (fc->opts_flags & GIT_DIFF_FORCE_TEXT) { in diff_file_content_init_common()
69 fc->file->flags &= ~GIT_DIFF_FLAG_BINARY; in diff_file_content_init_common()
70 fc->file->flags |= GIT_DIFF_FLAG_NOT_BINARY; in diff_file_content_init_common()
73 else if (fc->opts_flags & GIT_DIFF_FORCE_BINARY) { in diff_file_content_init_common()
74 fc->file->flags &= ~GIT_DIFF_FLAG_NOT_BINARY; in diff_file_content_init_common()
75 fc->file->flags |= GIT_DIFF_FLAG_BINARY; in diff_file_content_init_common()
78 diff_file_content_binary_by_size(fc); in diff_file_content_init_common()
80 if ((fc->flags & GIT_DIFF_FLAG__NO_DATA) != 0) { in diff_file_content_init_common()
81 fc->flags |= GIT_DIFF_FLAG__LOADED; in diff_file_content_init_common()
82 fc->map.len = 0; in diff_file_content_init_common()
83 fc->map.data = ""; in diff_file_content_init_common()
86 if ((fc->flags & GIT_DIFF_FLAG__LOADED) != 0) in diff_file_content_init_common()
87 diff_file_content_binary_by_content(fc); in diff_file_content_init_common()
93 git_diff_file_content *fc, in git_diff_file_content__init_from_diff() argument
100 memset(fc, 0, sizeof(*fc)); in git_diff_file_content__init_from_diff()
101 fc->repo = diff->repo; in git_diff_file_content__init_from_diff()
102 fc->file = use_old ? &delta->old_file : &delta->new_file; in git_diff_file_content__init_from_diff()
103 fc->src = use_old ? diff->old_src : diff->new_src; in git_diff_file_content__init_from_diff()
105 if (git_diff_driver_lookup(&fc->driver, fc->repo, in git_diff_file_content__init_from_diff()
106 &diff->attrsession, fc->file->path) < 0) in git_diff_file_content__init_from_diff()
129 fc->flags |= GIT_DIFF_FLAG__NO_DATA; in git_diff_file_content__init_from_diff()
131 return diff_file_content_init_common(fc, &diff->opts); in git_diff_file_content__init_from_diff()
135 git_diff_file_content *fc, in git_diff_file_content__init_from_src() argument
141 memset(fc, 0, sizeof(*fc)); in git_diff_file_content__init_from_src()
142 fc->repo = repo; in git_diff_file_content__init_from_src()
143 fc->file = as_file; in git_diff_file_content__init_from_src()
146 fc->flags |= GIT_DIFF_FLAG__NO_DATA; in git_diff_file_content__init_from_src()
148 fc->flags |= GIT_DIFF_FLAG__LOADED; in git_diff_file_content__init_from_src()
149 fc->file->flags |= GIT_DIFF_FLAG_VALID_ID; in git_diff_file_content__init_from_src()
150 fc->file->mode = GIT_FILEMODE_BLOB; in git_diff_file_content__init_from_src()
153 git_blob_dup((git_blob **)&fc->blob, (git_blob *) src->blob); in git_diff_file_content__init_from_src()
154 fc->file->size = git_blob_rawsize(src->blob); in git_diff_file_content__init_from_src()
155 git_oid_cpy(&fc->file->id, git_blob_id(src->blob)); in git_diff_file_content__init_from_src()
156 fc->file->id_abbrev = GIT_OID_HEXSZ; in git_diff_file_content__init_from_src()
158 fc->map.len = (size_t)fc->file->size; in git_diff_file_content__init_from_src()
159 fc->map.data = (char *)git_blob_rawcontent(src->blob); in git_diff_file_content__init_from_src()
161 fc->flags |= GIT_DIFF_FLAG__FREE_BLOB; in git_diff_file_content__init_from_src()
164 if ((error = git_odb_hash(&fc->file->id, src->buf, src->buflen, GIT_OBJECT_BLOB)) < 0) in git_diff_file_content__init_from_src()
166 fc->file->size = src->buflen; in git_diff_file_content__init_from_src()
167 fc->file->id_abbrev = GIT_OID_HEXSZ; in git_diff_file_content__init_from_src()
169 fc->map.len = src->buflen; in git_diff_file_content__init_from_src()
170 fc->map.data = (char *)src->buf; in git_diff_file_content__init_from_src()
174 return diff_file_content_init_common(fc, opts); in git_diff_file_content__init_from_src()
178 git_diff_file_content *fc, bool check_status) in diff_file_content_commit_to_str() argument
190 if ((error = git_submodule_lookup(&sm, fc->repo, fc->file->path)) < 0) { in diff_file_content_commit_to_str()
199 …if ((error = git_submodule_status(&sm_status, fc->repo, fc->file->path, GIT_SUBMODULE_IGNORE_UNSPE… in diff_file_content_commit_to_str()
205 if ((fc->file->flags & GIT_DIFF_FLAG_VALID_ID) == 0 && in diff_file_content_commit_to_str()
209 git_oid_cpy(&fc->file->id, sm_head); in diff_file_content_commit_to_str()
210 fc->file->flags |= GIT_DIFF_FLAG_VALID_ID; in diff_file_content_commit_to_str()
219 git_oid_tostr(oid, sizeof(oid), &fc->file->id); in diff_file_content_commit_to_str()
223 fc->map.len = git_buf_len(&content); in diff_file_content_commit_to_str()
224 fc->map.data = git_buf_detach(&content); in diff_file_content_commit_to_str()
225 fc->flags |= GIT_DIFF_FLAG__FREE_DATA; in diff_file_content_commit_to_str()
231 git_diff_file_content *fc, in diff_file_content_load_blob() argument
237 if (git_oid_is_zero(&fc->file->id)) in diff_file_content_load_blob()
240 if (fc->file->mode == GIT_FILEMODE_COMMIT) in diff_file_content_load_blob()
241 return diff_file_content_commit_to_str(fc, false); in diff_file_content_load_blob()
244 if (!fc->file->size) { in diff_file_content_load_blob()
246 fc->file, &odb_obj, fc->repo)) < 0) in diff_file_content_load_blob()
251 diff_file_content_binary_by_size(fc)) in diff_file_content_load_blob()
256 (git_object **)&fc->blob, fc->repo, odb_obj, GIT_OBJECT_BLOB); in diff_file_content_load_blob()
260 (git_blob **)&fc->blob, fc->repo, &fc->file->id); in diff_file_content_load_blob()
264 fc->flags |= GIT_DIFF_FLAG__FREE_BLOB; in diff_file_content_load_blob()
265 fc->map.data = (void *)git_blob_rawcontent(fc->blob); in diff_file_content_load_blob()
266 fc->map.len = (size_t)git_blob_rawsize(fc->blob); in diff_file_content_load_blob()
273 git_diff_file_content *fc, git_buf *path) in diff_file_content_load_workdir_symlink_fake() argument
281 fc->map.len = git_buf_len(&target); in diff_file_content_load_workdir_symlink_fake()
282 fc->map.data = git_buf_detach(&target); in diff_file_content_load_workdir_symlink_fake()
283 fc->flags |= GIT_DIFF_FLAG__FREE_DATA; in diff_file_content_load_workdir_symlink_fake()
290 git_diff_file_content *fc, git_buf *path) in diff_file_content_load_workdir_symlink() argument
296 &symlink_supported, fc->repo, GIT_CONFIGMAP_SYMLINKS)) < 0) in diff_file_content_load_workdir_symlink()
300 return diff_file_content_load_workdir_symlink_fake(fc, path); in diff_file_content_load_workdir_symlink()
305 alloc_len = (ssize_t)(fc->file->size * 2) + 1; in diff_file_content_load_workdir_symlink()
307 fc->map.data = git__calloc(alloc_len, sizeof(char)); in diff_file_content_load_workdir_symlink()
308 GIT_ERROR_CHECK_ALLOC(fc->map.data); in diff_file_content_load_workdir_symlink()
310 fc->flags |= GIT_DIFF_FLAG__FREE_DATA; in diff_file_content_load_workdir_symlink()
312 read_len = p_readlink(git_buf_cstr(path), fc->map.data, alloc_len); in diff_file_content_load_workdir_symlink()
314 git_error_set(GIT_ERROR_OS, "failed to read symlink '%s'", fc->file->path); in diff_file_content_load_workdir_symlink()
318 fc->map.len = read_len; in diff_file_content_load_workdir_symlink()
323 git_diff_file_content *fc, in diff_file_content_load_workdir_file() argument
335 if (!fc->file->size) in diff_file_content_load_workdir_file()
336 error = git_futils_filesize(&fc->file->size, fd); in diff_file_content_load_workdir_file()
338 if (error < 0 || !fc->file->size) in diff_file_content_load_workdir_file()
342 diff_file_content_binary_by_size(fc)) in diff_file_content_load_workdir_file()
346 &fl, fc->repo, NULL, fc->file->path, in diff_file_content_load_workdir_file()
353 &fc->map, fd, 0, (size_t)fc->file->size))) { in diff_file_content_load_workdir_file()
354 fc->flags |= GIT_DIFF_FLAG__UNMAP_DATA; in diff_file_content_load_workdir_file()
362 if (!(error = git_futils_readbuffer_fd(&raw, fd, (size_t)fc->file->size))) { in diff_file_content_load_workdir_file()
368 fc->map.len = out.size; in diff_file_content_load_workdir_file()
369 fc->map.data = out.ptr; in diff_file_content_load_workdir_file()
370 fc->flags |= GIT_DIFF_FLAG__FREE_DATA; in diff_file_content_load_workdir_file()
382 git_diff_file_content *fc, in diff_file_content_load_workdir() argument
388 if (fc->file->mode == GIT_FILEMODE_COMMIT) in diff_file_content_load_workdir()
389 return diff_file_content_commit_to_str(fc, true); in diff_file_content_load_workdir()
391 if (fc->file->mode == GIT_FILEMODE_TREE) in diff_file_content_load_workdir()
394 if (git_repository_workdir_path(&path, fc->repo, fc->file->path) < 0) in diff_file_content_load_workdir()
397 if (S_ISLNK(fc->file->mode)) in diff_file_content_load_workdir()
398 error = diff_file_content_load_workdir_symlink(fc, &path); in diff_file_content_load_workdir()
400 error = diff_file_content_load_workdir_file(fc, &path, diff_opts); in diff_file_content_load_workdir()
403 if (!error && (fc->file->flags & GIT_DIFF_FLAG_VALID_ID) == 0) { in diff_file_content_load_workdir()
405 &fc->file->id, fc->map.data, fc->map.len, GIT_OBJECT_BLOB); in diff_file_content_load_workdir()
406 fc->file->flags |= GIT_DIFF_FLAG_VALID_ID; in diff_file_content_load_workdir()
414 git_diff_file_content *fc, in git_diff_file_content__load() argument
419 if ((fc->flags & GIT_DIFF_FLAG__LOADED) != 0) in git_diff_file_content__load()
422 if ((fc->file->flags & GIT_DIFF_FLAG_BINARY) != 0 && in git_diff_file_content__load()
426 if (fc->src == GIT_ITERATOR_WORKDIR) in git_diff_file_content__load()
427 error = diff_file_content_load_workdir(fc, diff_opts); in git_diff_file_content__load()
429 error = diff_file_content_load_blob(fc, diff_opts); in git_diff_file_content__load()
433 fc->flags |= GIT_DIFF_FLAG__LOADED; in git_diff_file_content__load()
435 diff_file_content_binary_by_content(fc); in git_diff_file_content__load()
440 void git_diff_file_content__unload(git_diff_file_content *fc) in git_diff_file_content__unload() argument
442 if ((fc->flags & GIT_DIFF_FLAG__LOADED) == 0) in git_diff_file_content__unload()
445 if (fc->flags & GIT_DIFF_FLAG__FREE_DATA) { in git_diff_file_content__unload()
446 git__free(fc->map.data); in git_diff_file_content__unload()
447 fc->map.data = ""; in git_diff_file_content__unload()
448 fc->map.len = 0; in git_diff_file_content__unload()
449 fc->flags &= ~GIT_DIFF_FLAG__FREE_DATA; in git_diff_file_content__unload()
451 else if (fc->flags & GIT_DIFF_FLAG__UNMAP_DATA) { in git_diff_file_content__unload()
452 git_futils_mmap_free(&fc->map); in git_diff_file_content__unload()
453 fc->map.data = ""; in git_diff_file_content__unload()
454 fc->map.len = 0; in git_diff_file_content__unload()
455 fc->flags &= ~GIT_DIFF_FLAG__UNMAP_DATA; in git_diff_file_content__unload()
458 if (fc->flags & GIT_DIFF_FLAG__FREE_BLOB) { in git_diff_file_content__unload()
459 git_blob_free((git_blob *)fc->blob); in git_diff_file_content__unload()
460 fc->blob = NULL; in git_diff_file_content__unload()
461 fc->flags &= ~GIT_DIFF_FLAG__FREE_BLOB; in git_diff_file_content__unload()
464 fc->flags &= ~GIT_DIFF_FLAG__LOADED; in git_diff_file_content__unload()
467 void git_diff_file_content__clear(git_diff_file_content *fc) in git_diff_file_content__clear() argument
469 git_diff_file_content__unload(fc); in git_diff_file_content__clear()