fork of radicle with Git LFS support, backed by IPFS
Go to file
Fintan Halpenny db0ceddf6b
node: multistep fetching logic
The previous fetching logic had some pitfalls regarding its logic:

* Fetched 'rad' references could end up not being verifiable and leaving
  the storage in a corrupt state
* Forced pushes would be prohibited, since they would be rejected by
  the client side due to the refspecs being used.

The new approach is to stage a fetch in 2 steps. The first step is to
fetch the relevant `rad/id` and `rad/sigrefs` for verification. For
all remotes that are verified, fetch all references listed in their
respective `rad/sigrefs`, using the `+` marker in the refspec,
allowing to update for any force pushes -- note that this becomes a
safe operation since the `sigrefs` are signed by the remote that
created them.

To prevent unverifiable 'rad' references from polluting storage, all
fetch negotiations are done in a staging repository set up in a
temporary directory. All successful fetches are then transferred,
using the 'file://' protocol, from the temporary directory into the
radicle storage.

Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com>
X-Clacks-Overhead: GNU Terry Pratchett
2023-03-31 12:19:36 +01:00
.github/workflows cli: add workflow example with two peers 2023-03-20 18:27:58 +01:00
.nix Rust 1.67 2023-02-04 19:30:29 +01:00
radicle node: multistep fetching logic 2023-03-31 12:19:36 +01:00
radicle-cli node: Fix routing table update on refs 2023-03-30 10:24:09 +02:00
radicle-cli-test cli-test: Improve testing framework logging 2023-03-13 11:38:33 +01:00
radicle-cob cob: Use `EntryId` as the operation identifier 2023-03-09 17:08:56 +01:00
radicle-crdt crdt: Implement `GSet` type, based on `GMap` 2023-02-27 17:11:48 +01:00
radicle-crypto crypto: add PublicKey::to_namespace 2023-03-30 15:53:27 +01:00
radicle-dag Rust 1.67 2023-02-04 19:30:29 +01:00
radicle-httpd Rename `patch::State::Proposed to `patch::State::Open` 2023-03-30 10:46:57 +02:00
radicle-node node: multistep fetching logic 2023-03-31 12:19:36 +01:00
radicle-remote-helper remote-helper: Tell the user we're announcing refs 2023-03-06 15:39:35 +01:00
radicle-ssh Update to Rust 1.65 2022-11-05 12:47:26 +01:00
radicle-term term: Add border support for tables 2023-03-27 17:46:32 +02:00
radicle-tools cli: Improve `patch` command 2023-03-08 20:23:49 +01:00
radicle-tui tui: Fix clippy issue 2023-03-21 13:19:38 +01:00
.dockerignore Dockerize services 2022-12-14 17:15:40 +01:00
.env.seed ci: Add `--tracking-scope all` 2023-03-16 12:29:35 +01:00
.gitignore Initial commit 2022-09-13 10:13:13 +02:00
ARCHITECTURE.md Flesh out `HACKING.md` 2023-03-16 13:06:38 +01:00
CONTRIBUTING.md Flesh out `CONTRIBUTING.md` 2023-03-13 15:10:53 +01:00
Cargo.lock tui: Implement basic application 2023-03-20 16:27:42 +01:00
Cargo.toml tui: Add basic framework 2023-03-20 16:27:42 +01:00
DCO Add licenses and contributor information 2022-11-16 12:26:12 +01:00
HACKING.md Flesh out `HACKING.md` 2023-03-16 13:06:38 +01:00
LICENSE-APACHE Add licenses and contributor information 2022-11-16 12:26:12 +01:00
LICENSE-MIT Add licenses and contributor information 2022-11-16 12:26:12 +01:00
README.md Flesh out `README` 2023-03-13 12:19:20 +01:00
build.rs Rust 1.67 2023-02-04 19:30:29 +01:00
docker-compose.yml ci: Add git tracing to node deployment 2023-03-16 12:30:15 +01:00
rust-toolchain Rust 1.67 2023-02-04 19:30:29 +01:00

README.md

❤️🪵

Radicle Heartwood Protocol & Stack

Heartwood is the third iteration of the Radicle Protocol, a powerful peer-to-peer code collaboration and publishing stack. The repository contains a full implemention of Heartwood, complete with a user-friendly command-line interface (rad) and network daemon (radicle-node).

Radicle was designed to be a secure, decentralized and powerful alternative to code forges such as GitHub and GitLab that preserves user sovereignty and freedom.

Installation

Requirements

  • Linux or Unix based operating system.
  • Git 2.34 or later
  • OpenSSH 9.1 or later with ssh-agent

📦 From source

Requires the Rust toolchain.

You can install the Radicle stack from source, by running the following commands from inside this repository:

cargo install --path radicle-cli --force --locked
cargo install --path radicle-node --force --locked
cargo install --path radicle-remote-helper --force --locked

Or directly from our seed node:

cargo install --force --locked --git https://seed.radicle.xyz/z3gqcJUoA1n9HaHKufZs5FCSGazv5.git \
    radicle-cli radicle-node radicle-remote-helper

Contributing

See CONTRIBUTING.md and HACKING.md for an introduction to contributing to Radicle.

License

Radicle is distributed under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE and LICENSE-MIT for details.