From: xuhy Date: Tue, 5 Mar 2024 03:32:13 +0000 (+0800) Subject: Add dpkg-source export for debian. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=599d63e034abbf400a384d143a99d5173e1c2ddb;p=tools%2Fgbs.git Add dpkg-source export for debian. Change-Id: Iea0a76a078662a85da707fa02b0e991a2c552b4c Signed-off-by: xuhy --- diff --git a/debian/control b/debian/control index 926c71b..acde930 100755 --- a/debian/control +++ b/debian/control @@ -43,7 +43,10 @@ Architecture: all Depends: ${misc:Depends}, ${python3:Depends}, gbs-api (= ${binary:Version}), pristine-tar (>= 1.35-tizen20161231), - git-buildpackage-rpm + git-buildpackage-rpm, + git-buildpackage, + dpkg-dev, + dpkg-source-gitarchive Conflicts: gbs (<< 0.26.29) Replaces: gbs (<< 0.26.29) Description: GBS export API diff --git a/gitbuildsys/cmd_export.py b/gitbuildsys/cmd_export.py index 37e9bd6..7ec9a9a 100644 --- a/gitbuildsys/cmd_export.py +++ b/gitbuildsys/cmd_export.py @@ -32,6 +32,7 @@ from gitbuildsys.errors import GbsError, Usage 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 @@ -251,6 +252,62 @@ def export_sources(repo, commit, export_dir, spec, args, create_tarball=True): 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.""" @@ -268,7 +325,6 @@ def main(args): 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: @@ -277,12 +333,10 @@ def main(args): 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 @@ -294,6 +348,17 @@ def main(args): 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_'), diff --git a/tools/gbs b/tools/gbs index 5ef1f5f..f0ef0d5 100755 --- a/tools/gbs +++ b/tools/gbs @@ -145,6 +145,8 @@ def export_parser(parser): 'rather than outdir/pkg-version-release') parser.add_argument('--with-submodules', action='store_true', help='export source code also with submodule code togerther') + parser.add_argument('--deb', action='store_true', + help='generate source for debian') parser.set_defaults(alias="ex") return parser