mirror of
https://github.com/rust-lang/cargo
synced 2024-10-14 03:32:39 +00:00
4429f4efa1
Try a lot harder to recover corrupt git repos We've received a lot of intermittent bug reports historically about corrupt git repositories. These inevitably happens as Cargo is ctrl-c'd or for whatever other reason, and to provide a better user experience Cargo strives to automatically handle these situations by blowing away the old checkout for a new update. This commit adds a new test which attempts to pathologically corrupt a git database and checkout in an attempt to expose bugs in Cargo. Sure enough there were some more locations that we needed to handle gracefully for corrupt git checkouts. Notable inclusions were: * The `fetch` operation in libgit2 would fail due to corrupt references. This starts by adding an explicit whitelist for classes of errors coming out of `fetch` to auto-retry by blowing away the repository. We need to be super careful here as network errors commonly come out of this function and we don't want to too aggressively re-clone. * After a `fetch` succeeded a repository could fail to actual resolve a git reference to the actual revision we want. This indicated that we indeed needed to blow everything away and re-clone entirely again. * When creating a checkout from a database the `reset` operation might fail due to a corrupt local database of the checkout itself. If this happens we needed to just blow it away and try again. There's likely more lurking situations where we need to re-clone but I figure we can discover those over time. |
||
---|---|---|
.. | ||
testsuite |