diff --git a/mercurial/wireprotov1peer.py b/mercurial/wireprotov1peer.py --- a/mercurial/wireprotov1peer.py +++ b/mercurial/wireprotov1peer.py @@ -240,13 +240,16 @@ # Encoded arguments and future holding remote result. try: - encodedargs, fremote = next(batchable) + encargsorres, fremote = next(batchable) except Exception: pycompat.future_set_exception_info(f, sys.exc_info()[1:]) return - requests.append((command, encodedargs)) - states.append((command, f, batchable, fremote)) + if not fremote: + f.set_result(encargsorres) + else: + requests.append((command, encargsorres)) + states.append((command, f, batchable, fremote)) if not requests: return diff --git a/tests/test-missing-capability.t b/tests/test-missing-capability.t new file mode 100644 --- /dev/null +++ b/tests/test-missing-capability.t @@ -0,0 +1,46 @@ +Checking how hg behaves when one side of a pull/push doesn't support +some capability (because it's running an older hg version, usually). + + $ hg init repo1 + $ cd repo1 + $ echo a > a; hg add -q a; hg commit -q -m a + $ hg bookmark a + $ hg clone -q . ../repo2 + $ cd ../repo2 + + $ touch $TESTTMP/disable-lookup.py + $ disable_cap() { + > rm -f $TESTTMP/disable-lookup.pyc # pyc caching is buggy + > cat < $TESTTMP/disable-lookup.py + > from mercurial import extensions, wireprotov1server + > def wcapabilities(orig, *args, **kwargs): + > cap = orig(*args, **kwargs) + > cap.remove('$1') + > return cap + > extensions.wrapfunction(wireprotov1server, '_capabilities', wcapabilities) + > EOF + > } + $ cat >> ../repo1/.hg/hgrc < [extensions] + > disable-lookup = $TESTTMP/disable-lookup.py + > EOF + $ cat >> .hg/hgrc < [ui] + > ssh = "$PYTHON" "$TESTDIR/dummyssh" + > EOF + + $ hg pull ssh://user@dummy/repo1 -r tip -B a + pulling from ssh://user@dummy/repo1 + no changes found + + $ disable_cap lookup + $ hg pull ssh://user@dummy/repo1 -r tip -B a + pulling from ssh://user@dummy/repo1 + abort: other repository doesn't support revision lookup, so a rev cannot be specified. + [255] + + $ disable_cap pushkey + $ hg pull ssh://user@dummy/repo1 -r tip -B a + pulling from ssh://user@dummy/repo1 + abort: remote bookmark a not found! + [255]