From 243027cffa38d606b3634514a52ccde06535b677 Mon Sep 17 00:00:00 2001 From: Zhang Qiang Date: Thu, 9 Jan 2014 16:24:52 +0800 Subject: [PATCH] Support --package-list and --package-from-file The value of --package-* options can be the top dir of packages Fixes: #1580 Change-Id: Ib14cc9cd3eb5b461a4f452bca46f2acd060e7353 Signed-off-by: Zhang Qiang --- data/gbs.sh | 5 ++-- gitbuildsys/cmd_build.py | 55 ++++++++++++++++++++++++++++++++++++++-- tools/gbs | 11 +++++++- 3 files changed, 66 insertions(+), 5 deletions(-) diff --git a/data/gbs.sh b/data/gbs.sh index fdac653..2278f9e 100644 --- a/data/gbs.sh +++ b/data/gbs.sh @@ -107,8 +107,9 @@ __gbs () " ch_opts="--message= --since= --packaging-dir=" chr_opts="--root" - lbex_opts="--no-configure --exclude-from-file= --exclude= --binary-list= --threads=\ - --incremental --overwrite --clean-once --debug --deps --rdeps $lb_opts" + lbex_opts="--no-configure --exclude-from-file= --exclude= --binary-list= --binary-from-file=\ + --threads= --package-list= --package-from-file= --incremental --overwrite \ + --clean-once --debug --deps --rdeps $lb_opts" cl_opts="--upstream-branch= --all --depth=" pull_opts="--upstream-branch= --force --depth=" diff --git a/gitbuildsys/cmd_build.py b/gitbuildsys/cmd_build.py index 6ed004d..853c95a 100644 --- a/gitbuildsys/cmd_build.py +++ b/gitbuildsys/cmd_build.py @@ -25,7 +25,8 @@ import pwd import re import urlparse -from gitbuildsys.utils import Temp, RepoParser, read_localconf +from gitbuildsys.utils import Temp, RepoParser, read_localconf,\ + guess_spec, show_file_from_rev from gitbuildsys.errors import GbsError, Usage from gitbuildsys.conf import configmgr from gitbuildsys.safe_url import SafeURL @@ -33,6 +34,8 @@ from gitbuildsys.cmd_export import get_packaging_dir from gitbuildsys.log import LOGGER as log from gbp.rpm.git import GitRepositoryError, RpmGitRepository +from gbp import rpm +from gbp.errors import GbpError CHANGE_PERSONALITY = { @@ -68,7 +71,42 @@ def formalize_build_conf(profile): profile = 'tizen%s' % profile # '-' is not allowed, so replace with '_' - return profile.replace('-', '_'); + return profile.replace('-', '_') + +def get_binary_name_from_git (args, package_dirs): + ''' get binary rpm name from specified git package''' + + binary_list = [] + packaging_dir = get_packaging_dir(args) + if args.commit: + commit = args.commit + elif args.include_all: + commit = 'WC.UNTRACKED' + else: + commit = 'HEAD' + + for package_dir in package_dirs: + main_spec, rest_specs = guess_spec(package_dir, packaging_dir, + None, commit) + rest_specs.append(main_spec) + for spec in rest_specs: + if args.include_all: + spec_to_parse = os.path.join(package_dir, spec) + else: + content = show_file_from_rev(package_dir, spec, commit) + if content is None: + raise GbsError('failed to checkout %s from commit: %s' % + (spec, commit)) + tmp_spec = Temp(content=content) + spec_to_parse = tmp_spec.path + + try: + spec = rpm.SpecFile(spec_to_parse) + except GbpError, err: + raise GbsError('%s' % err) + binary_list.append(spec.name) + + return binary_list def prepare_repos_and_build_conf(args, arch, profile): '''generate repos and build conf options for depanneur''' @@ -174,6 +212,19 @@ def prepare_depanneur_opts(args): if args.baselibs: cmd_opts += ['--baselibs'] + # + if args.package_list: + package_list = args.package_list.split(',') + binary_list = get_binary_name_from_git(args, package_list) + args.binary_list += ','+ ','.join(binary_list) + if args.package_from_file: + if not os.path.exists(args.package_from_file): + raise GbsError('specified package list file %s not exists' % \ + args.package_from_file) + with open(args.package_from_file) as fobj: + pkglist = [pkg.strip() for pkg in fobj.readlines() if pkg.strip()] + binary_list = get_binary_name_from_git(args, pkglist) + args.binary_list += ',' + ','.join(binary_list) if args.binary_list: blist = [ i.strip() for i in args.binary_list.split(',') ] cmd_opts += ['--binary-list=%s' % ','.join(blist)] diff --git a/tools/gbs b/tools/gbs index d23cfb2..dbae6cc 100755 --- a/tools/gbs +++ b/tools/gbs @@ -246,7 +246,16 @@ def build_parser(parser): 'export-treeish instead of upstream branch') group = parser.add_argument_group('package selection options') - group.add_argument('--binary-list', + group.add_argument('--package-list', default='', + help='specify a package list to be built. Multiple ' + 'packages can be separated by comma(,). Note: packages ' + 'are package dir name') + group.add_argument('--package-from-file', + help='specify a package list file. Packages ' + 'listed in this file will be selected to be built. ' + 'The format of file is one package dir for one ' + 'line') + group.add_argument('--binary-list', default='', help='specify a package list to be built. Multiple ' 'packages can be separated by comma(,). Note: package ' 'names are from spec files, not the package dir name') -- 2.34.1