node: handle removal of cob from cache
When a `Patch` or `Issue` is entirely removed from the Git repository, then there is no update to be made -- instead it should also be removed from the cache. This covers the case where the original author of the COB deletes the COB. Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com> X-Clacks-Overhead: GNU Terry Pratchett
This commit is contained in:
parent
53ecc88437
commit
8bf871903a
|
|
@ -11,7 +11,7 @@ $ git commit -m "Introduce license"
|
||||||
``` ~alice (stderr)
|
``` ~alice (stderr)
|
||||||
$ git push rad -o patch.draft -o patch.message="Define LICENSE for project" HEAD:refs/patches
|
$ git push rad -o patch.draft -o patch.message="Define LICENSE for project" HEAD:refs/patches
|
||||||
✓ Patch 6c61ef1716ad8a5c11e04dd7a3fec51e01fba70b drafted
|
✓ Patch 6c61ef1716ad8a5c11e04dd7a3fec51e01fba70b drafted
|
||||||
✓ Synced with 1 node(s)
|
✓ Synced with 2 node(s)
|
||||||
To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
|
To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
|
||||||
* [new reference] HEAD -> refs/patches
|
* [new reference] HEAD -> refs/patches
|
||||||
```
|
```
|
||||||
|
|
@ -26,7 +26,7 @@ $ rad patch comment 6c61ef1 -m "I think we should use MIT"
|
||||||
│ bob (you) now 833db19 │
|
│ bob (you) now 833db19 │
|
||||||
│ I think we should use MIT │
|
│ I think we should use MIT │
|
||||||
╰───────────────────────────╯
|
╰───────────────────────────╯
|
||||||
✓ Synced with 1 node(s)
|
✓ Synced with 2 node(s)
|
||||||
```
|
```
|
||||||
|
|
||||||
``` ~alice
|
``` ~alice
|
||||||
|
|
@ -53,7 +53,7 @@ $ rad patch comment 6c61ef1 --reply-to 833db19 -m "Thanks, I'll add it!"
|
||||||
│ alice (you) now 1803a38 │
|
│ alice (you) now 1803a38 │
|
||||||
│ Thanks, I'll add it! │
|
│ Thanks, I'll add it! │
|
||||||
╰─────────────────────────╯
|
╰─────────────────────────╯
|
||||||
✓ Synced with 1 node(s)
|
✓ Synced with 2 node(s)
|
||||||
```
|
```
|
||||||
|
|
||||||
``` ~alice
|
``` ~alice
|
||||||
|
|
@ -69,7 +69,7 @@ $ git commit -am "Add MIT License"
|
||||||
``` ~alice (stderr)
|
``` ~alice (stderr)
|
||||||
$ git push -f
|
$ git push -f
|
||||||
✓ Patch 6c61ef1 updated to revision 93915b9afa94a9dc4f52f12cdf077d4613ea3eb3
|
✓ Patch 6c61ef1 updated to revision 93915b9afa94a9dc4f52f12cdf077d4613ea3eb3
|
||||||
✓ Synced with 1 node(s)
|
✓ Synced with 2 node(s)
|
||||||
To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
|
To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
|
||||||
717c900..1cc8cd9 prepare-license -> patches/6c61ef1716ad8a5c11e04dd7a3fec51e01fba70b
|
717c900..1cc8cd9 prepare-license -> patches/6c61ef1716ad8a5c11e04dd7a3fec51e01fba70b
|
||||||
```
|
```
|
||||||
|
|
@ -77,7 +77,7 @@ To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkE
|
||||||
``` ~bob
|
``` ~bob
|
||||||
$ rad patch review 6c61ef1 --accept -m "LGTM!"
|
$ rad patch review 6c61ef1 --accept -m "LGTM!"
|
||||||
✓ Patch 6c61ef1 accepted
|
✓ Patch 6c61ef1 accepted
|
||||||
✓ Synced with 1 node(s)
|
✓ Synced with 2 node(s)
|
||||||
$ rad patch show 6c61ef1 -v
|
$ rad patch show 6c61ef1 -v
|
||||||
╭─────────────────────────────────────────────────────────────────────╮
|
╭─────────────────────────────────────────────────────────────────────╮
|
||||||
│ Title Define LICENSE for project │
|
│ Title Define LICENSE for project │
|
||||||
|
|
@ -99,7 +99,7 @@ $ rad patch show 6c61ef1 -v
|
||||||
|
|
||||||
``` ~bob
|
``` ~bob
|
||||||
$ rad patch delete 6c61ef1
|
$ rad patch delete 6c61ef1
|
||||||
✓ Synced with 1 node(s)
|
✓ Synced with 2 node(s)
|
||||||
```
|
```
|
||||||
|
|
||||||
``` ~alice
|
``` ~alice
|
||||||
|
|
@ -121,3 +121,16 @@ $ rad patch show 6c61ef1 -v
|
||||||
│ ↑ updated to 93915b9afa94a9dc4f52f12cdf077d4613ea3eb3 (1cc8cd9) now │
|
│ ↑ updated to 93915b9afa94a9dc4f52f12cdf077d4613ea3eb3 (1cc8cd9) now │
|
||||||
╰─────────────────────────────────────────────────────────────────────╯
|
╰─────────────────────────────────────────────────────────────────────╯
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If Alice also decides to delete the patch, then any seeds that have synced with
|
||||||
|
Alice should no longer have the patch:
|
||||||
|
|
||||||
|
``` ~alice
|
||||||
|
$ rad patch delete 6c61ef1
|
||||||
|
✓ Synced with 2 node(s)
|
||||||
|
```
|
||||||
|
|
||||||
|
``` ~seed (fails)
|
||||||
|
$ rad patch show --repo rad:z42hL2jL4XNk6K8oHQaSWfMgCL7ji 6c61ef1 -v
|
||||||
|
✗ Error: Patch `6c61ef1716ad8a5c11e04dd7a3fec51e01fba70b` not found
|
||||||
|
```
|
||||||
|
|
|
||||||
|
|
@ -967,6 +967,7 @@ fn rad_patch_delete() {
|
||||||
let mut environment = Environment::new();
|
let mut environment = Environment::new();
|
||||||
let alice = environment.node(Config::test(Alias::new("alice")));
|
let alice = environment.node(Config::test(Alias::new("alice")));
|
||||||
let bob = environment.node(Config::test(Alias::new("bob")));
|
let bob = environment.node(Config::test(Alias::new("bob")));
|
||||||
|
let seed = environment.node(Config::test(Alias::new("seed")));
|
||||||
let working = environment.tmp().join("working");
|
let working = environment.tmp().join("working");
|
||||||
let acme = RepoId::from_str("z42hL2jL4XNk6K8oHQaSWfMgCL7ji").unwrap();
|
let acme = RepoId::from_str("z42hL2jL4XNk6K8oHQaSWfMgCL7ji").unwrap();
|
||||||
|
|
||||||
|
|
@ -983,9 +984,11 @@ fn rad_patch_delete() {
|
||||||
|
|
||||||
let mut alice = alice.spawn();
|
let mut alice = alice.spawn();
|
||||||
let mut bob = bob.spawn();
|
let mut bob = bob.spawn();
|
||||||
|
let mut seed = seed.spawn();
|
||||||
|
|
||||||
bob.handle.seed(acme, Scope::All).unwrap();
|
bob.handle.seed(acme, Scope::All).unwrap();
|
||||||
alice.connect(&bob).converge([&bob]);
|
seed.handle.seed(acme, Scope::All).unwrap();
|
||||||
|
alice.connect(&bob).connect(&seed).converge([&bob, &seed]);
|
||||||
|
|
||||||
test(
|
test(
|
||||||
"examples/rad-clone.md",
|
"examples/rad-clone.md",
|
||||||
|
|
@ -1007,6 +1010,11 @@ fn rad_patch_delete() {
|
||||||
working.join("bob"),
|
working.join("bob"),
|
||||||
[("RAD_HOME", bob.home.path().display())],
|
[("RAD_HOME", bob.home.path().display())],
|
||||||
)
|
)
|
||||||
|
.home(
|
||||||
|
"seed",
|
||||||
|
working.join("seed"),
|
||||||
|
[("RAD_HOME", seed.home.path().display())],
|
||||||
|
)
|
||||||
.run()
|
.run()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -302,6 +302,16 @@ where
|
||||||
type_name: identifier.type_name,
|
type_name: identifier.type_name,
|
||||||
err: e.into(),
|
err: e.into(),
|
||||||
})?;
|
})?;
|
||||||
|
} else {
|
||||||
|
// N.b. the issue has been removed entirely from the
|
||||||
|
// repository so we also remove it from the cache
|
||||||
|
cob::cache::Remove::<cob::issue::Issue>::remove(cache, &identifier.id)
|
||||||
|
.map(|_| ())
|
||||||
|
.map_err(|e| error::Cache::Remove {
|
||||||
|
id: identifier.id,
|
||||||
|
type_name: identifier.type_name,
|
||||||
|
err: Box::new(e),
|
||||||
|
})?;
|
||||||
}
|
}
|
||||||
} else if identifier.is_patch() {
|
} else if identifier.is_patch() {
|
||||||
if let Some(patch) = patches.get(&identifier.id)? {
|
if let Some(patch) = patches.get(&identifier.id)? {
|
||||||
|
|
@ -313,6 +323,16 @@ where
|
||||||
type_name: identifier.type_name,
|
type_name: identifier.type_name,
|
||||||
err: e.into(),
|
err: e.into(),
|
||||||
})?;
|
})?;
|
||||||
|
} else {
|
||||||
|
// N.b. the patch has been removed entirely from the
|
||||||
|
// repository so we also remove it from the cache
|
||||||
|
cob::cache::Remove::<cob::patch::Patch>::remove(cache, &identifier.id)
|
||||||
|
.map(|_| ())
|
||||||
|
.map_err(|e| error::Cache::Remove {
|
||||||
|
id: identifier.id,
|
||||||
|
type_name: identifier.type_name,
|
||||||
|
err: Box::new(e),
|
||||||
|
})?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue