return True
return False
- @classmethod
- def guess_upstream_src_version(cls, filename, extra_regex=r''):
- """
- Guess the package name and version from the filename of an upstream
- archive.
-
- @param filename: filename (archive or directory) from which to guess
- @type filename: C{string}
- @param extra_regex: additional regex to apply, needs a 'package' and a
- 'version' group
- @return: (package name, version) or ('', '')
- @rtype: tuple
-
- >>> PkgPolicy.guess_upstream_src_version('foo-bar_0.2.orig.tar.gz')
- ('foo-bar', '0.2')
- >>> PkgPolicy.guess_upstream_src_version('foo-Bar_0.2.orig.tar.gz')
- ('foo-Bar', '0.2.orig')
- >>> PkgPolicy.guess_upstream_src_version('git-bar-0.2.tar.gz')
- ('git-bar', '0.2')
- >>> PkgPolicy.guess_upstream_src_version('git-bar-0.2-rc1.tar.gz')
- ('git-bar', '0.2-rc1')
- >>> PkgPolicy.guess_upstream_src_version('git-bar-0.2:~-rc1.tar.gz')
- ('git-bar', '0.2:~-rc1')
- >>> PkgPolicy.guess_upstream_src_version('git-Bar-0A2d:rc1.tar.bz2')
- ('git-Bar', '0A2d:rc1')
- >>> PkgPolicy.guess_upstream_src_version('git-1.tar.bz2')
- ('git', '1')
- >>> PkgPolicy.guess_upstream_src_version('kvm_87+dfsg.orig.tar.gz')
- ('kvm', '87+dfsg')
- >>> PkgPolicy.guess_upstream_src_version('foo-Bar-a.b.tar.gz')
- ('', '')
- >>> PkgPolicy.guess_upstream_src_version('foo-bar_0.2.orig.tar.xz')
- ('foo-bar', '0.2')
- >>> PkgPolicy.guess_upstream_src_version('foo-bar_0.2.tar.gz')
- ('foo-bar', '0.2')
- >>> PkgPolicy.guess_upstream_src_version('foo-bar_0.2.orig.tar.lzma')
- ('foo-bar', '0.2')
- >>> PkgPolicy.guess_upstream_src_version('foo-bar-0.2.zip')
- ('foo-bar', '0.2')
- >>> PkgPolicy.guess_upstream_src_version('foo-bar-0.2.tlz')
- ('foo-bar', '0.2')
- """
- version_chars = r'[a-zA-Z\d\.\~\-\:\+]'
- basename = parse_archive_filename(os.path.basename(filename))[0]
-
- version_filters = map ( lambda x: x % version_chars,
- ( # Debian upstream tarball: package_'<version>.orig.tar.gz'
- r'^(?P<package>[a-z\d\.\+\-]+)_(?P<version>%s+)\.orig',
- # Upstream 'package-<version>.tar.gz'
- # or Debian native 'package_<version>.tar.gz'
- # or directory 'package-<version>':
- r'^(?P<package>[a-zA-Z\d\.\+\-]+)(-|_)(?P<version>[0-9]%s*)'))
- if extra_regex:
- version_filters = extra_regex + version_filters
-
- for filter in version_filters:
- m = re.match(filter, basename)
- if m:
- return (m.group('package'), m.group('version'))
- return ('', '')
-
@staticmethod
def guess_upstream_src_version(filename, extra_regex=r''):
"""
# bit clearer.
gbp.log.warn("\nNot a valid upstream version: '%s'.\n%s" % (version, err_msg))
-
-def prepare_pristine_tar(source, pkg_name, pkg_version, pristine_commit_name,
- filters=None, prefix=None, tmpdir=None):
- """
- Prepare the upstream sources for pristine-tar import
-
- @param source: original upstream sources
- @type source: C{UpstreamSource}
- @param pkg_name: package name
- @type pkg_name: C{str}
- @param pkg_version: upstream version of the package
- @type pkg_version: C{str}
- @param pristine_commit_name: archive filename to commit to pristine-tar
- @type pristine_commit_name: C{str} or C{None}
- @param filters: filter to exclude files
- @type filters: C{list} of C{str} or C{None}
- @param prefix: prefix (i.e. leading directory of files) to use in
- pristine-tar, set to C{None} to not mangle orig archive
- @type prefix: C{str} or C{None}
- @param tmpdir: temporary working dir (cleanup left to caller)
- @type tmpdir: C{str}
- @return: prepared source archive
- @rtype: C{UpstreamSource}
- """
- need_repack = False
- if source.is_dir():
- if prefix is None:
- prefix = '%s-%s' % (pkg_name, pkg_version)
- gbp.log.info("Using guessed prefix '%s/' for pristine-tar" % prefix)
- need_repack = True
- else:
- if prefix is not None and prefix == source.prefix:
- prefix = None
- comp = parse_archive_filename(pristine_commit_name)[2]
- if filters or prefix is not None or source.compression != comp:
- if not source.unpacked:
- unpack_dir = tempfile.mkdtemp(prefix='pristine_unpack_',
- dir=tmpdir)
- source.unpack(unpack_dir)
- need_repack = True
- pristine_path = os.path.join(tmpdir, pristine_commit_name)
- if need_repack:
- gbp.log.debug("Packing '%s' from '%s' for pristine-tar" %
- (pristine_path, source.unpacked))
- pristine = source.pack(pristine_path, filters, prefix)
- else:
- # Just create symlink for mangling the pristine tarball name
- os.symlink(source.path, pristine_path)
- pristine = source.__class__(pristine_path)
-
- return pristine
-
-
def prepare_sources(source, pkg_name, pkg_version, pristine_commit_name,
filters, filter_pristine, prefix, tmpdir):
"""
tmpdir)
pristine_path = pristine.path if pristine else ''
return (filtered.unpacked, pristine_path)
+
def repack_source(source, new_name, unpack_dir, filters, new_prefix=None):
"""Repack the source tree"""
repacked = source.pack(new_name, filters, new_prefix)
return pristine
-def prepare_sources(source, pkg_name, pkg_version, pristine_commit_name,
- filters, filter_pristine, prefix, tmpdir):
- """
- Prepare upstream sources for importing
-
- Unpack, filter and repack sources for importing to git and to pristine-tar.
-
- @param source: original upstream sources
- @type source: C{UpstreamSource}
- @param pkg_name: package name
- @type pkg_name: C{str}
- @param pkg_version: upstream version of the package
- @type pkg_version: C{str}
- @param pristine_commit_name: archive filename to commit to pristine-tar
- @type pristine_commit_name: C{str} or C{None}
- @param filters: filter to exclude files
- @type filters: C{list} of C{str}
- @param filter_pristine: filter pristine-tar, too
- @type filter_pristine: C{bool}
- @param prefix: prefix (i.e. leading directory of files) to use in
- pristine-tar, set to C{None} to not mangle orig archive
- @type prefix: C{str} or C{None}
- @param tmpdir: temporary working dir (cleanup left to caller)
- @type tmpdir: C{str}
- @return: path to prepared source tree and tarball to commit to pristine-tar
- @rtype: C{tuple} of C{str}
- """
- pristine = None
- # Determine parameters for pristine tar
- pristine_filters = filters if filters and filter_pristine else None
- pristine_prefix = None
- if prefix is not None and prefix != 'auto':
- prefix_subst = {'name': pkg_name,
- 'version': pkg_version,
- 'upstreamversion': pkg_version}
- pristine_prefix = prefix % prefix_subst
- # Handle unpacked sources, i.e. importing a directory
- if source.is_dir():
- if pristine_commit_name:
- gbp.log.warn('Preparing unpacked sources for pristine-tar')
- pristine = prepare_pristine_tar(source, pkg_name, pkg_version,
- pristine_commit_name,
- pristine_filters, pristine_prefix,
- tmpdir)
- if filters:
- # Re-use sources packed for pristine-tar, if available
- if pristine:
- packed = pristine
- else:
- packed_fn = tempfile.mkstemp(prefix="packed_", dir=tmpdir,
- suffix='.tar')[1]
- gbp.log.debug("Packing '%s' to '%s'" % (source.path, packed_fn))
- packed = source.pack(packed_fn)
- unpack_dir = tempfile.mkdtemp(prefix='filtered_', dir=tmpdir)
- filtered = packed.unpack(unpack_dir, filters)
- else:
- filtered = source
- # Handle source archives
- else:
- unpack_dir = tempfile.mkdtemp(prefix='filtered_', dir=tmpdir)
- gbp.log.debug("Unpacking '%s' to '%s'" % (source.path, unpack_dir))
- filtered = source.unpack(unpack_dir, filters)
- if pristine_commit_name:
- pristine = prepare_pristine_tar(source, pkg_name, pkg_version,
- pristine_commit_name,
- pristine_filters, pristine_prefix,
- tmpdir)
- pristine_path = pristine.path if pristine else ''
- return (filtered.unpacked, pristine_path)
-
from gbp.format import format_msg
import gbp.log
from gbp.pkg import compressor_opts
-from gbp.scripts.common.import_orig import (orig_needs_repack, cleanup_tmp_tree,
- ask_package_name, ask_package_version,
- repack_source, is_link_target)
-
+from gbp.scripts.common.import_orig import (cleanup_tmp_tree, ask_package_name,
+ sk_package_version,
+ prepare_sources)
def prepare_pristine_tar(archive, pkg, version):
"""
unpacked_orig, pristine_orig = prepare_sources(
source, pkg_name, version, prepare_pristine, options.filters,
options.filter_pristine_tar, None, tmpdir)
- if not source.is_dir():
- unpack_dir = tempfile.mkdtemp(prefix='unpack', dir=tmpdir)
- source = source.unpack(unpack_dir, options.filters)
- gbp.log.debug("Unpacked '%s' to '%s'" % (source.path, source.unpacked))
-
- if orig_needs_repack(source, options):
- gbp.log.debug("Filter pristine-tar: repacking '%s' from '%s'" % (source.path, source.unpacked))
- repack_dir = tempfile.mkdtemp(prefix='repack', dir=tmpdir)
- repack_name = repacked_tarball_name(source, sourcepackage, version)
- source = repack_source(source, repack_name, repack_dir, options.filters)
-
- (pristine_orig, linked) = prepare_pristine_tar(source.path,
- sourcepackage,
- version)
+ # Prepare sources for importing
+ pristine_name = pristine_tarball_name(source, pkg_name, version)
+ prepare_pristine = pristine_name if options.pristine_tar else None
+ unpacked_orig, pristine_orig = prepare_sources(
+ source, pkg_name, version, prepare_pristine, options.filters,
+ options.filter_pristine_tar, None, tmpdir)
# Don't mess up our repo with git metadata from an upstream tarball
try:
if os.path.isdir(os.path.join(unpacked_orig, '.git/')):