Commit Graph
762 Commits
Author SHA1 Message Date
cloudhead 123f7eb6bb Update radicle crate to 0.12.0 2024-07-18 16:22:14 +02:00
cloudhead 297646412a cli: Use pretty diffs for code review
We use the pretty diff renderer for code review.
2024-07-12 16:39:23 +02:00
cloudhead 823ece875e cli: Improve pretty diff printing
Refactor, cleanup, improve tests etc.
2024-07-12 16:36:04 +02:00
Alexis Sellier 795ee35f37 cli: Output tree hash after review update 2024-07-11 14:17:17 +02:00
Alexis Sellier 54551b1174 cli: Make sure to configure checkouts properly
We were configure correctly on `rad init`, but not `rad checkout`.
2024-07-09 13:56:10 +02:00
Alexis Sellier 1388601cb6 cli: Fix hunk line ranges
Since the range has a non-exclusive end, we have to add one to it.
2024-07-09 13:46:49 +02:00
Alexis Sellier 605388f850 cli: Implement comment parsing out of diff hunks
Extracts comments out of a string where the diff is quoted with `>` and the
comments are not.
2024-07-09 13:46:44 +02:00
Alexis Sellier d221095980 cli: Add --unified flag to rad diff help 2024-07-07 16:57:54 +02:00
Fintan Halpenny fa19105f2f cli: add un/resolve for patch review comments
Patch review comments can be resolved and unresolved as part of the Patch COB
API. This functionality was missing from the `rad patch command`.

Add a subcommand `rad patch resolve` which can resolve a review comment, and
unresolve given the `--undo` flag.

Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com>
X-Clacks-Overhead: GNU Terry Pratchett
2024-07-03 20:21:46 +02:00
Fintan Halpenny 84aaf9efd0 remote-helper: relax the quorum checks
The rules for checking the quorum of the remote helper, when pushing to the
canonical branch, can prevent the operator from even attempting to try converge
to a state of agreeance.

Instead, the checking of the quorum rules are relaxed. It is still the case that
if the peer is pushing a diverging commit while in a working state they are
warned and the push does not go through. However, there are two cases where it
is fine to force push a change:

1. When pushing a new tip, as a delegate, there is still a canonical tip and the
   new tip still converges with the history, i.e. it is equal to, behind, or
   ahead of another delegate tip.
2. If there is no quorum in the current state, for example there were multiple
   concurrent pushes, then the peer is free to continue to push to their default
   branch in attempt to converge with the other peers.

The example tests ensure that these cases are covered, while also preserving the
old behaviour.

Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com>
X-Clacks-Overhead: GNU Terry Pratchett
2024-07-03 15:14:58 +01:00
Fintan Halpenny b731dd1429 cli: test delegate convergence
If a delegate is in a diverged state from the canonical head, ensure
that they can easily reset to another delegate's head to converge
again.

Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com>
X-Clacks-Overhead: GNU Terry Pratchett
2024-07-03 15:08:26 +01:00
cloudhead f7d8f1b8da radicle: Distinguish seeding policy types
We create a separate type for the default seeding policy, that
serializes differently and is only used in the node configuraiton.
2024-06-26 11:57:04 +02:00
cloudhead 9edb633d98 cli: Add --from and other options to rad seed
Gives the same options to `rad seed` as `rad sync --fetch`.

Allows seeding and syncing from specific seeds in one command:

  rad seed <rid> --from <nid>

Useful for seeding private repos on public nodes.
2024-06-25 12:01:52 +02:00
cloudhead c94ce020a1 cli: Small fix to ddif parsing 2024-06-24 12:09:44 +02:00
cloudhead 6a9f11a1d9 cli: Honor --quiet flag in rad id update 2024-06-21 13:05:40 +02:00
Fintan Halpenny 80f1e6516c cli: idempotent rad id update
Instead of producing an error when there is no update during `rad id
update`, a message that the document is up to date is printed. The
command is considered is considered successful.

Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com>
X-Clacks-Overhead: GNU Terry Pratchett
2024-06-21 13:01:59 +02:00
cloudhead 42ffbf3fe6 cli: Make rad id update description optional
If a `--title` is specified, the description is optional, and will be
set to the empty string.
2024-06-20 17:33:48 +02:00
Fintan Halpenny f26be552c2 cli: improve rad id allow list UX
The previous implementation of using the `--allow` option in `rad id
update` would be an absolute list, rather than additive. That is, if
there were existing DIDs not passed in via `--allow` then they would
be remove.

Change this behaviour to check the existing value of the document's
allow list, and add to it if `--allow` is specified.

To enable the user to also remove a DID, the `--disallow` option is
also added.

