cli: add rad fork example test

Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com>
X-Clacks-Overhead: GNU Terry Pratchett
This commit is contained in:
Fintan Halpenny 2023-04-19 11:37:14 +01:00 committed by Alexis Sellier
parent 3b49a7911b
commit f26adabdbf
No known key found for this signature in database
2 changed files with 90 additions and 0 deletions

View File

@ -0,0 +1,49 @@
If we have fetched a project, then we do not have a fork of the
repository in the storage, i.e. there is no ref hierarchy for our
NID. This is demonstrated below where our NID is
`z6Mkt67GdsW7715MEfRuP4pSZxJRJh6kj6Y48WRqVv4N1tRk`:
```
$ rad inspect rad:z42hL2jL4XNk6K8oHQaSWfMgCL7ji --refs
.
`-- z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
`-- refs
|-- heads
| `-- master
`-- rad
|-- id
`-- sigrefs
```
To remedy this, we can use the `rad fork` command for the project we
wish to fork:
```
$ rad fork rad:z42hL2jL4XNk6K8oHQaSWfMgCL7ji
✓ Forked project rad:z42hL2jL4XNk6K8oHQaSWfMgCL7ji for z6Mkt67GdsW7715MEfRuP4pSZxJRJh6kj6Y48WRqVv4N1tRk
```
Now, if we `rad inspect` the project's refs again we will see that we
have a copy of the main set of refs:
```
$ rad inspect rad:z42hL2jL4XNk6K8oHQaSWfMgCL7ji --refs
.
|-- z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
| `-- refs
| |-- heads
| | `-- master
| `-- rad
| |-- id
| `-- sigrefs
`-- z6Mkt67GdsW7715MEfRuP4pSZxJRJh6kj6Y48WRqVv4N1tRk
`-- refs
|-- heads
| `-- master
`-- rad
|-- id
`-- sigrefs
```
We are now able to setup a remote in our own working copy of the
project and push to our own fork.

View File

@ -428,6 +428,47 @@ fn rad_fetch() {
.unwrap();
}
#[test]
fn rad_fork() {
let mut environment = Environment::new();
let working = environment.tmp().join("working");
let alice = environment.node("alice");
let bob = environment.node("bob");
let mut alice = alice.spawn(Config::default());
let bob = bob.spawn(Config::default());
alice.connect(&bob);
fixtures::repository(working.join("alice"));
// Alice initializes a repo after her node has started, and after bob has connected to it.
test(
"examples/rad-init-sync.md",
&working.join("alice"),
Some(&alice.home),
[],
)
.unwrap();
// Wait for bob to get any updates to the routing table.
bob.converge([&alice]);
test(
"examples/rad-fetch.md",
working.join("bob"),
Some(&bob.home),
[],
)
.unwrap();
test(
"examples/rad-fork.md",
working.join("bob"),
Some(&bob.home),
[],
)
.unwrap();
}
#[test]
// User tries to clone; no seeds are available, but user has the repo locally.
fn test_clone_without_seeds() {