diff options
author | Guido Günther <agx@sigxcpu.org> | 2018-01-29 15:25:39 +0100 |
---|---|---|
committer | Guido Günther <agx@sigxcpu.org> | 2018-01-29 15:52:54 +0100 |
commit | fd81e454339de50931594bd150857eb88a516a98 (patch) | |
tree | f70520f684c8e7725255b8712df9a4089fc5c1d0 /gbp/pkg | |
parent | 5f2120b353dad294cf98fbc2cc704e742d87d6be (diff) |
Turn on several threads when creating xz/lzma tarballs
and not using pristine-tar.
Gives a 50% speedup on my machine:
$ time gbp export-orig --no-pristine-tar --force-create
gbp:info: Creating thunderbird_52.6.0.orig.tar.xz from 'upstream/52.6.0'
gbp:info: Creating additional tarball 'thunderbird_52.6.0.orig-thunderbird-l10n.tar.xz' from 'dea43c2b49f11d68f05edac2bd9d6c5d1e1f4bcb'
gbp:info: Creating additional tarball 'thunderbird_52.6.0.orig-lightning-l10n.tar.xz' from '9adcd261726ccb160c4fd6947f7cbfe9df2e581b'
real 8m27,153s
user 7m23,717s
sys 0m3,015s
0|agx@bogon:/var/scratch/debian/icedove/icedove (debian/wheezy)$ time gbp-from-sourcetree export-orig --no-pristine-tar --force-create
gbp:info: Creating thunderbird_52.6.0.orig.tar.xz from 'upstream/52.6.0'
gbp:info: Creating additional tarball 'thunderbird_52.6.0.orig-thunderbird-l10n.tar.xz' from 'dea43c2b49f11d68f05edac2bd9d6c5d1e1f4bcb'
gbp:info: Creating additional tarball 'thunderbird_52.6.0.orig-lightning-l10n.tar.xz' from '9adcd261726ccb160c4fd6947f7cbfe9df2e581b'
real 4m3,080s
user 11m18,733s
sys 0m3,499s
Thanks: Carsten Schönert for the suggestion
Closes: #888572
Diffstat (limited to 'gbp/pkg')
-rw-r--r-- | gbp/pkg/compressor.py | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/gbp/pkg/compressor.py b/gbp/pkg/compressor.py index b1b795fb..285f6a29 100644 --- a/gbp/pkg/compressor.py +++ b/gbp/pkg/compressor.py @@ -26,14 +26,21 @@ class Compressor(object): 'lzma': '', 'xz': ''} + ParallelOpts = {'lzma': '-T0', + 'xz': '-T0'} + Exts = {'gzip': 'gz', 'bzip2': 'bz2', 'lzma': 'lzma', 'xz': 'xz'} - def __init__(self, type_, level=None): + def __init__(self, type_, level=None, parallel=False): self._type = type_ self._level = int(level) if level not in [None, ''] else None + self._more_opts = self.Opts.get(self._type, '') + self._parallel = parallel + if parallel: + self._more_opts += self.ParallelOpts.get(self._type, '') def is_known(self): return self.type in self.Opts.keys() @@ -47,12 +54,12 @@ class Compressor(object): return self._level @property - def _level_opt(self): - return '-%d' % self.level if self.level is not None else '' + def parallel(self): + return self._parallel @property - def _more_opts(self): - return self.Opts.get(self._type, '') + def _level_opt(self): + return '-%d' % self.level if self.level is not None else '' def cmdline(self, stdout=True): """ @@ -67,9 +74,12 @@ class Compressor(object): def __repr__(self): """ >>> Compressor('gzip').__repr__() - "<compressor type='gzip' >" + "<compressor type='gzip'>" >>> Compressor('gzip', 9).__repr__() "<compressor type='gzip' level=9>" + >>> Compressor('xz', 9, True).__repr__() + "<compressor type='xz' level=9 parallel=True>" """ - level_str = "level=%s" % self.level if self.level is not None else '' - return "<compressor type='%s' %s>" % (self.type, level_str) + opts_str = " level=%s" % self.level if self.level is not None else "" + opts_str += " parallel=True" if self.parallel else "" + return "<compressor type='%s'%s>" % (self.type, opts_str) |