chiark / gitweb /
Handle ssh output buffering better
authorCiaran Gultnieks <ciaran@ciarang.com>
Tue, 22 Jan 2013 16:11:39 +0000 (16:11 +0000)
committerCiaran Gultnieks <ciaran@ciarang.com>
Tue, 22 Jan 2013 16:11:39 +0000 (16:11 +0000)
fdroidserver/build.py

index 403c01ef1b9210f65e355c0347ef99d913cd3d2f..bfe35446dd13357e701b1763fa3d785cf2402fe7 100644 (file)
@@ -216,8 +216,6 @@ def build_server(app, thisbuild, vcs, build_dir, output_dir, sdk_path, force):
         # Execute the build script...
         print "Starting build..."
         chan = sshs.get_transport().open_session()
-        stdoutf = chan.makefile('r')
-        stderrf = chan.makefile_stderr('r')
         cmdline = 'python build.py --on-server'
         if force:
             cmdline += ' --force --test'
@@ -226,9 +224,16 @@ def build_server(app, thisbuild, vcs, build_dir, output_dir, sdk_path, force):
         output = ''
         error = ''
         while not chan.exit_status_ready():
-            output += stdoutf.read()
-            error += stderrf.read()
+            while chan.recv_ready():
+                output += chan.recv(1024)
+            while chan.recv_stderr_ready():
+                error += chan.recv_stderr(1024)
+        print "...getting exit status"
         returncode = chan.recv_exit_status()
+        while chan.recv_ready():
+            output += chan.recv(1024)
+        while chan.recv_stderr_ready():
+            error += chan.recv_stderr(1024)
         if returncode != 0:
             raise BuildException("Build.py failed on server for %s:%s" % (app['id'], thisbuild['version']), output.strip(), error.strip())