Mercurial > hg > mercurial-crew-with-dirclash
comparison contrib/convert-repo @ 4047:705d0792dbf2
add pserver support to convert_repo
author | csaba.henk@creo.hu |
---|---|
date | Sat, 27 Jan 2007 15:53:31 -0800 |
parents | 67982d3ee76c |
children | 516f883e3d79 |
comparison
equal
deleted
inserted
replaced
4046:7fd68d2667fe | 4047:705d0792dbf2 |
---|---|
21 # | 21 # |
22 # If the file doesn't exist, it's automatically created. It's updated | 22 # If the file doesn't exist, it's automatically created. It's updated |
23 # on each commit copied, so convert-repo can be interrupted and can | 23 # on each commit copied, so convert-repo can be interrupted and can |
24 # be run repeatedly to copy new commits. | 24 # be run repeatedly to copy new commits. |
25 | 25 |
26 import sys, os, zlib, sha, time, re, locale | 26 import sys, os, zlib, sha, time, re, locale, socket |
27 os.environ["HGENCODING"] = "utf-8" | 27 os.environ["HGENCODING"] = "utf-8" |
28 from mercurial import hg, ui, util, fancyopts | 28 from mercurial import hg, ui, util, fancyopts |
29 | 29 |
30 class Abort(Exception): pass | 30 class Abort(Exception): pass |
31 class NoRepo(Exception): pass | 31 class NoRepo(Exception): pass |
136 finally: | 136 finally: |
137 os.chdir(d) | 137 os.chdir(d) |
138 | 138 |
139 def _connect(self): | 139 def _connect(self): |
140 root = self.cvsroot | 140 root = self.cvsroot |
141 local = False | 141 conntype = None |
142 user, host = None, None | 142 user, host = None, None |
143 cmd = ['cvs', 'server'] | 143 cmd = ['cvs', 'server'] |
144 | 144 |
145 status("connecting to %s\n" % root) | 145 status("connecting to %s\n" % root) |
146 | 146 |
147 # only non-pserver for now | 147 if root.startswith(":pserver:"): |
148 if root.startswith(":pserver"): | 148 root = root[9:] |
149 abort("can't handle pserver mode yet: %s\n" % root) | 149 m = re.match(r'(?:(.*?)(?::(.*?))?@)?([^:\/]*)(?::(\d*))?(.*)', root) |
150 | 150 if m: |
151 if root.startswith(":local:"): | 151 conntype = "pserver" |
152 local = True | 152 user, passw, serv, port, root = m.groups() |
153 if not user: | |
154 user = "anonymous" | |
155 rr = ":pserver:" + user + "@" + serv + ":" + root | |
156 if port: | |
157 rr2, port = "-", int(port) | |
158 else: | |
159 rr2, port = rr, 2401 | |
160 rr += str(port) | |
161 | |
162 if not passw: | |
163 passw = "A" | |
164 pf = open(os.path.join(os.environ["HOME"], ".cvspass")) | |
165 for l in pf: | |
166 # :pserver:cvs@mea.tmt.tele.fi:/cvsroot/zmailer Ah<Z | |
167 m = re.match(r'(/\d+\s+/)?(.*)', l) | |
168 l = m.group(2) | |
169 w, p = l.split(' ', 1) | |
170 if w in [rr, rr2]: | |
171 passw = p | |
172 break | |
173 pf.close() | |
174 | |
175 sck = socket.socket() | |
176 sck.connect((serv, port)) | |
177 sck.send("\n".join(["BEGIN AUTH REQUEST", root, user, passw, "END AUTH REQUEST", ""])) | |
178 if sck.recv(128) != "I LOVE YOU\n": | |
179 raise NoRepo("CVS pserver authentication failed") | |
180 | |
181 self.writep = self.readp = sck.makefile('r+') | |
182 | |
183 if not conntype and root.startswith(":local:"): | |
184 conntype = "local" | |
153 root = root[7:] | 185 root = root[7:] |
154 else: | 186 |
187 if not conntype: | |
155 # :ext:user@host/home/user/path/to/cvsroot | 188 # :ext:user@host/home/user/path/to/cvsroot |
156 if root.startswith(":ext:"): | 189 if root.startswith(":ext:"): |
157 root = root[5:] | 190 root = root[5:] |
158 m = re.match(r'(?:([^@:/]+)@)?([^:/]+):?(.*)', root) | 191 m = re.match(r'(?:([^@:/]+)@)?([^:/]+):?(.*)', root) |
159 if not m: | 192 if not m: |
160 local = True | 193 conntype = "local" |
161 else: | 194 else: |
162 local = False | 195 conntype = "rsh" |
163 user, host, root = m.group(1), m.group(2), m.group(3) | 196 user, host, root = m.group(1), m.group(2), m.group(3) |
164 | 197 |
165 if not local: | 198 if conntype != "pserver": |
166 rsh = os.environ.get("CVS_RSH" or "rsh") | 199 if conntype == "rsh": |
167 if user: | 200 rsh = os.environ.get("CVS_RSH" or "rsh") |
168 cmd = [rsh, '-l', user, host] + cmd | 201 if user: |
169 else: | 202 cmd = [rsh, '-l', user, host] + cmd |
170 cmd = [rsh, host] + cmd | 203 else: |
171 | 204 cmd = [rsh, host] + cmd |
172 self.writep, self.readp = os.popen2(cmd) | 205 |
206 self.writep, self.readp = os.popen2(cmd) | |
207 | |
173 self.realroot = root | 208 self.realroot = root |
174 | 209 |
175 self.writep.write("Root %s\n" % root) | 210 self.writep.write("Root %s\n" % root) |
176 self.writep.write("Valid-responses ok error Valid-requests Mode" | 211 self.writep.write("Valid-responses ok error Valid-requests Mode" |
177 " M Mbinary E Checked-in Created Updated" | 212 " M Mbinary E Checked-in Created Updated" |