Mercurial > public > mercurial-scm > hg
comparison mercurial/sshrepo.py @ 3765:768ba23c948e
Change sshrepo.repoerror() into a more flexible sshrepo.raise_().
Now every exception can be raised with a cleanup, not only hg.RepoError.
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Sat, 02 Dec 2006 22:15:18 +0100 |
parents | 6652209d104d |
children | 581665242c07 |
comparison
equal
deleted
inserted
replaced
3764:6652209d104d | 3765:768ba23c948e |
---|---|
16 self._url = path | 16 self._url = path |
17 self.ui = ui | 17 self.ui = ui |
18 | 18 |
19 m = re.match(r'^ssh://(([^@]+)@)?([^:/]+)(:(\d+))?(/(.*))?$', path) | 19 m = re.match(r'^ssh://(([^@]+)@)?([^:/]+)(:(\d+))?(/(.*))?$', path) |
20 if not m: | 20 if not m: |
21 self.repoerror(_("couldn't parse location %s") % path) | 21 self.raise_(hg.RepoError(_("couldn't parse location %s") % path)) |
22 | 22 |
23 self.user = m.group(2) | 23 self.user = m.group(2) |
24 self.host = m.group(3) | 24 self.host = m.group(3) |
25 self.port = m.group(5) | 25 self.port = m.group(5) |
26 self.path = m.group(7) or "." | 26 self.path = m.group(7) or "." |
36 cmd = cmd % (sshcmd, args, remotecmd, self.path) | 36 cmd = cmd % (sshcmd, args, remotecmd, self.path) |
37 | 37 |
38 ui.note('running %s\n' % cmd) | 38 ui.note('running %s\n' % cmd) |
39 res = os.system(cmd) | 39 res = os.system(cmd) |
40 if res != 0: | 40 if res != 0: |
41 self.repoerror(_("could not create remote repo")) | 41 self.raise_(hg.RepoError(_("could not create remote repo"))) |
42 | 42 |
43 self.validate_repo(ui, sshcmd, args, remotecmd) | 43 self.validate_repo(ui, sshcmd, args, remotecmd) |
44 | 44 |
45 def url(self): | 45 def url(self): |
46 return self._url | 46 return self._url |
68 if l: | 68 if l: |
69 ui.debug(_("remote: "), l) | 69 ui.debug(_("remote: "), l) |
70 lines.append(l) | 70 lines.append(l) |
71 max_noise -= 1 | 71 max_noise -= 1 |
72 else: | 72 else: |
73 self.repoerror(_("no suitable response from remote hg")) | 73 self.raise_(hg.RepoError(_("no suitable response from remote hg"))) |
74 | 74 |
75 self.capabilities = () | 75 self.capabilities = () |
76 lines.reverse() | 76 lines.reverse() |
77 for l in lines: | 77 for l in lines: |
78 if l.startswith("capabilities:"): | 78 if l.startswith("capabilities:"): |
85 if size == 0: break | 85 if size == 0: break |
86 l = self.pipee.readline() | 86 l = self.pipee.readline() |
87 if not l: break | 87 if not l: break |
88 self.ui.status(_("remote: "), l) | 88 self.ui.status(_("remote: "), l) |
89 | 89 |
90 def repoerror(self, msg): | 90 def raise_(self, exception): |
91 self.cleanup() | 91 self.cleanup() |
92 raise hg.RepoError(msg) | 92 raise exception |
93 | 93 |
94 def cleanup(self): | 94 def cleanup(self): |
95 try: | 95 try: |
96 self.pipeo.close() | 96 self.pipeo.close() |
97 self.pipei.close() | 97 self.pipei.close() |
119 l = r.readline() | 119 l = r.readline() |
120 self.readerr() | 120 self.readerr() |
121 try: | 121 try: |
122 l = int(l) | 122 l = int(l) |
123 except: | 123 except: |
124 self.repoerror(_("unexpected response '%s'") % l) | 124 self.raise_(hg.RepoError(_("unexpected response '%s'") % l)) |
125 return r.read(l) | 125 return r.read(l) |
126 | 126 |
127 def lock(self): | 127 def lock(self): |
128 self.call("lock") | 128 self.call("lock") |
129 return remotelock(self) | 129 return remotelock(self) |
135 d = self.call("lookup", key=key) | 135 d = self.call("lookup", key=key) |
136 success, data = d[:-1].split(" ", 1) | 136 success, data = d[:-1].split(" ", 1) |
137 if int(success): | 137 if int(success): |
138 return bin(data) | 138 return bin(data) |
139 else: | 139 else: |
140 self.repoerror(data) | 140 self.raise_(hg.RepoError(data)) |
141 | 141 |
142 def heads(self): | 142 def heads(self): |
143 d = self.call("heads") | 143 d = self.call("heads") |
144 try: | 144 try: |
145 return map(bin, d[:-1].split(" ")) | 145 return map(bin, d[:-1].split(" ")) |
146 except: | 146 except: |
147 self.repoerror(_("unexpected response '%s'") % (d[:400] + "...")) | 147 self.raise_(hg.RepoError(_("unexpected response '%s'") % (d[:400] + "..."))) |
148 | 148 |
149 def branches(self, nodes): | 149 def branches(self, nodes): |
150 n = " ".join(map(hex, nodes)) | 150 n = " ".join(map(hex, nodes)) |
151 d = self.call("branches", nodes=n) | 151 d = self.call("branches", nodes=n) |
152 try: | 152 try: |
153 br = [ tuple(map(bin, b.split(" "))) for b in d.splitlines() ] | 153 br = [ tuple(map(bin, b.split(" "))) for b in d.splitlines() ] |
154 return br | 154 return br |
155 except: | 155 except: |
156 self.repoerror(_("unexpected response '%s'") % (d[:400] + "...")) | 156 self.raise_(hg.RepoError(_("unexpected response '%s'") % (d[:400] + "..."))) |
157 | 157 |
158 def between(self, pairs): | 158 def between(self, pairs): |
159 n = "\n".join(["-".join(map(hex, p)) for p in pairs]) | 159 n = "\n".join(["-".join(map(hex, p)) for p in pairs]) |
160 d = self.call("between", pairs=n) | 160 d = self.call("between", pairs=n) |
161 try: | 161 try: |
162 p = [ l and map(bin, l.split(" ")) or [] for l in d.splitlines() ] | 162 p = [ l and map(bin, l.split(" ")) or [] for l in d.splitlines() ] |
163 return p | 163 return p |
164 except: | 164 except: |
165 self.repoerror(_("unexpected response '%s'") % (d[:400] + "...")) | 165 self.raise_(hg.RepoError(_("unexpected response '%s'") % (d[:400] + "..."))) |
166 | 166 |
167 def changegroup(self, nodes, kind): | 167 def changegroup(self, nodes, kind): |
168 n = " ".join(map(hex, nodes)) | 168 n = " ".join(map(hex, nodes)) |
169 return self.do_cmd("changegroup", roots=n) | 169 return self.do_cmd("changegroup", roots=n) |
170 | 170 |
174 return self.do_cmd("changegroupsubset", bases=bases, heads=heads) | 174 return self.do_cmd("changegroupsubset", bases=bases, heads=heads) |
175 | 175 |
176 def unbundle(self, cg, heads, source): | 176 def unbundle(self, cg, heads, source): |
177 d = self.call("unbundle", heads=' '.join(map(hex, heads))) | 177 d = self.call("unbundle", heads=' '.join(map(hex, heads))) |
178 if d: | 178 if d: |
179 self.repoerror(_("push refused: %s") % d) | 179 self.raise_(hg.RepoError(_("push refused: %s") % d)) |
180 | 180 |
181 while 1: | 181 while 1: |
182 d = cg.read(4096) | 182 d = cg.read(4096) |
183 if not d: break | 183 if not d: break |
184 self.pipeo.write(str(len(d)) + '\n') | 184 self.pipeo.write(str(len(d)) + '\n') |
200 return int(r) | 200 return int(r) |
201 | 201 |
202 def addchangegroup(self, cg, source, url): | 202 def addchangegroup(self, cg, source, url): |
203 d = self.call("addchangegroup") | 203 d = self.call("addchangegroup") |
204 if d: | 204 if d: |
205 self.repoerror(_("push refused: %s") % d) | 205 self.raise_(hg.RepoError(_("push refused: %s") % d)) |
206 while 1: | 206 while 1: |
207 d = cg.read(4096) | 207 d = cg.read(4096) |
208 if not d: break | 208 if not d: break |
209 self.pipeo.write(d) | 209 self.pipeo.write(d) |
210 self.readerr() | 210 self.readerr() |