from gitbuildsys.log import LOGGER as log
from gbp.scripts.buildpackage_rpm import main as gbp_build
+from gbp.scripts.buildpackage import main as gbp_build_deb
from gbp.rpm.git import GitRepositoryError, RpmGitRepository
import gbp.rpm as rpm
from gbp.errors import GbpError
except GitRepositoryError as excobj:
raise GbsError("Repository error: %s" % excobj)
+def export_source_deb(args, commit, package_dir, out_dir):
+ """
+ Export packaging files using dpkg-source
+ """
+ # Make sure that package dir is a git repo.
+ orig_dir = os.getcwd()
+ os.chdir(package_dir)
+
+ tmpdir = configmgr.get('tmpdir', 'general')
+ tempd = utils.Temp(prefix=os.path.join(tmpdir, '.dpkgsource_tmp_'), directory=True)
+ tmp_dir = tempd.path
+
+ # If export source in current package, dpkg-source would crash.
+ # A tmp dir need be created to store exported files.
+ tmp_export_dir = configmgr.get('tmpdir', 'general')
+ tempd = utils.Temp(prefix=os.path.join(tmpdir, '.dpkgsource_export_'), directory=True)
+ tmp_export_dir = tempd.path
+
+ argv = ["argv[0] placeholder",
+ "--git-color-scheme=magenta:green:yellow:red",
+ "--git-ignore-branch",
+ "--git-no-hooks",
+ "--git-notify=off",
+ "--git-ignore-new",
+ "--git-tmp-dir=%s" % tmp_dir,
+ "--git-export-dir=%s" % tmp_export_dir,
+ "--git-purge"]
+
+ if args.debug:
+ argv.append("--git-verbose")
+
+ argv.append("--git-export=%s" % commit)
+
+ # git-buildpackage export original source firstly, 'cd ..' is required.
+ export_command = "cd ..; dpkg-source -I -i -b %s" % (package_dir)
+ log.debug("dpkg-source export package command: [ %s ]." % export_command)
+ argv.append("--git-builder=%s" % (export_command))
+
+ try:
+ ret = gbp_build_deb(argv)
+ if ret:
+ raise GbsError("Failed to export packaging files from git tree")
+ except GitRepositoryError as excobj:
+ raise GbsError("Repository error: %s" % excobj)
+ finally:
+ os.chdir(orig_dir)
+
+ exported_files = os.listdir(tmp_export_dir)
+ for file_name in exported_files:
+ # Original source code are also exported into a dir.
+ file_or_dir = os.path.join(tmp_export_dir, file_name)
+ if os.path.isfile(file_or_dir):
+ log.debug('source deb move file: %s' % (file_or_dir))
+ shutil.move(file_or_dir, os.path.join(out_dir, file_name))
+
+ log.info('source deb generated to dir: %s' % (out_dir))
def main(args):
"""gbs export entry point."""
utils.git_status_checker(repo, args)
workdir = repo.path
-
# Only guess spec filename here, parse later when we have the correct
# spec file at hand
if args.commit:
commit = 'WC.UNTRACKED'
else:
commit = 'HEAD'
- orphan_packaging = configmgr.get('packaging_branch', 'orphan-devel')
- spec_commit_id = orphan_packaging if orphan_packaging else commit
+
log.debug("check packaging_dir")
packaging_dir = get_packaging_dir(args)
- main_spec, rest_specs = utils.guess_spec(workdir, packaging_dir,
- args.spec, spec_commit_id)
+
log.debug("check outdir")
if args.outdir:
outdir = args.outdir
raise GbsError('no write permission to outdir: %s' % outdir)
else:
mkdir_p(outdir)
+
+ if args.deb:
+ log.debug("export deb source, package dir: %s, out dir: %s." % (workdir, outdir))
+ export_source_deb(args, commit, workdir, outdir)
+ return 0
+
+ orphan_packaging = configmgr.get('packaging_branch', 'orphan-devel')
+ spec_commit_id = orphan_packaging if orphan_packaging else commit
+ main_spec, rest_specs = utils.guess_spec(workdir, packaging_dir,
+ args.spec, spec_commit_id)
+
log.debug("check tmpdir")
tmpdir = configmgr.get('tmpdir', 'general')
tempd = utils.Temp(prefix=os.path.join(tmpdir, '.gbs_export_'),