radicle-heartwood-lfs/radicle-node
Fintan Halpenny 694bd345d9
node: use ls-remote when in fetching mode
Given the scenario of 3 peers, A, B, and C each having a project R. If
peer A has B's fork, but C does not, then when peer A attempts to
fetch from C the fetch will be rejected since Git will fail when a
refspec that is asked for does not exist on the remote side.

To avoid this, the fetch logic is changed so that the client first calls
ls-remote to the remote side, which results in the references that the
remote has which the client is interested in. The follow-up fetch then
uses these refs as the refspecs -- which should succeed unless there
was a race for a deletion on the remote side.

The rest of the verification logic stays the same, so the storage
should still be in a working state before transferring from the staged
repository to the production repository.

Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com>
X-Clacks-Overhead: GNU Terry Pratchett
2023-04-28 14:26:47 +02:00
..
src node: use ls-remote when in fetching mode 2023-04-28 14:26:47 +02:00
Cargo.toml Update `netservices` to 0.2.2 2023-04-17 15:53:31 +02:00
Dockerfile Build container images for deployment 2022-12-14 17:15:40 +01:00
radicle-node.service node: systemd file 2023-03-31 15:48:32 +02:00