Use dedicated mechanism to report pushkey success
diff --git a/hgext/states.py b/hgext/states.py
--- a/hgext/states.py
+++ b/hgext/states.py
@@ -183,8 +183,12 @@ def pushstatesheads(repo, key, old, new)
w = repo.wlock()
try:
newhead = node.bin(key)
- repo[newhead]
+ try:
+ repo[newhead]
+ except error.RepoLookupError:
+ return False
repo.setstate(st, [newhead])
+ return True
finally:
w.release()
@@ -407,9 +411,8 @@ def reposetup(ui, repo):
missing = local - set(remoteheads)
while missing:
h = missing.pop()
- try:
- remote.pushkey('states-heads', node.hex(h), '', state.name)
- except error.RepoLookupError:
+ ok = remote.pushkey('states-heads', node.hex(h), '', state.name)
+ if not ok:
missing.update(p.node() for p in repo[h].parents())