pactest : Use tarfile module.

Previously, tar was called manually with os.system. This caused one fork per
package/db creation, which is costly, especially on cygwin. Besides, it also
caused some problems with directory with whitespaces (that could also be
fixed with quotes, but well..)
Using tarfile module is cleaner and more efficient, and still easy enough.

Benchmark (time make check) :
- windows / cygwin
prepatch:
real    6m36.360s
user    2m28.914s
sys     2m35.866s
postpatch:
real    5m25.428s
user    1m26.029s
sys     2m0.006s

- linux
prepatch:
real    1m22.629s
user    0m31.498s
sys     0m18.899s
postpatch:
real    1m11.465s
user    0m26.382s
sys     0m12.986s

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
This commit is contained in:
Chantry Xavier 2008-04-17 09:02:11 +02:00 committed by Dan McGee
parent 5e375aa9d3
commit c465d9e848
2 changed files with 20 additions and 12 deletions

View File

@ -19,6 +19,7 @@
import os
import tempfile
import shutil
import tarfile
import pmpkg
from util import *
@ -343,7 +344,13 @@ def gensync(self, path):
# Generate database archive
mkdir(path)
archive = os.path.join(path, "%s%s" % (self.treename, PM_EXT_DB))
os.system("tar zcf %s *" % archive)
tar = tarfile.open(archive, "w:gz")
for root, dirs, files in os.walk('.'):
for d in dirs:
tar.add(os.path.join(root, d), recursive=False)
for f in files:
tar.add(os.path.join(root, f))
tar.close()
os.chdir(curdir)
shutil.rmtree(tmpdir)

View File

@ -20,6 +20,7 @@
import tempfile
import stat
import shutil
import tarfile
from util import *
@ -153,25 +154,25 @@ def makepkg(self, path):
for i in self.backup:
data.append("backup = %s" % i)
mkfile(".PKGINFO", "\n".join(data))
targets = ".PKGINFO"
# .INSTALL
empty = 1
if len(self.install.values()) > 0:
empty = 0
if not empty:
mkinstallfile(".INSTALL", self.install)
targets += " .INSTALL"
# package files
if self.files:
targets += " *"
#safely create the dir
# safely create the dir
mkdir(os.path.dirname(self.path))
# Generate package archive
os.system("tar zcf %s %s" % (self.path, targets))
tar = tarfile.open(self.path, "w:gz")
# package files
for root, dirs, files in os.walk('.'):
for d in dirs:
tar.add(os.path.join(root, d), recursive=False)
for f in files:
tar.add(os.path.join(root, f))
tar.close()
os.chdir(curdir)
shutil.rmtree(tmpdir)