mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-07 23:19:28 +00:00
Improve robustness of diff rename detection
Under some strange circumstances, diffs can end up listing files that we can't actually open successfully. Instead of aborting the git_diff_find_similar, this makes it so that those files just won't be considered as valid rename/copy targets instead.
This commit is contained in:
parent
dcb0f7c061
commit
09fae31d45
@ -386,8 +386,12 @@ static int similarity_calc(
|
||||
|
||||
/* TODO: apply wd-to-odb filters to file data if necessary */
|
||||
|
||||
if (!(error = git_buf_joinpath(
|
||||
&path, git_repository_workdir(diff->repo), file->path)))
|
||||
if ((error = git_buf_joinpath(
|
||||
&path, git_repository_workdir(diff->repo), file->path)) < 0)
|
||||
return error;
|
||||
|
||||
/* if path is not a regular file, just skip this item */
|
||||
if (git_path_isfile(path.ptr))
|
||||
error = opts->metric->file_signature(
|
||||
&cache[file_idx], file, path.ptr, opts->metric->payload);
|
||||
|
||||
@ -398,8 +402,11 @@ static int similarity_calc(
|
||||
|
||||
/* TODO: add max size threshold a la diff? */
|
||||
|
||||
if ((error = git_blob_lookup(&blob, diff->repo, &file->oid)) < 0)
|
||||
return error;
|
||||
if (git_blob_lookup(&blob, diff->repo, &file->oid) < 0) {
|
||||
/* if lookup fails, just skip this item in similarity calc */
|
||||
giterr_clear();
|
||||
return 0;
|
||||
}
|
||||
|
||||
blobsize = git_blob_rawsize(blob);
|
||||
if (!git__is_sizet(blobsize)) /* ? what to do ? */
|
||||
|
Loading…
Reference in New Issue
Block a user