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"