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 raise hg.RepoError("couldn't parse destination %s" % path) |
21 raise hg.RepoError(_("couldn't parse destination %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 "." |
40 while 1: |
40 while 1: |
41 size = os.fstat(self.pipee.fileno())[stat.ST_SIZE] |
41 size = os.fstat(self.pipee.fileno())[stat.ST_SIZE] |
42 if size == 0: break |
42 if size == 0: break |
43 l = self.pipee.readline() |
43 l = self.pipee.readline() |
44 if not l: break |
44 if not l: break |
45 self.ui.status("remote: ", l) |
45 self.ui.status(_("remote: "), l) |
46 |
46 |
47 def __del__(self): |
47 def __del__(self): |
48 try: |
48 try: |
49 self.pipeo.close() |
49 self.pipeo.close() |
50 self.pipei.close() |
50 self.pipei.close() |
51 # read the error descriptor until EOF |
51 # read the error descriptor until EOF |
52 for l in self.pipee: |
52 for l in self.pipee: |
53 self.ui.status("remote: ", l) |
53 self.ui.status(_("remote: "), l) |
54 self.pipee.close() |
54 self.pipee.close() |
55 except: |
55 except: |
56 pass |
56 pass |
57 |
57 |
58 def dev(self): |
58 def dev(self): |
59 return -1 |
59 return -1 |
60 |
60 |
61 def do_cmd(self, cmd, **args): |
61 def do_cmd(self, cmd, **args): |
62 self.ui.debug("sending %s command\n" % cmd) |
62 self.ui.debug(_("sending %s command\n") % cmd) |
63 self.pipeo.write("%s\n" % cmd) |
63 self.pipeo.write("%s\n" % cmd) |
64 for k, v in args.items(): |
64 for k, v in args.items(): |
65 self.pipeo.write("%s %d\n" % (k, len(v))) |
65 self.pipeo.write("%s %d\n" % (k, len(v))) |
66 self.pipeo.write(v) |
66 self.pipeo.write(v) |
67 self.pipeo.flush() |
67 self.pipeo.flush() |
88 def heads(self): |
88 def heads(self): |
89 d = self.call("heads") |
89 d = self.call("heads") |
90 try: |
90 try: |
91 return map(bin, d[:-1].split(" ")) |
91 return map(bin, d[:-1].split(" ")) |
92 except: |
92 except: |
93 raise hg.RepoError("unexpected response '%s'" % (d[:400] + "...")) |
93 raise hg.RepoError(_("unexpected response '%s'") % (d[:400] + "...")) |
94 |
94 |
95 def branches(self, nodes): |
95 def branches(self, nodes): |
96 n = " ".join(map(hex, nodes)) |
96 n = " ".join(map(hex, nodes)) |
97 d = self.call("branches", nodes=n) |
97 d = self.call("branches", nodes=n) |
98 try: |
98 try: |
99 br = [ tuple(map(bin, b.split(" "))) for b in d.splitlines() ] |
99 br = [ tuple(map(bin, b.split(" "))) for b in d.splitlines() ] |
100 return br |
100 return br |
101 except: |
101 except: |
102 raise hg.RepoError("unexpected response '%s'" % (d[:400] + "...")) |
102 raise hg.RepoError(_("unexpected response '%s'") % (d[:400] + "...")) |
103 |
103 |
104 def between(self, pairs): |
104 def between(self, pairs): |
105 n = "\n".join(["-".join(map(hex, p)) for p in pairs]) |
105 n = "\n".join(["-".join(map(hex, p)) for p in pairs]) |
106 d = self.call("between", pairs=n) |
106 d = self.call("between", pairs=n) |
107 try: |
107 try: |
108 p = [ l and map(bin, l.split(" ")) or [] for l in d.splitlines() ] |
108 p = [ l and map(bin, l.split(" ")) or [] for l in d.splitlines() ] |
109 return p |
109 return p |
110 except: |
110 except: |
111 raise hg.RepoError("unexpected response '%s'" % (d[:400] + "...")) |
111 raise hg.RepoError(_("unexpected response '%s'") % (d[:400] + "...")) |
112 |
112 |
113 def changegroup(self, nodes): |
113 def changegroup(self, nodes): |
114 n = " ".join(map(hex, nodes)) |
114 n = " ".join(map(hex, nodes)) |
115 f = self.do_cmd("changegroup", roots=n) |
115 f = self.do_cmd("changegroup", roots=n) |
116 return self.pipei |
116 return self.pipei |
117 |
117 |
118 def addchangegroup(self, cg): |
118 def addchangegroup(self, cg): |
119 d = self.call("addchangegroup") |
119 d = self.call("addchangegroup") |
120 if d: |
120 if d: |
121 raise hg.RepoError("push refused: %s", d) |
121 raise hg.RepoError(_("push refused: %s"), d) |
122 |
122 |
123 while 1: |
123 while 1: |
124 d = cg.read(4096) |
124 d = cg.read(4096) |
125 if not d: break |
125 if not d: break |
126 self.pipeo.write(d) |
126 self.pipeo.write(d) |