hgext/convert/cvs.py
changeset 5308 9400d677efc7
parent 5173 7e05bdeee7de
parent 5306 7256cc396bbf
child 5381 6874368120dc
equal deleted inserted replaced
5300:81575b7b505e 5308:9400d677efc7
    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