A `.keep` file in the `objects/pack` directory acts as a lock to ensure that operations like `git gc` do not clean up `.idx` files while a fetch is being performed. It is safe to remove the `.keep` file once a fetch has completed and a reference points to a given object in the packfile. To ensure this happens in `radicle-fetch`, a newtype `Keepfile` is introduced. It uses special `Drop` semantics by attempting to remove the file when the object is dropped -- logging a warning if it fails to do so. `FetchState` is augmented to keep a set of the `Keepfile`s. This ensures that when the fetch completes, either successfully or with a failure, when `FetchState` is dropped then so are the `Keepfile`s. We ensure that the expected behaviour of removing the `.keep`files occurs by adding a check in `e2e::test_replication` to check Alice's repository's packs. Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com> X-Clacks-Overhead: GNU Terry Pratchett |
||
|---|---|---|
| .. | ||
| refs | ||
| repository | ||
| mem.rs | ||
| packfile.rs | ||
| refs.rs | ||
| repository.rs | ||