The correct usage of these options is improved by checking the
validity of the `--visibility` option being used, the current state of
the repository's privacy, and the use of the `--allow` and
`--disallow` options.

Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com>
X-Clacks-Overhead: GNU Terry Pratchett
2024-06-20 17:22:38 +02:00
cloudhead 589c375624 build: Update env vars for build process
Use the standard `SOURCE_DATE_EPOCH` instead of `GIT_COMMIT_TIME`.
Set `GIT_HEAD` properly.
2024-06-20 10:47:50 +02:00
cloudhead 0a7a9c2945 cli: Fix disconnection timestamp
It should show since when we've been disconnected.
2024-06-19 20:37:36 +02:00
cloudhead a89a300390 node: Pass Alias by reference 2024-06-13 11:28:09 +02:00
cloudhead 76edc0c523 node: Add agent and version to node announcement
1. Adds a user-agent string to the node announcement. This lets us keep
   track of what software version everyone is running. Especially useful
   to see what percentage of the network has upgraded to a new release.

  For old nodes, this defaults to the string `/radicle/`.

  The user agent format is roughly based on BIP 0014.

2. Advertize protocol version in node announcement.

  By advertizing the protocol version, nodes can decide to only connect to
  peers with a compatible version. The default and current version is `1`.

  We bundle these two changes as they both modify the node announcement
  and node database.

3. Swap the order of the fields in announcements to make the message
   extensible.
2024-06-13 11:28:09 +02:00
cloudhead 345ca92380 cli: Clarify doc test example 2024-06-12 15:36:34 +02:00
cloudhead f0e2018ac5 cli: Correctly update inventory with seed commands
Make sure our inventory is up to date with the policy changes, as well
as when publishing private repositories.
2024-06-12 15:36:34 +02:00
cloudhead fc55d67929 cli: Add rad node inventory command
Prints the local node's inventory.
2024-06-12 15:36:34 +02:00
cloudhead 81f94d0cff cli: Move common functionality out of the CLI 2024-06-12 15:36:34 +02:00
cloudhead a6b5c723c8 node: Rename certain functions for clarity 2024-06-12 15:36:34 +02:00
cloudhead b24f8a30d6 node: Update inventory when unseeding
Previously, our advertized inventory was not always correct: when we
stopped seeding a repository, it was still advertised as part of our
inventory until node restart, because the `Storage` type doesn't have
access to seeding policies.

In this change, we remove the concept of inventory from `Storage` and
make the authoritative place for it the routing table in our database.

To make this work, we have to add our node to the database on profile
creation, to not violate the foreign key constraint on the routing
table. Hence, the tests are changed to include our alias which is now
always available.
2024-06-12 15:36:34 +02:00
Yorgos Saslisandfintohaps ce99f7e7e4 test: Fix backwards incompatibility with git 2.34
```
--- Expected
++++ actual:   stdout
   1      - branch 'master' set up to track 'origin/master'.
        1 + Branch 'master' set up to track remote branch 'master' from 'origin'.

Exit status: 0
```

As per @fintohaps' suggestion, this gets the tests passing again on git 2.34.

Co-Authored-By: fintohaps <fintan@monoidal.tech>
Signed-off-by: Yorgos Saslis <yorgos.work@proton.me>
2024-06-12 12:13:10 +02:00
cloudhead ab532be033 Bump crate versions
We bump the versions of the crates required to publish a new version of
`radicle-httpd` in preparation of moving it out of the repo.
2024-06-05 16:51:55 +02:00
Alexis Sellier 3ae7e305bd node: Simplify configuration
This is a change to the `config.json` file which removes certain options
that are best not touched and changes some options to make them easier
to work with.

1. We change the default journaling mode to "wal" and remove the config
   option.
2. We remove the option to set the peer connection "target", as it's not
   a good idea to set this to a different value, as it affects the
   network.
3. We combine seeding policy & scope, since there's no need to set the
   scope when the policy is "block". In that case, we always want to
   block "all" remotes. The new policy configuration has the following
   schema:

   { seedingPolicy: { default: "block" | "allow", scope?: "all" | "followed" } }

   The "scope" key is not used when "default" is set to "block".

4. We add an `extra` field to the node config for options that are not
   recognized. We use this to warn the user.
2024-06-04 14:08:15 +02:00
cloudhead cc7d0cf363 cli: Fix rad id show delegate output
We were not showing the correct list of delegates, we were always
showing the "current" list.
2024-06-04 11:10:29 +02:00
Lars Wirzenius db98daecca cli: make rad debug work without a profile
Reported-by: Lorenz Leutgeb
Signed-off-by: Lars Wirzenius <liw@liw.fi>
2024-05-24 17:04:22 +02:00
cloudhead 0834e0fc7d node: Implement staggered broadcast for gossip
We use the *staggered broadcast* technique when relaying gossip messages
to reduce message amplification. In our basic simulation, it brings
amplification down from 3.5 to 1.5.

The idea is simply to accumulate gossip messages and relay them after a fixed
interval of time. This has two effects:

1) Old messages that haven't been sent yet are replaced by newer ones,
   so only one message is sent after the delay.
2) Because nodes have their own intervals, messages are not all sent at
   the same time, which reduces the chance of messages crossing paths.

