diff --git a/Tools/PyJobTransforms/python/trfExe.py b/Tools/PyJobTransforms/python/trfExe.py index d8bfa657f4d1ab94fff99aca97e448032f12d15a..87d7bce4fa8c3bb74f731754b70308e8885b6378 100755 --- a/Tools/PyJobTransforms/python/trfExe.py +++ b/Tools/PyJobTransforms/python/trfExe.py @@ -658,7 +658,6 @@ class scriptExecutor(transformExecutor): try: p = subprocess.Popen(self._cmd, shell = False, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, bufsize = 1) - if self._memMonitor: try: self._memSummaryFile = 'mem.summary.' + self._name + '.json' @@ -1885,12 +1884,23 @@ class archiveExecutor(scriptExecutor): elif self.conf.argdict['compressionType'] == 'none': pass elif self._exe == 'zip': - self._cmd = [self._exe] - if 'compressionLevel' in self.conf.argdict: - self._cmd.append(self.conf.argdict['compressionLevel']) - self._cmd.extend([self.conf.argdict['outputArchFile'].value[0]]) - if '.' not in self.conf.argdict['outputArchFile'].value[0]: - errmsg = 'Output filename must end in ".", ".zip" or ".anyname" ' - raise trfExceptions.TransformExecutionException(trfExit.nameToCode('TRF_OUTPUT_FILE_ERROR'), errmsg) - self._cmd.extend(self.conf.argdict['inputDataFile'].value) + self._cmd = ['python'] + try: + with open('zip_wrapper.py', 'w') as zip_wrapper: + print >> zip_wrapper, "import zipfile" + print >> zip_wrapper, "zf = zipfile.ZipFile('{}', mode='w', allowZip64=True)".format(self.conf.argdict['outputArchFile'].value[0]) + print >> zip_wrapper, "for f in {}:".format(self.conf.argdict['inputDataFile'].value) + print >> zip_wrapper, " print 'Zipping file {}'.format(f)" + print >> zip_wrapper, " zf.write(f, compress_type=zipfile.ZIP_STORED)" + print >> zip_wrapper, "zf.close()" + os.chmod('zip_wrapper.py', 0755) + except (IOError, OSError) as e: + errMsg = 'error writing zip wrapper {fileName}: {error}'.format(fileName = 'zip_wrapper.py', + error = e + ) + msg.error(errMsg) + raise trfExceptions.TransformExecutionException(trfExit.nameToCode('TRF_EXEC_SETUP_WRAPPER'), + errMsg + ) + self._cmd.append('zip_wrapper.py') super(archiveExecutor, self).preExecute(input=input, output=output) diff --git a/Tools/PyJobTransforms/scripts/Archive_tf.py b/Tools/PyJobTransforms/scripts/Archive_tf.py index d8afd52958ddd7775b8d0785ed5bfb65837ea599..d943496b1ce796faaed3df4ec6883c29e51e5376 100755 --- a/Tools/PyJobTransforms/scripts/Archive_tf.py +++ b/Tools/PyJobTransforms/scripts/Archive_tf.py @@ -46,7 +46,6 @@ def addMyArgs(parser): # Use arggroup to get these arguments in their own sub-section (of --help) parser.defineArgGroup('Archive_tf', 'Archive transform options') parser.defineArgGroup('Tar archiver', 'Options') - parser.defineArgGroup('Zip archiver', 'Options') parser.add_argument('--exe', group='Archive_tf', help='Archiving command. Default is zip', choices=['zip', 'tar'], default='zip') @@ -59,9 +58,6 @@ def addMyArgs(parser): parser.add_argument('--compressionType', group='Tar archiver', help='Underlying compression type of tar. Default is none', choices=['gzip', 'bzip2', 'none'], default='none') - parser.add_argument('--compressionLevel', group='Zip archiver', - help='Compression level of zip. Default is -0', choices=['-0', '-1', '-2', '-3', '-4', '-5', '-6', '-7', '-8', '-9'], - default='-0') if __name__ == '__main__': main()