protocol: convert StreamException to generated error code
This makes it much easier to handle these errors at the transport level.
--- a/mercurial/streamclone.py Fri Jul 16 22:20:10 2010 +0200
+++ b/mercurial/streamclone.py Fri Jul 16 22:20:19 2010 +0200
@@ -6,16 +6,8 @@
# GNU General Public License version 2 or any later version.
import util, error
-
from mercurial import store
-class StreamException(Exception):
- def __init__(self, code):
- Exception.__init__(self)
- self.code = code
- def __str__(self):
- return '%i\n' % self.code
-
# if server supports streaming clone, it advertises "stream"
# capability with value that is version+flags of repo it is serving.
# client only streams if it can read that repo format.
@@ -40,7 +32,8 @@
writes to file-like object, must support write() and optional flush().'''
if not allowed(repo.ui):
- raise StreamException(1)
+ yield '1\n' # error: 1
+ return
entries = []
total_bytes = 0
@@ -55,9 +48,10 @@
finally:
lock.release()
except error.LockError:
- raise StreamException(2)
+ yield '2\n' # error: 2
+ return
- yield '0\n'
+ yield '0\n' # success
repo.ui.debug('%d files, %d bytes to transfer\n' %
(len(entries), total_bytes))
yield '%d %d\n' % (len(entries), total_bytes)