pass
-def orig_needs_repack(upstream_source, options):
- """
- Determine if the upstream sources needs to be repacked
-
- We repack if
- 1. we want to filter out files and use pristine tar since we want
- to make a filtered tarball available to pristine-tar
- 2. when we don't have a suitable upstream tarball (e.g. zip archive or unpacked dir)
- and want to use filters
- 3. when we don't have a suitable upstream tarball (e.g. zip archive or unpacked dir)
- and want to use pristine-tar
- """
- if ((options.pristine_tar and options.filter_pristine_tar and len(options.filters) > 0)):
- return True
- elif not upstream_source.is_tarball():
- if len(options.filters):
- return True
- elif options.pristine_tar:
- return True
- return False
-
-
def cleanup_tmp_tree(tree):
"""remove a tree of temporary files"""
try:
gbp.log.err("Removal of tmptree %s failed." % tree)
-def is_link_target(target, link):
- """does symlink link already point to target?"""
- if os.path.exists(link):
- if os.path.samefile(target, link):
- return True
- return False
-
-
def ask_package_name(default, name_validator_func, err_msg):
"""
Ask the user for the source package name.
gbp.log.warn("\nNot a valid upstream version: '%s'.\n%s" % (version, err_msg))
-def repack_source(source, new_name, unpack_dir, filters, new_prefix=None):
- """Repack the source tree"""
- repacked = source.pack(new_name, filters, new_prefix)
- if source.is_tarball(): # the tarball was filtered on unpack
- repacked.unpacked = source.unpacked
- else: # otherwise unpack the generated tarball get a filtered tree
- repacked.unpack(unpack_dir)
- return repacked
-
-
def prepare_pristine_tar(source, pkg_name, pkg_version, pristine_commit_name,
filters=None, prefix=None, tmpdir=None):
"""
from gbp.errors import GbpError
from gbp.format import format_msg
import gbp.log
-from gbp.scripts.common.import_orig import (orig_needs_repack, cleanup_tmp_tree,
- ask_package_name, ask_package_version,
- repack_source, is_link_target)
-
-
-def prepare_pristine_tar(archive, pkg, version):
- """
- Prepare the upstream source for pristine tar import.
-
- This checks if the upstream source is actually a tarball
- and creates a symlink from I{archive}
- to I{<pkg>_<version>.orig.tar.<ext>} so pristine-tar will
- see the correct basename.
-
- @param archive: the upstream source's name
- @type archive: C{str}
- @param pkg: the source package's name
- @type pkg: C{str}
- @param version: the upstream version number
- @type version: C{str}
- @rtype: C{str}
- """
- linked = False
- if os.path.isdir(archive):
- return None
-
- ext = os.path.splitext(archive)[1]
- if ext in ['.tgz', '.tbz2', '.tlz', '.txz' ]:
- ext = ".%s" % ext[2:]
-
- link = "../%s_%s.orig.tar%s" % (pkg, version, ext)
-
- if os.path.basename(archive) != os.path.basename(link):
- try:
- if not is_link_target(archive, link):
- os.symlink(os.path.abspath(archive), link)
- linked = True
- except OSError as err:
- raise GbpError("Cannot symlink '%s' to '%s': %s" % (archive, link, err[1]))
- return (link, linked)
- else:
- return (archive, linked)
+from gbp.pkg import compressor_opts
+from gbp.scripts.common.import_orig import (cleanup_tmp_tree, ask_package_name,
+ ask_package_version,
+ prepare_sources)
def upstream_import_commit_msg(options, version):
return archive
-def repacked_tarball_name(source, name, version):
- if source.is_orig():
- # Repacked orig tarball needs a different name since there's already
- # one with that name
- name = os.path.join(
- os.path.dirname(source.path),
- os.path.basename(source.path).replace(".tar", ".gbp.tar"))
+def pristine_tarball_name(source, pkg_name, pkg_version):
+ if source.is_tarball():
+ if source.compression:
+ comp_ext = '.' + compressor_opts[source.compression][1]
+ else:
+ comp_ext = ''
else:
- # Repacked sources or other archives get canonical name
- name = os.path.join(
- os.path.dirname(source.path),
- "%s_%s.orig.tar.bz2" % (name, version))
- return name
+ # Need to repack and/or mangle filename if the archive is not
+ # pristine-tar-compatible -> we decide to create gz compressed tarball
+ comp_ext = '.gz'
+ return '%s_%s.orig.tar%s' % (pkg_name, pkg_version, comp_ext)
def set_bare_repo_options(options):
def main(argv):
ret = 0
tmpdir = tempfile.mkdtemp(dir='../')
- pristine_orig = None
- linked = False
(options, args) = parse_args(argv)
if not options:
else:
raise GbpError(no_upstream_branch_msg % options.upstream_branch)
- (sourcepackage, version) = detect_name_and_version(repo, source, options)
+ (pkg_name, version) = detect_name_and_version(repo, source, options)
(clean, out) = repo.is_clean()
if not clean and not is_empty:
if repo.bare:
set_bare_repo_options(options)
- 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(source.unpacked, '.git/')):
+ if os.path.isdir(os.path.join(unpacked_orig, '.git/')):
raise GbpError("The orig tarball contains .git metadata - giving up.")
except OSError:
pass
gbp.log.info("Importing '%s' to branch '%s'%s..." % (source.path,
upstream_branch,
filter_msg))
- gbp.log.info("Source package is %s" % sourcepackage)
+ gbp.log.info("Source package is %s" % pkg_name)
gbp.log.info("Upstream version is %s" % version)
import_branch = [ options.upstream_branch, None ][is_empty]
else:
parents = None
- commit = repo.commit_dir(source.unpacked,
+ commit = repo.commit_dir(unpacked_orig,
msg=msg,
branch=import_branch,
other_parents=parents,
create_missing_branch=options.create_missing_branches)
- if options.pristine_tar:
- if pristine_orig:
- repo.pristine_tar.commit(pristine_orig, upstream_branch)
- else:
- gbp.log.warn("'%s' not an archive, skipping pristine-tar" % source.path)
+ if options.pristine_tar and pristine_orig:
+ repo.pristine_tar.commit(pristine_orig, upstream_branch)
tag = repo.version_to_tag(options.upstream_tag, version)
repo.create_tag(name=tag,
if current_branch in [ options.upstream_branch,
repo.pristine_tar_branch]:
repo.force_head(current_branch, hard=True)
+ # Create symlink, if requested
+ if options.symlink_orig:
+ if source.is_tarball():
+ link = os.path.join('..', pristine_name)
+ if not (os.path.exists(link) and
+ os.path.samefile(link, source.path)):
+ gbp.log.info('Creating symlink to %s' % source.path)
+ os.symlink(source.path, link)
+ else:
+ gbp.log.warn('Orig source not a tarball, not symlinked')
+
except (gbpc.CommandExecFailed, GitRepositoryError) as err:
msg = err.__str__() if len(err.__str__()) else ''
raise GbpError("Import of %s failed: %s" % (source.path, msg))
gbp.log.err(err)
ret = 1
- if pristine_orig and linked and not options.symlink_orig:
- os.unlink(pristine_orig)
-
if tmpdir:
cleanup_tmp_tree(tmpdir)