Here we show that the Radicle remote helper supports the use of
`--force-with-lease`[^1].
First we will set things up by pushing an initial commit:
```
$ git commit -m "New changes" --allow-empty -q
$ git push rad master
```
Now, we will create a new commit, and use the `--force-with-lease`, which should
succeed. In fact, since the current setup ensures that you can only push to your
namespace, `--force-with-lease` should always work! No other person should be
able to push to your namespace, and so the commit should never have changed from
the last time you pushed.
``` (stderr)
$ git commit --amend -m "Neue Änderungen" --allow-empty -q
$ git push rad master --force-with-lease
✓ Canonical reference refs/heads/master updated to target commit 9170c8795d3a78f0381a0ffafb20ea69fb0f5b6b
To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
+ fb25886...9170c87 master -> master (forced update)
```
As per the documentation, you can also pass the reference name, as the expected
value, to `--force-push-lease`:
``` (stderr)
$ git commit --amend -m "Noch mehr Änderungen" --allow-empty -q
$ git push rad master --force-with-lease=master
✓ Canonical reference refs/heads/master updated to target commit 1e4213811eb4ce67360e4a0222cab81ad11a7ffe
To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
+ 9170c87...1e42138 master -> master (forced update)
```
As well as the named reference, and its expected value:
``` (stderr)
$ git commit --amend -m "Even more changes" --allow-empty -q
$ git push rad master --force-with-lease=master:1e4213811eb4ce67360e4a0222cab81ad11a7ffe
✓ Canonical reference refs/heads/master updated to target commit c4b74ef30953598852a82e0cd22b2ebb0d8d9e18
To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
+ 1e42138...c4b74ef master -> master (forced update)
```
If we try use the same expected value as the last push, it should fail since the
reference was updated in the last commit:
```
$ git commit --amend -m "And even more" --allow-empty -q
```
``` (stderr) (fail)
$ git push rad master --force-with-lease=master:1e4213811eb4ce67360e4a0222cab81ad11a7ffe
To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
! [rejected] master -> master (stale info)
error: failed to push some refs to 'rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi'
```
And if we do not supply the commit, it should also fail, since this implies that
we expect the reference to not exist:
```
$ git commit --amend -m "And even more" --allow-empty -q
```
``` (stderr) (fail)
$ git push rad master --force-with-lease=master:
To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
! [rejected] master -> master (stale info)
error: failed to push some refs to 'rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi'
```
So, let's create a new branch:
``` (stderr)
$ git push rad master:dev --force-with-lease=dev:
To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
* [new branch] master -> dev
```
[^1]: https://git-scm.com/docs/git-push#Documentation/git-push.txt---force-with-lease