For now we only turn this on for inventory messages, since this is the
least likely to be noticed by users, and also the most problematic
currently.
2024-05-24 16:44:22 +02:00
cloudhead 61733ebb95 cli: Allow --inventory and --announce together
Allow these flags to be used together, since we are announcing the
inventory.
2024-05-24 11:10:48 +02:00
Lorenz Leutgeb 6d11ea17c8 cli: Implement rad cob show with new meaning 2024-05-22 11:56:01 +02:00
Lorenz Leutgeb 6147a8a2fb cli: Add rad cob log format options
Add `--format json` and `--format pretty`.
2024-05-22 11:54:25 +02:00
Lorenz Leutgeb 72dad241e2 cli: rad cob {show → log} 2024-05-22 11:47:09 +02:00
cloudhead 30c9b0db0b cli: Add rad node debug command 2024-05-21 16:00:30 +02:00
Lars Wirzenius 749e823985 cli: use Rust stdlib to get path to current exe
This is more portable than reading /proc/self/exe, which only works on
Linux.

Signed-off-by: Lars Wirzenius <liw@liw.fi>
2024-05-21 13:51:27 +02:00
cloudhead 191278f0d9 cli: Use current local tip in rad sync status
In the case of an out-of-sync local node, we were showing the wrong tip.
Additionally, mark your tip as unannounced if it isn't announced. This
isn't fool-proof, but can be useful to debug certain issues.
2024-05-21 13:32:40 +02:00
cloudhead f78e5a4281 node: Update sync status for private repos
Only public repos were being updated on node initialization.
2024-05-21 13:32:40 +02:00
Fintan Halpenny 740106d759 cli: upload-pack events
Introduce an `UploadPack` type for keeping track of relevant data from
upload-pack events and displaying progress to the terminal.

It keeps track of the number of remotes that are being uploaded to as well as
the throughput of transmitted data.

The `Progress` events are logged rather than being displayed since they don't
provide any useful details to the user.

Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com>
X-Clacks-Overhead: GNU Terry Pratchett
2024-05-17 21:05:43 +02:00
cloudhead 8402b85ad9 cli: Simplify private repo fetching
* Remove `rad sync --force` flag
* Remove `rad clone --private` flag

These flags are no longer necessary. Simplify specifying which seed
to fetch from with `--seed` is enough.
2024-05-16 15:46:24 +02:00
cloudhead ca7db1620c node: Improve Tor configuration flexibility
*Breaking change* The `tor` configuration field is no longer
supported. Users must remove that field from their config.

Allows for a mixed mode, where regular addresses bypass the Tor proxy,
while onion addresses go through it.

When `onion.mode` is set to "forward", Tor connections are fowarded to
the global proxy, and if it isn't set, to the OS's DNS resolution.

For mixed mode, a global proxy simply isn't set, so that IP/DNS is not
proxied.
2024-05-16 14:53:52 +02:00
Fintan Halpenny cb2cbf014a cli: reject rad id proposals that do not verify
To ensure that the `rad id` command does not modify the project payload without
it being able to be deserialized into the `Project` type, the command performs
this check throught the `project` method, and returns an error if this fails.

Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com>
X-Clacks-Overhead: GNU Terry Pratchett
2024-05-16 10:11:48 +01:00
RadsammyT d5045417d6 cli: remove op check for --repo in rad inbox
As a response to Issue # c4134924cf.
A no-op command in rad inbox defaults to show, but the inbox argument parser
only permits --repo in instances where the operation is explicity declared.

Here, the check for an explicit operation is removed so one is never required.
2024-05-16 12:07:08 +02:00
Lars Wirzenius 0d00528d48 cli: add SHELL environment variable to "rad debug" output
Signed-off-by: Lars Wirzenius <liw@liw.fi>
2024-05-16 12:06:04 +02:00
Fintan Halpenny f038b7ee5c cli: watch for upload-pack events in rad init
To improve the user experience of `rad init`, the events listener waits for
upload-pack messages indefinitely. The spinner reports back the upload progress
over time.

This process can be cancelled via Ctrl+C without affecting the announcement,
since that is happening in the background.

To also improve the experience, the remote NIDs that have successfully synced
are reported to the terminal.

Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com>
X-Clacks-Overhead: GNU Terry Pratchett
2024-05-15 10:07:56 +01:00
Fintan HalpennyandAlexis Sellier 027bfbef67 node: stream timeout semantics for Node::call
The timeout for a `UnixStream` will interrupt a `read` even when more data is
available. The preference would be that the timeout applies to each read, where
the timeout is reset again once a read is successful. This better supports
streaming semantics expected for the `Handle::subscribe` method.

To achieve this, the `LineIter` type holds the `UnixStream` and timeout
`Duration`. The `Iterator` implementation can then use `read_line` to progress
the stream one line at a time, and the timeout only applies to each read.

Co-authored-by: Alexis Sellier <alexis@radicle.xyz>
Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com>
X-Clacks-Overhead: GNU Terry Pratchett
2024-05-15 10:07:56 +01:00