| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
When trying to determine if we can safely overwrite an existing workdir item, we may need to calculate the oid for the workdir item to determine if its identical to the old side (and eligible for removal). We previously did this regardless of the type of entry in the workdir; if it was a directory, we would open(2) it and then try to read(2). The read(2) of a directory fails on many platforms, so we would treat it as if it were unmodified and continue to perform the checkout. On FreeBSD, you _can_ read(2) a directory, so this pattern failed. We would calculate an oid from the data read and determine that the directory was modified and would therefore generate a checkout conflict. This reliance on read(2) is silly (and was most likely accidentally giving us the behavior we wanted), we should be explicit about the directory test.
|
|
||
| /* if the workdir item is a directory, it cannot be a modified file */ | ||
| if (S_ISDIR(wditem->mode)) | ||
| return false; |
There was a problem hiding this comment.
Shouldn't we consider this as modified if !S_ISDIR(baseitem->mode)? E.g. something like
if (S_ISDIR(wditem->mode))
return !S_ISDIR(baseitem->mode);
Sorry, something went wrong.
There was a problem hiding this comment.
That can't happen - we only process files in the checkout loop, not folders. (We'll make intermediate folders if we need them.) So we'll never see a baseitem (or newitem) that is a folder.
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
When trying to determine if we can safely overwrite an existing workdir item, we may need to calculate the oid for the workdir item to determine if its identical to the old side (and eligible for removal).
We previously did this regardless of the type of entry in the workdir; if it was a directory, we would open(2) it and then try to read(2). The read(2) of a directory fails on many platforms, so we would treat it as if it were unmodified and continue to perform the checkout.
On FreeBSD, you can read(2) a directory, so this pattern failed. We would calculate an oid from the data read and determine that the directory was modified and would therefore generate a checkout conflict.
This reliance on read(2) is silly (and was most likely accidentally giving us the behavior we wanted), we should be explicit about the directory test.
Fixes #3911