Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/httprepo.py @ 11589:e8d22fe2ddab
protocol: clean up call-like functions in http and ssh clients
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Wed, 14 Jul 2010 17:07:10 -0500 |
parents | 8a1f625e971d |
children | 0d9cb3f3b0a1 |
comparison
equal
deleted
inserted
replaced
11588:8a1f625e971d | 11589:e8d22fe2ddab |
---|---|
52 # look up capabilities only when needed | 52 # look up capabilities only when needed |
53 | 53 |
54 def get_caps(self): | 54 def get_caps(self): |
55 if self.caps is None: | 55 if self.caps is None: |
56 try: | 56 try: |
57 self.caps = set(self.do_read('capabilities').split()) | 57 self.caps = set(self._call('capabilities').split()) |
58 except error.RepoError: | 58 except error.RepoError: |
59 self.caps = set() | 59 self.caps = set() |
60 self.ui.debug('capabilities: %s\n' % | 60 self.ui.debug('capabilities: %s\n' % |
61 (' '.join(self.caps or ['none']))) | 61 (' '.join(self.caps or ['none']))) |
62 return self.caps | 62 return self.caps |
64 capabilities = property(get_caps) | 64 capabilities = property(get_caps) |
65 | 65 |
66 def lock(self): | 66 def lock(self): |
67 raise util.Abort(_('operation not supported over http')) | 67 raise util.Abort(_('operation not supported over http')) |
68 | 68 |
69 def do_cmd(self, cmd, **args): | 69 def _callstream(self, cmd, **args): |
70 data = args.pop('data', None) | 70 data = args.pop('data', None) |
71 headers = args.pop('headers', {}) | 71 headers = args.pop('headers', {}) |
72 self.ui.debug("sending %s command\n" % cmd) | 72 self.ui.debug("sending %s command\n" % cmd) |
73 q = {"cmd": cmd} | 73 q = {"cmd": cmd} |
74 q.update(args) | 74 q.update(args) |
128 raise error.RepoError(_("'%s' uses newer protocol %s") % | 128 raise error.RepoError(_("'%s' uses newer protocol %s") % |
129 (safeurl, version)) | 129 (safeurl, version)) |
130 | 130 |
131 return resp | 131 return resp |
132 | 132 |
133 def do_read(self, cmd, **args): | 133 def _call(self, cmd, **args): |
134 fp = self.do_cmd(cmd, **args) | 134 fp = self._callstream(cmd, **args) |
135 try: | 135 try: |
136 return fp.read() | 136 return fp.read() |
137 finally: | 137 finally: |
138 # if using keepalive, allow connection to be reused | 138 # if using keepalive, allow connection to be reused |
139 fp.close() | 139 fp.close() |
140 | 140 |
141 def _call(self, cmd, **args): | |
142 return self.do_read(cmd, **args) | |
143 | |
144 def _callstream(self, cmd, **args): | |
145 return self.do_cmd(cmd, **args) | |
146 | |
147 def _abort(self, exception): | 141 def _abort(self, exception): |
148 raise exception | 142 raise exception |
149 | 143 |
150 def changegroup(self, nodes, kind): | 144 def changegroup(self, nodes, kind): |
151 n = " ".join(map(hex, nodes)) | 145 n = " ".join(map(hex, nodes)) |
152 f = self.do_cmd("changegroup", roots=n) | 146 f = self._callstream("changegroup", roots=n) |
153 return util.chunkbuffer(zgenerator(f)) | 147 return util.chunkbuffer(zgenerator(f)) |
154 | 148 |
155 def changegroupsubset(self, bases, heads, source): | 149 def changegroupsubset(self, bases, heads, source): |
156 self.requirecap('changegroupsubset', _('look up remote changes')) | 150 self.requirecap('changegroupsubset', _('look up remote changes')) |
157 baselst = " ".join([hex(n) for n in bases]) | 151 baselst = " ".join([hex(n) for n in bases]) |
158 headlst = " ".join([hex(n) for n in heads]) | 152 headlst = " ".join([hex(n) for n in heads]) |
159 f = self.do_cmd("changegroupsubset", bases=baselst, heads=headlst) | 153 f = self._callstream("changegroupsubset", bases=baselst, heads=headlst) |
160 return util.chunkbuffer(zgenerator(f)) | 154 return util.chunkbuffer(zgenerator(f)) |
161 | 155 |
162 def unbundle(self, cg, heads, source): | 156 def unbundle(self, cg, heads, source): |
163 '''Send cg (a readable file-like object representing the | 157 '''Send cg (a readable file-like object representing the |
164 changegroup to push, typically a chunkbuffer object) to the | 158 changegroup to push, typically a chunkbuffer object) to the |
185 | 179 |
186 tempname = changegroup.writebundle(cg, None, type) | 180 tempname = changegroup.writebundle(cg, None, type) |
187 fp = url.httpsendfile(tempname, "rb") | 181 fp = url.httpsendfile(tempname, "rb") |
188 try: | 182 try: |
189 try: | 183 try: |
190 resp = self.do_read( | 184 resp = self._call( |
191 'unbundle', data=fp, | 185 'unbundle', data=fp, |
192 headers={'Content-Type': 'application/mercurial-0.1'}, | 186 headers={'Content-Type': 'application/mercurial-0.1'}, |
193 heads=' '.join(map(hex, heads))) | 187 heads=' '.join(map(hex, heads))) |
194 resp_code, output = resp.split('\n', 1) | 188 resp_code, output = resp.split('\n', 1) |
195 try: | 189 try: |