equal
deleted
inserted
replaced
38 maxrev = int(self.rev) |
38 maxrev = int(self.rev) |
39 except ValueError: |
39 except ValueError: |
40 try: |
40 try: |
41 # date |
41 # date |
42 util.parsedate(self.rev, ['%Y/%m/%d %H:%M:%S']) |
42 util.parsedate(self.rev, ['%Y/%m/%d %H:%M:%S']) |
43 cmd = "%s -d '1970/01/01 00:00:01' -d '%s'" % (cmd, self.rev) |
43 cmd = '%s -d "1970/01/01 00:00:01" -d "%s"' % (cmd, self.rev) |
44 except util.Abort: |
44 except util.Abort: |
45 raise util.Abort('revision %s is not a patchset number or date' % self.rev) |
45 raise util.Abort('revision %s is not a patchset number or date' % self.rev) |
|
46 cmd += " 2>&1" |
46 |
47 |
47 d = os.getcwd() |
48 d = os.getcwd() |
48 try: |
49 try: |
49 os.chdir(self.path) |
50 os.chdir(self.path) |
50 id = None |
51 id = None |
164 if not conntype: |
165 if not conntype: |
165 # :ext:user@host/home/user/path/to/cvsroot |
166 # :ext:user@host/home/user/path/to/cvsroot |
166 if root.startswith(":ext:"): |
167 if root.startswith(":ext:"): |
167 root = root[5:] |
168 root = root[5:] |
168 m = re.match(r'(?:([^@:/]+)@)?([^:/]+):?(.*)', root) |
169 m = re.match(r'(?:([^@:/]+)@)?([^:/]+):?(.*)', root) |
169 if not m: |
170 # Do not take Windows path "c:\foo\bar" for a connection strings |
|
171 if os.path.isdir(root) or not m: |
170 conntype = "local" |
172 conntype = "local" |
171 else: |
173 else: |
172 conntype = "rsh" |
174 conntype = "rsh" |
173 user, host, root = m.group(1), m.group(2), m.group(3) |
175 user, host, root = m.group(1), m.group(2), m.group(3) |
174 |
176 |
178 if user: |
180 if user: |
179 cmd = [rsh, '-l', user, host] + cmd |
181 cmd = [rsh, '-l', user, host] + cmd |
180 else: |
182 else: |
181 cmd = [rsh, host] + cmd |
183 cmd = [rsh, host] + cmd |
182 |
184 |
183 self.writep, self.readp = os.popen2(cmd) |
185 # popen2 does not support argument lists under Windows |
|
186 cmd = [util.shellquote(arg) for arg in cmd] |
|
187 cmd = util.quotecommand(' '.join(cmd)) |
|
188 self.writep, self.readp = os.popen2(cmd, 'b') |
184 |
189 |
185 self.realroot = root |
190 self.realroot = root |
186 |
191 |
187 self.writep.write("Root %s\n" % root) |
192 self.writep.write("Root %s\n" % root) |
188 self.writep.write("Valid-responses ok error Valid-requests Mode" |
193 self.writep.write("Valid-responses ok error Valid-requests Mode" |
204 def _getfile(self, name, rev): |
209 def _getfile(self, name, rev): |
205 if rev.endswith("(DEAD)"): |
210 if rev.endswith("(DEAD)"): |
206 raise IOError |
211 raise IOError |
207 |
212 |
208 args = ("-N -P -kk -r %s --" % rev).split() |
213 args = ("-N -P -kk -r %s --" % rev).split() |
209 args.append(os.path.join(self.cvsrepo, name)) |
214 args.append(self.cvsrepo + '/' + name) |
210 for x in args: |
215 for x in args: |
211 self.writep.write("Argument %s\n" % x) |
216 self.writep.write("Argument %s\n" % x) |
212 self.writep.write("Directory .\n%s\nco\n" % self.realroot) |
217 self.writep.write("Directory .\n%s\nco\n" % self.realroot) |
213 self.writep.flush() |
218 self.writep.flush() |
214 |
219 |