Merge branch 'master' into python3
authorFredrik Tolf <fredrik@dolda2000.com>
Mon, 7 Jan 2013 06:28:45 +0000 (07:28 +0100)
committerFredrik Tolf <fredrik@dolda2000.com>
Mon, 7 Jan 2013 06:28:45 +0000 (07:28 +0100)
Conflicts:
pdm/sshsock.py

1  2 
pdm-repl
pdm/sshsock.py

diff --combined pdm-repl
+++ b/pdm-repl
@@@ -1,4 -1,4 +1,4 @@@
 -#!/usr/bin/python
 +#!/usr/bin/python3
  
  import sys, getopt, readline
  import pdm.cli
@@@ -14,15 -14,19 +14,19 @@@ for o, a in opts
  if len(args) < 1:
      usage(sys.stderr)
      sys.exit(1)
- cl = pdm.cli.replclient(args[0])
+ try:
+     cl = pdm.cli.replclient(args[0])
+ except Exception as e:
+     sys.stderr.write("%s: %s\n" % (args[0], e))
+     sys.exit(1)
  
  buf = ""
  while True:
      try:
          if buf != "":
 -            line = raw_input("  ")
 +            line = input("  ")
          else:
 -            line = raw_input("% ")
 +            line = input("% ")
      except EOFError:
          break
      if line == "":
diff --combined pdm/sshsock.py
@@@ -9,9 -9,33 +9,33 @@@ class sshsocket(object)
          if port is not None:
              args += ["-p", str(int(port))]
          args += [host]
 -        args += ["python", "-m", "pdm.sshsock", path]
 +        args += ["python3", "-m", "pdm.sshsock", path]
          self.proc = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, close_fds=True)
          fcntl.fcntl(self.proc.stdout, fcntl.F_SETFL, fcntl.fcntl(self.proc.stdout, fcntl.F_GETFL) | os.O_NONBLOCK)
 -        if head != "SSOCK":
+         head = self.recv(5)
 -        if head == "+":
 -            buf = ""
++        if head != b"SSOCK":
+             raise socket.error("unexpected reply from %s: %r" % (host, head))
+         head = self.recv(1)
 -                if r == "":
++        if head == b"+":
++            buf = b""
+             while True:
+                 r = self.recv(1)
 -                elif r == "\n":
++                if r == b"":
+                     raise socket.error("unexpected EOF in SSH socket stream")
 -        elif head == "-":
 -            buf = ""
++                elif r == b"\n":
+                     break
+                 buf += r
+             return
 -                if r in ("\n", ""):
++        elif head == b"-":
++            buf = b""
+             while True:
+                 r = self.recv(1)
 -            raise socket.error(buf)
++                if r in {b"\n", b""}:
+                     break
+                 buf += r
++            raise socket.error(buf.decode("utf-8"))
+         else:
+             raise socket.error("unexpected reply from %s: %r" % (host, head))
  
      def close(self):
          if self.proc is not None:
          self.close()
  
  def cli():
 -    fcntl.fcntl(sys.stdin, fcntl.F_SETFL, fcntl.fcntl(sys.stdin, fcntl.F_GETFL) | os.O_NONBLOCK)
 +    fcntl.fcntl(sys.stdin.buffer, fcntl.F_SETFL, fcntl.fcntl(sys.stdin.buffer, fcntl.F_GETFL) | os.O_NONBLOCK)
      sk = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
      try:
-         sk.connect(sys.argv[1])
+         try:
+             sk.connect(sys.argv[1])
+         except socket.error as err:
+             sys.stdout.write("SSOCK-connect: %s\n" % err)
+             return
+         sys.stdout.write("SSOCK+\n")
 -        buf1 = ""
 -        buf2 = ""
 +        buf1 = b""
 +        buf2 = b""
          while True:
              wfd = []
              if buf1: wfd.append(sk)
 -            if buf2: wfd.append(sys.stdout)
 -            rfd, wfd, efd = select.select([sk, sys.stdin], wfd, [])
 +            if buf2: wfd.append(sys.stdout.buffer)
 +            rfd, wfd, efd = select.select([sk, sys.stdin.buffer], wfd, [])
              if sk in rfd:
                  ret = sk.recv(65536)
 -                if ret == "":
 +                if ret == b"":
                      break
                  else:
                      buf2 += ret
 -            if sys.stdin in rfd:
 -                ret = sys.stdin.read()
 -                if ret == "":
 +            if sys.stdin.buffer in rfd:
 +                ret = sys.stdin.buffer.read()
 +                if ret == b"":
                      break
                  else:
                      buf1 = ret
              if sk in wfd:
                  ret = sk.send(buf1)
                  buf1 = buf1[ret:]
 -            if sys.stdout in wfd:
 -                sys.stdout.write(buf2)
 -                sys.stdout.flush()
 -                buf2 = ""
 +            if sys.stdout.buffer in wfd:
 +                sys.stdout.buffer.write(buf2)
 +                sys.stdout.buffer.flush()
 +                buf2 = b""
      finally:
          sk.close()