Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
cli: add rad fork example test
Fintan Halpenny committed 3 years ago
commit f26adabdbff401e14e174c2d8254c9178a41a7a8
parent 3b49a7911b50f1002fe5c724ec4d6e657e833325
2 files changed +90 -0
added radicle-cli/examples/rad-fork.md
@@ -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.
modified radicle-cli/tests/commands.rs
@@ -429,6 +429,47 @@ fn rad_fetch() {
}

#[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() {
    logger::init(log::Level::Debug);