diff options
Diffstat (limited to 'mini-dinstall')
| -rwxr-xr-x | mini-dinstall | 53 |
1 files changed, 17 insertions, 36 deletions
diff --git a/mini-dinstall b/mini-dinstall index 8d53edc..4ad64a1 100755 --- a/mini-dinstall +++ b/mini-dinstall @@ -21,7 +21,7 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import os, sys, re, glob, getopt, time, traceback, lzma, getpass, socket -import shutil, threading, select, queue, socketserver, datetime +import shutil, threading, select, queue, socketserver, datetime, subprocess import logging, logging.handlers import apt_pkg apt_pkg.init() @@ -977,13 +977,10 @@ class ArchiveDir: if not os.access(script, os.X_OK): self._logger.error("Can't execute script \"%s\"" % script) return True - pid = os.fork() - if pid == 0: - os.execlp(script, script, changefilename) - sys.exit(1) - (pid, status) = os.waitpid(pid, 0) - if status or (not os.WIFEXITED(status) and os.WEXITSTATUS(status) != 0): - self._logger.error('script "%s" exited with error code %d' % (cmd, os.WEXITSTATUS(status))) + try: + subprocess.check_call([script, changefilename]) + except subprocess.CalledProcessError as e: + self._logger.error('script "%s" exited with error code %d' % (cmd, e.returncode)) return True return False @@ -1101,17 +1098,6 @@ class ArchiveDirIndexer(threading.Thread): self._logger.debug("Running: %s" % ' '.join(cmdline)) if no_act: return - (infd, outfd) = os.pipe() - pid = os.fork() - if pid == 0: - os.chdir(self._dir) - os.chdir('..') - os.close(infd) - misc.dup2(outfd, 1) - os.execvp('apt-ftparchive', cmdline) - os.exit(1) - os.close(outfd) - stdout = os.fdopen(infd) if arch: packagesfilename = os.path.join(dir, '%s-%s' % (name, arch)) else: @@ -1119,17 +1105,17 @@ class ArchiveDirIndexer(threading.Thread): newpackagesfilename = packagesfilename + '.new' xzpackagesfilename = packagesfilename + '.xz' newxzpackagesfilename = newpackagesfilename + '.xz' - newpackagesfile = open(newpackagesfilename, 'w') - newxzpackagesfile = lzma.open(newxzpackagesfilename, 'wt') - buf = stdout.read(8192) + newpackagesfile = open(newpackagesfilename, 'wb') + newxzpackagesfile = lzma.open(newxzpackagesfilename, 'w') + process = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=os.path.join(self._dir, '..')) + buf = process.stdout.read(8192) while buf: newpackagesfile.write(buf) newxzpackagesfile.write(buf) - buf = stdout.read(8192) - stdout.close() - (pid, status) = os.waitpid(pid, 0) - if status or (not os.WIFEXITED(status) and os.WEXITSTATUS(status) != 0): - raise DinstallException("apt-ftparchive exited with status code %d" % status) + buf = process.stdout.read(8192) + process.wait() + if process.returncode != 0: + raise DinstallException("apt-ftparchive exited with status code %d" % process.returncode) newpackagesfile.close() newxzpackagesfile.close() shutil.move(newpackagesfilename, packagesfilename) @@ -1176,15 +1162,10 @@ class ArchiveDirIndexer(threading.Thread): if not os.access(script, os.X_OK): self._logger.error("Can't execute script \"%s\"" % script) return True - pid = os.fork() - if pid == 0: - if dir: - os.chdir(dir) - os.execlp(script, script, changefilename) - sys.exit(1) - (pid, status) = os.waitpid(pid, 0) - if status or (not os.WIFEXITED(status) and os.WEXITSTATUS(status) != 0): - self._logger.error('script "%s" exited with error code %d' % (cmd, os.WEXITSTATUS(status))) + try: + subprocess.check_call([script, changefilename], cwd=dir) + except subprocess.CalledProcessError as e: + self._logger.error('script "%s" exited with error code %d' % (cmd, e.returncode)) return True return False |
