def main(args): """gbs import entry point.""" if args.author_name: os.environ["GIT_AUTHOR_NAME"] = args.author_name if args.author_email: os.environ["GIT_AUTHOR_EMAIL"] = args.author_email path = args.path tmp = Temp(prefix='gbp_', dirn=configmgr.get('tmpdir', 'general'), directory=True) if args.upstream_branch: upstream_branch = args.upstream_branch else: upstream_branch = configmgr.get('upstream_branch', 'general') params = ["argv[0] placeholder", "--color-scheme=magenta:green:yellow:red", "--packaging-dir=%s" % get_packaging_dir(args), "--upstream-branch=%s" % upstream_branch, path, "--tmp-dir=%s" % tmp.path, ] if args.debug: params.append("--verbose") if not args.no_pristine_tar and os.path.exists("/usr/bin/pristine-tar"): params.append("--pristine-tar") if args.filter: params += [('--filter=%s' % f) for f in args.filter] if path.endswith('.src.rpm') or path.endswith('.spec'): if args.allow_same_version: params.append("--allow-same-version") if args.native: params.append("--native") if args.no_patch_import: params.append("--no-patch-import") ret = gbp_import_srpm(params) if ret == 2: log.warning("Importing of patches into packaging branch failed! " "Please import manually (apply and commit to git, " "remove files from packaging dir and spec) in order " "to enable automatic patch generation.") elif ret: raise GbsError("Failed to import %s" % path) else: if args.upstream_vcs_tag: params.append('--upstream-vcs-tag=%s' % args.upstream_vcs_tag) if args.merge: params.append('--merge') else: params.append('--no-merge') if gbp_import_orig(params): raise GbsError('Failed to import %s' % path) log.info('done.')
def main(args): """gbs submit entry point.""" workdir = args.gitdir orphan_packaging = configmgr.get('packaging_branch', 'orphan-devel') if orphan_packaging and args.commit == 'HEAD': log.error("You seem to be submitting a development branch of an " "(orphan) packaging branch. Please export your changes to" "the packaging branch with 'gbs devel export' and submit" "from there.") raise GbsError("Refusing to submit from devel branch") message = args.msg if message is None: message = get_message() if not message: raise GbsError("tag message is required") try: repo = RpmGitRepository(workdir) commit = repo.rev_parse(args.commit) current_branch = repo.get_branch() except GitRepositoryError, err: raise GbsError(str(err))
def main(args): """gbs export entry point.""" # Determine upstream branch if args.upstream_branch: upstream_branch = args.upstream_branch else: upstream_branch = configmgr.get('upstream_branch', 'general') # Construct GBP cmdline arguments gbp_args = ['dummy argv[0]', '--color-scheme=magenta:green:yellow:red', '--pristine-tar', '--upstream-branch=%s' % upstream_branch, '--packaging-branch=master'] if args.all: gbp_args.append('--all') if args.depth: gbp_args.append('--depth=%s' % args.depth) if args.debug: gbp_args.append("--verbose") gbp_args.append(args.uri) # Clone log.info('cloning %s' % args.uri) if do_clone(gbp_args): raise GbsError('Failed to clone %s' % args.uri) log.info('finished')
def export_sources(repo, commit, export_dir, spec, args): """ Export packaging files using git-buildpackage """ tmp = utils.Temp(prefix='gbp_', dirn=configmgr.get('tmpdir', 'general'), directory=True) gbp_args = create_gbp_export_args(repo, commit, export_dir, tmp.path, spec, args) try: ret = gbp_build(gbp_args) if ret == 2 and not is_native_pkg(repo, args): # Try falling back to old logic of one monolithic tarball log.warning("Generating upstream tarball and/or generating " "patches failed. GBS tried this as you have " "upstream branch in you git tree. This is a new " "mode introduced in GBS v0.10. " "Consider fixing the problem by either:\n" " 1. Update your upstream branch and/or fix the " "spec file. Also, check the upstream tag format.\n" " 2. Remove or rename the upstream branch") log.info("Falling back to the old method of generating one " "monolithic source archive") gbp_args = create_gbp_export_args(repo, commit, export_dir, tmp.path, spec, args, force_native=True) ret = gbp_build(gbp_args) if ret: raise GbsError("Failed to export packaging files from git tree") except GitRepositoryError, excobj: raise GbsError("Repository error: %s" % excobj)
def export_sources(repo, commit, export_dir, spec, args, create_tarball=True): """ Export packaging files using git-buildpackage """ tmp = utils.Temp(prefix='gbp_', dirn=configmgr.get('tmpdir', 'general'), directory=True) gbp_args = create_gbp_export_args(repo, commit, export_dir, tmp.path, spec, args, create_tarball=create_tarball) try: ret = gbp_build(gbp_args) if ret == 2 and not is_native_pkg(repo, args): # Try falling back to old logic of one monolithic tarball log.error("Generating upstream tarball and/or generating patches " "failed. GBS tried this as you have upstream branch in " "you git tree. Fix the problem by either:\n" " 1. Update your upstream branch and/or fix the spec " "file. Also, check the upstream tag format.\n" " 2. Remove or rename the upstream branch (change the " "package to native)\n" "See https://source.tizen.org/documentation/reference/" "git-build-system/upstream-package for more details.") if ret: raise GbsError("Failed to export packaging files from git tree") except GitRepositoryError, excobj: raise GbsError("Repository error: %s" % excobj)
def check_export_branches(repo, args): '''checking export related branches: pristine-tar, upstream. give warning if pristine-tar/upstream branch exist in remote but have not been checkout to local ''' remote_branches = [branch.split('/')[-1] for branch in \ repo.get_remote_branches()] if args.upstream_branch: upstream_branch = args.upstream_branch else: upstream_branch = configmgr.get('upstream_branch', 'general') # upstream exist, but pristine-tar not exist if repo.has_branch(upstream_branch) and \ not repo.has_branch('pristine-tar') and \ 'pristine-tar' in remote_branches: log.warning('pristine-tar branch exist in remote branches, ' 'you can checkout it to enable exporting upstrean ' 'tarball from pristine-tar branch') # all upstream and pristine-tar are not exist if not repo.has_branch(upstream_branch) and \ not repo.has_branch('pristine-tar') and \ 'pristine-tar' in remote_branches and upstream_branch in remote_branches: log.warning('pristine-tar and %s branches exist in remote branches, ' 'you can checkout them to enable upstream tarball and ' 'patch-generation ' % upstream_branch)
def is_native_pkg(repo, args): """ Determine if the package is "native" """ if args.upstream_branch: upstream_branch = args.upstream_branch else: upstream_branch = configmgr.get('upstream_branch', 'general') return not repo.has_branch(upstream_branch)
def get_packaging_dir(args): """ Determine the packaging dir to be used """ if args.packaging_dir: path = args.packaging_dir else: path = configmgr.get('packaging_dir', 'general') return path.rstrip(os.sep)
def edit(initial_content=None): """ Launch an editor to get input from user. Returns: content of user input. """ from gitbuildsys.conf import configmgr editor = configmgr.get('editor') or os.getenv('EDITOR') or 'vi' temp = TempCopy(initial_content) subprocess.call('%s %s' % (editor, temp.name), shell=True) if temp.is_changed(): with open(temp.name) as fobj: return fobj.read() return ''
def create_gbp_export_args(repo, commit, export_dir, tmp_dir, spec, args, create_tarball=True): """ Construct the cmdline argument list for git-buildpackage export """ upstream_branch = configmgr.get_arg_conf(args, 'upstream_branch') upstream_tag = configmgr.get_arg_conf(args, 'upstream_tag') # transform variables from shell to python convention ${xxx} -> %(xxx)s upstream_tag = re.sub(r'\$\{([^}]+)\}', r'%(\1)s', upstream_tag) log.debug("Using upstream branch: %s" % upstream_branch) log.debug("Using upstream tag format: '%s'" % upstream_tag) # Get patch squashing option squash_patches_until = configmgr.get_arg_conf(args, 'squash_patches_until') # Determine the remote repourl reponame = "" remotes = repo.get_remote_repos() if remotes: remotename = 'origin' if 'origin' in remotes else remotes.keys()[0] # Take the remote repo of current branch, if available try: config_remote = repo.get_config('branch.%s.remote' % repo.branch) except KeyError: pass else: if config_remote in remotes: remotename = config_remote elif config_remote != '.': log.warning("You appear to have non-existent remote '%s' " "configured for branch '%s'. Check your git config!" % (config_remote, repo.branch)) reponame = urlparse(remotes[remotename][0]).path.lstrip('/') packaging_dir = get_packaging_dir(args) # Now, start constructing the argument list export_rev = commit argv = ["argv[0] placeholder", "--git-color-scheme=magenta:green:yellow:red", "--git-ignore-new", "--git-compression-level=6", "--git-export-dir=%s" % export_dir, "--git-tmp-dir=%s" % tmp_dir, "--git-packaging-dir=%s" % packaging_dir, "--git-spec-file=%s" % spec, "--git-pq-branch=development/%(branch)s/%(upstreamversion)s", "--git-upstream-branch=%s" % upstream_branch, "--git-upstream-tag=%s" % upstream_tag, "--git-spec-vcs-tag=%s#%%(commit)s" % reponame] if create_tarball: argv.append("--git-force-create") else: argv.append("--git-no-create-orig") if args.debug: argv.append("--git-verbose") if is_native_pkg(repo, args) or args.no_patch_export: argv.extend(["--git-no-patch-export", "--git-upstream-tree=%s" % commit]) else: # Check if the revision seems to be of an orphan development branch is_orphan = False export_commitish = 'HEAD' if commit == 'WC.UNTRACKED' else commit try: repo.get_merge_base(export_commitish, upstream_branch) except GitRepositoryError: is_orphan = True # Development branch in orphan packaging model is identified in the conf orphan_packaging = configmgr.get('packaging_branch', 'orphan-devel') if not is_orphan: argv.extend(["--git-patch-export", "--git-patch-export-compress=100k", "--git-patch-export-squash-until=%s" % squash_patches_until, "--git-patch-export-ignore-path=^(%s/.*|.gbs.conf)" % packaging_dir, ]) if orphan_packaging: export_rev = orphan_packaging argv.extend(["--git-patch-export-rev=%s" % commit]) if repo.has_branch("pristine-tar"): argv.extend(["--git-pristine-tar"]) argv.append("--git-export=%s" % export_rev) if 'source_rpm' in args and args.source_rpm: argv.extend(['--git-builder=rpmbuild', '--git-rpmbuild-builddir=.', '--git-rpmbuild-builddir=.', '--git-rpmbuild-rpmdir=.', '--git-rpmbuild-sourcedir=.', '--git-rpmbuild-specdir=.', '--git-rpmbuild-srpmdir=.', '--git-rpmbuild-buildrootdir=.', '--short-circuit', '-bs', ]) else: argv.extend(["--git-builder=osc", "--git-export-only"]) return argv
raise GbsError(str(err)) utils.read_localconf(repo.path) 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 = args.commit elif args.include_all: commit = 'WC.UNTRACKED' else: commit = 'HEAD' orphan_packaging = configmgr.get('packaging_branch', 'orphan-devel') spec_commit_id = orphan_packaging if orphan_packaging else commit packaging_dir = get_packaging_dir(args) main_spec, rest_specs = utils.guess_spec(workdir, packaging_dir, args.spec, spec_commit_id) if args.outdir: outdir = args.outdir else: outdir = os.path.join(workdir, packaging_dir) outdir = os.path.abspath(outdir) if os.path.exists(outdir): if not os.access(outdir, os.W_OK|os.X_OK): raise GbsError('no write permission to outdir: %s' % outdir) else: mkdir_p(outdir)
def main(args): """gbs import entry point.""" if args.author_name: os.environ["GIT_AUTHOR_NAME"] = args.author_name if args.author_email: os.environ["GIT_AUTHOR_EMAIL"] = args.author_email path = args.path tmp = Temp(prefix='gbp_', dirn=configmgr.get('tmpdir', 'general'), directory=True) upstream_branch = configmgr.get_arg_conf(args, 'upstream_branch') upstream_tag = configmgr.get_arg_conf(args, 'upstream_tag') # transform variables from shell to python convention ${xxx} -> %(xxx)s upstream_tag = re.sub(r'\$\{([^}]+)\}', r'%(\1)s', upstream_tag) params = [ "argv[0] placeholder", "--color-scheme=magenta:green:yellow:red", "--packaging-dir=%s" % get_packaging_dir(args), "--upstream-branch=%s" % upstream_branch, path, "--upstream-tag=%s" % upstream_tag, "--tmp-dir=%s" % tmp.path, ] if args.debug: params.append("--verbose") if not args.no_pristine_tar and os.path.exists("/usr/bin/pristine-tar"): params.append("--pristine-tar") if args.filter: params += [('--filter=%s' % f) for f in args.filter] if args.upstream_vcs_tag: params.append('--upstream-vcs-tag=%s' % args.upstream_vcs_tag) if path.endswith('.src.rpm') or path.endswith('.spec'): params.append("--create-missing-branches") if args.allow_same_version: params.append("--allow-same-version") if args.native: params.append("--native") if args.orphan_packaging: params.append("--orphan-packaging") if args.no_patch_import: params.append("--no-patch-import") ret = gbp_import_srpm(params) if ret == 2: log.warning("Importing of patches into packaging branch failed! " "Please import manually (apply and commit to git, " "remove files from packaging dir and spec) in order " "to enable automatic patch generation.") elif ret: raise GbsError("Failed to import %s" % path) else: if args.merge: params.append('--merge') else: params.append('--no-merge') if gbp_import_orig(params): raise GbsError('Failed to import %s' % path) log.info('done.')
def create_gbp_export_args(repo, commit, export_dir, tmp_dir, spec, args, force_native=False): """ Construct the cmdline argument list for git-buildpackage export """ if args.upstream_branch: upstream_branch = args.upstream_branch else: upstream_branch = configmgr.get('upstream_branch', 'general') if args.upstream_tag: upstream_tag = args.upstream_tag else: upstream_tag = configmgr.get('upstream_tag', 'general') # transform variables from shell to python convention ${xxx} -> %(xxx)s upstream_tag = re.sub(r'\$\{([^}]+)\}', r'%(\1)s', upstream_tag) log.debug("Using upstream branch: %s" % upstream_branch) log.debug("Using upstream tag format: '%s'" % upstream_tag) # Get patch squashing option if args.squash_patches_until: squash_patches_until = args.squash_patches_until else: squash_patches_until = configmgr.get('squash_patches_until', 'general') # Determine the remote repourl reponame = "" remotes = repo.get_remote_repos() if remotes: remotename = 'origin' if 'origin' in remotes else remotes.keys()[0] # Take the remote repo of current branch, if available try: remote_branch = repo.get_upstream_branch(repo.branch) if remote_branch: remotename = remote_branch.split("/")[0] except GitRepositoryError: pass reponame = urlparse(remotes[remotename][0]).path.lstrip('/') packaging_dir = get_packaging_dir(args) # Now, start constructing the argument list argv = ["argv[0] placeholder", "--git-color-scheme=magenta:green:yellow:red", "--git-ignore-new", "--git-upstream-branch=upstream", "--git-export-dir=%s" % export_dir, "--git-tmp-dir=%s" % tmp_dir, "--git-packaging-dir=%s" % packaging_dir, "--git-spec-file=%s" % spec, "--git-export=%s" % commit, "--git-upstream-branch=%s" % upstream_branch, "--git-upstream-tag=%s" % upstream_tag, "--git-spec-vcs-tag=%s#%%(tagname)s" % reponame] if args.debug: argv.append("--git-verbose") if force_native or is_native_pkg(repo, args) or args.no_patch_export: argv.extend(["--git-no-patch-export", "--git-upstream-tree=%s" % commit]) else: argv.extend(["--git-patch-export", "--git-patch-export-compress=100k", "--git-force-create", "--git-patch-export-squash-until=%s" % squash_patches_until, "--git-patch-export-ignore-path=^(%s/.*|.gbs.conf)" % packaging_dir, ]) if repo.has_branch("pristine-tar"): argv.extend(["--git-pristine-tar"]) if 'source_rpm' in args and args.source_rpm: argv.extend(['--git-builder=rpmbuild', '--git-rpmbuild-builddir=.', '--git-rpmbuild-builddir=.', '--git-rpmbuild-rpmdir=.', '--git-rpmbuild-sourcedir=.', '--git-rpmbuild-specdir=.', '--git-rpmbuild-srpmdir=.', '--git-rpmbuild-buildrootdir=.', '--short-circuit', '-bs', ]) else: argv.extend(["--git-builder=osc", "--git-export-only"]) return argv
parser.update() log.info('Committing local .gbs.conf to git') repo.add_files(['.gbs.conf']) repo.commit_all(msg="Autoupdate local .gbs.conf\n\nGbp-Rpm: Ignore") def main(args): """gbs devel entry point.""" try: repo = RpmGitRepository(args.gitdir) except GitRepositoryError, err: raise GbsError(str(err)) tmp = Temp(prefix='gbp_', dirn=configmgr.get('tmpdir', 'general'), directory=True) packaging_dir = get_packaging_dir(args) # Guess spec from correct branch packaging_branch = configmgr.get('packaging_branch', 'orphan-devel') commit_id = packaging_branch if packaging_branch else 'WC.UNTRACKED' specfile = guess_spec(repo.path, packaging_dir, args.spec, commit_id)[0] # Get current branch try: current_branch = repo.get_branch() except GitRepositoryError: current_branch = None gbp_args = compose_gbp_args(repo, tmp.path, specfile, args)
log.info('Committing local .gbs.conf to git') repo.add_files(['.gbs.conf']) repo.commit_all(msg="Autoupdate local .gbs.conf\n\nGbp-Rpm: Ignore") def main(args): """gbs devel entry point.""" try: repo = RpmGitRepository(args.gitdir) except GitRepositoryError, err: raise GbsError(str(err)) tmp = Temp(prefix='gbp_', dirn=configmgr.get('tmpdir', 'general'), directory=True) packaging_dir = get_packaging_dir(args) # Guess spec from correct branch packaging_branch = configmgr.get('packaging_branch', 'orphan-devel') commit_id = packaging_branch if packaging_branch else 'WC.UNTRACKED' specfile = guess_spec(repo.path, packaging_dir, args.spec, commit_id)[0] # Get current branch try: current_branch = repo.get_branch() except GitRepositoryError: current_branch = None gbp_args = compose_gbp_args(repo, tmp.path, specfile, args)
def create_gbp_export_args(repo, commit, export_dir, tmp_dir, spec, args, force_native=False, create_tarball=True): """ Construct the cmdline argument list for git-buildpackage export """ upstream_branch = configmgr.get_arg_conf(args, 'upstream_branch') upstream_tag = configmgr.get_arg_conf(args, 'upstream_tag') # transform variables from shell to python convention ${xxx} -> %(xxx)s upstream_tag = re.sub(r'\$\{([^}]+)\}', r'%(\1)s', upstream_tag) log.debug("Using upstream branch: %s" % upstream_branch) log.debug("Using upstream tag format: '%s'" % upstream_tag) # Get patch squashing option squash_patches_until = configmgr.get_arg_conf(args, 'squash_patches_until') # Determine the remote repourl reponame = "" remotes = repo.get_remote_repos() if remotes: remotename = 'origin' if 'origin' in remotes else remotes.keys()[0] # Take the remote repo of current branch, if available try: config_remote = repo.get_config('branch.%s.remote' % repo.branch) except KeyError: pass else: if config_remote in remotes: remotename = config_remote elif config_remote != '.': log.warning("You appear to have non-existent remote '%s' " "configured for branch '%s'. Check your git config!" % (config_remote, repo.branch)) reponame = urlparse(remotes[remotename][0]).path.lstrip('/') packaging_dir = get_packaging_dir(args) # Now, start constructing the argument list export_rev = commit argv = ["argv[0] placeholder", "--git-color-scheme=magenta:green:yellow:red", "--git-notify=off", "--git-ignore-new", "--git-compression-level=6", "--git-export-dir=%s" % export_dir, "--git-tmp-dir=%s" % tmp_dir, "--git-packaging-dir=%s" % packaging_dir, "--git-spec-file=%s" % spec, "--git-pq-branch=development/%(branch)s/%(upstreamversion)s", "--git-upstream-branch=%s" % upstream_branch, "--git-upstream-tag=%s" % upstream_tag, "--git-spec-vcs-tag=%s#%%(commit)s" % reponame] if create_tarball: argv.append("--git-force-create") else: argv.append("--git-no-create-orig") if args.debug: argv.append("--git-verbose") if force_native or is_native_pkg(repo, args) or args.no_patch_export: argv.append('--git-native=on') else: argv.append('--git-native=off') # Check if the revision seems to be of an orphan development branch is_orphan = False export_commitish = 'HEAD' if commit == 'WC.UNTRACKED' else commit try: repo.get_merge_base(export_commitish, upstream_branch) except GitRepositoryError: is_orphan = True # Development branch in orphan packaging model is identified in the conf orphan_packaging = configmgr.get('packaging_branch', 'orphan-devel') if not is_orphan: argv.extend(["--git-patch-export", "--git-patch-export-compress=100k", "--git-patch-export-squash-until=%s" % squash_patches_until, "--git-patch-export-ignore-path=^(%s/.*|.gbs.conf)" % packaging_dir, ]) if orphan_packaging: export_rev = orphan_packaging argv.extend(["--git-patch-export-rev=%s" % commit]) if repo.has_branch("pristine-tar"): argv.extend(["--git-pristine-tar"]) argv.append("--git-export=%s" % export_rev) if 'source_rpm' in args and args.source_rpm: argv.extend(['--git-builder=rpmbuild', '--git-rpmbuild-builddir=.', '--git-rpmbuild-builddir=.', '--git-rpmbuild-rpmdir=.', '--git-rpmbuild-sourcedir=.', '--git-rpmbuild-specdir=.', '--git-rpmbuild-srpmdir=.', '--git-rpmbuild-buildrootdir=.', '--short-circuit', '-bs', ]) else: argv.extend(["--git-builder=osc", "--git-no-build"]) return argv
def main(args): """gbs build entry point.""" global TMPDIR TMPDIR = os.path.join(configmgr.get('tmpdir', 'general'), '%s-gbs' % USERID) if args.commit and args.include_all: raise Usage('--commit can\'t be specified together with '\ '--include-all') if args.noinit and (args.clean or args.clean_once): raise Usage('--noinit can\'t be specified together with '\ '--clean or --clean-once') workdir = args.gitdir try: repo = RpmGitRepository(workdir) workdir = repo.path except GitRepositoryError: if args.spec: raise GbsError("git project can't be found for --spec, " "give it in argument or cd into it") read_localconf(workdir) hostarch = os.uname()[4] if args.arch: buildarch = args.arch else: buildarch = hostarch log.info('No arch specified, using system arch: %s' % hostarch) if not buildarch in SUPPORTEDARCHS: raise GbsError('arch %s not supported, supported archs are: %s ' % \ (buildarch, ','.join(SUPPORTEDARCHS))) profile = get_profile(args) if args.buildroot: build_root = args.buildroot elif 'TIZEN_BUILD_ROOT' in os.environ: build_root = os.environ['TIZEN_BUILD_ROOT'] elif profile.buildroot: build_root = profile.buildroot else: build_root = configmgr.get('buildroot', 'general') build_root = os.path.expanduser(build_root) # transform variables from shell to python convention ${xxx} -> %(xxx)s build_root = re.sub(r'\$\{([^}]+)\}', r'%(\1)s', build_root) sanitized_profile_name = re.sub("[^a-zA-Z0-9:._-]", "_", profile.name) build_root = build_root % {'tmpdir': TMPDIR, 'profile': sanitized_profile_name} if profile.exclude_packages: log.info('the following packages have been excluded build from gbs ' 'config:\n %s' % '\n '.join(profile.exclude_packages)) if args.exclude: args.exclude += ',' + ','.join(profile.exclude_packages) else: args.exclude = ','.join(profile.exclude_packages) os.environ['TIZEN_BUILD_ROOT'] = os.path.abspath(build_root) # get virtual env from system env first if 'VIRTUAL_ENV' in os.environ: cmd = ['%s/usr/bin/depanneur' % os.environ['VIRTUAL_ENV']] else: cmd = ['depanneur'] cmd += ['--arch=%s' % buildarch] if args.clean: cmd += ['--clean'] # check & prepare repos and build conf if not args.noinit: cmd += prepare_repos_and_build_conf(args, buildarch, profile) else: cmd += ['--noinit'] cmd += ['--path=%s' % workdir] if args.ccache: cmd += ['--ccache'] if args.extra_packs: cmd += ['--extra-packs=%s' % args.extra_packs] if hostarch != buildarch and buildarch in CHANGE_PERSONALITY: cmd = [CHANGE_PERSONALITY[buildarch]] + cmd # Extra depanneur special command options cmd += prepare_depanneur_opts(args) # Extra options for gbs export if args.include_all: cmd += ['--include-all'] if args.commit: cmd += ['--commit=%s' % args.commit] if args.upstream_branch: cmd += ['--upstream-branch=%s' % args.upstream_branch] if args.upstream_tag: cmd += ['--upstream-tag=%s' % args.upstream_tag] if args.conf and args.conf != '.gbs.conf': fallback = configmgr.get('fallback_to_native') else: fallback = '' if args.fallback_to_native or config_is_true(fallback): cmd += ['--fallback-to-native'] if args.squash_patches_until: cmd += ['--squash-patches-until=%s' % args.squash_patches_until] if args.no_patch_export: cmd += ['--no-patch-export'] if args.define: cmd += [('--define="%s"' % i) for i in args.define] if args.spec: cmd += ['--spec=%s' % args.spec] # Determine if we're on devel branch orphan_packaging = configmgr.get('packaging_branch', 'orphan-devel') if orphan_packaging: cmd += ['--spec-commit=%s' % orphan_packaging] log.debug("running command: %s" % ' '.join(cmd)) retcode = os.system(' '.join(cmd)) if retcode != 0: raise GbsError('some packages failed to be built') else: log.info('Done')
def main(args): """gbs build entry point.""" if args.commit and args.include_all: raise Usage('--commit can\'t be specified together with '\ '--include-all') if args.noinit and (args.clean or args.clean_once): raise Usage('--noinit can\'t be specified together with '\ '--clean or --clean-once') workdir = args.gitdir try: repo = RpmGitRepository(workdir) workdir = repo.path except GitRepositoryError: if args.spec: raise GbsError("git project can't be found for --spec, " "give it in argument or cd into it") hostarch = os.uname()[4] if args.arch: buildarch = args.arch else: buildarch = hostarch log.info('No arch specified, using system arch: %s' % hostarch) if not buildarch in SUPPORTEDARCHS: raise GbsError('arch %s not supported, supported archs are: %s ' % \ (buildarch, ','.join(SUPPORTEDARCHS))) if buildarch not in CAN_ALSO_BUILD.get(hostarch, []): if buildarch not in QEMU_CAN_BUILD: raise GbsError("hostarch: %s can't build target arch %s" % (hostarch, buildarch)) profile = get_profile(args) if args.buildroot: build_root = args.buildroot elif 'TIZEN_BUILD_ROOT' in os.environ: build_root = os.environ['TIZEN_BUILD_ROOT'] elif profile.buildroot: build_root = profile.buildroot else: build_root = configmgr.get('buildroot', 'general') build_root = os.path.expanduser(build_root) # transform variables from shell to python convention ${xxx} -> %(xxx)s build_root = re.sub(r'\$\{([^}]+)\}', r'%(\1)s', build_root) sanitized_profile_name = re.sub("[^a-zA-Z0-9:._-]", "_", profile.name) build_root = build_root % {'tmpdir': TMPDIR, 'profile': sanitized_profile_name} os.environ['TIZEN_BUILD_ROOT'] = os.path.abspath(build_root) # get virtual env from system env first if 'VIRTUAL_ENV' in os.environ: cmd = ['%s/usr/bin/depanneur' % os.environ['VIRTUAL_ENV']] else: cmd = ['depanneur'] cmd += ['--arch=%s' % buildarch] if args.clean: cmd += ['--clean'] # check & prepare repos and build conf if not args.noinit: cmd += prepare_repos_and_build_conf(args, buildarch, profile) else: cmd += ['--noinit'] cmd += ['--path=%s' % workdir] if args.ccache: cmd += ['--ccache'] if args.extra_packs: cmd += ['--extra-packs=%s' % args.extra_packs] if hostarch != buildarch and buildarch in CHANGE_PERSONALITY: cmd = [ CHANGE_PERSONALITY[buildarch] ] + cmd # Extra depanneur special command options cmd += prepare_depanneur_opts(args) # Extra options for gbs export if args.include_all: cmd += ['--include-all'] if args.commit: cmd += ['--commit=%s' % args.commit] if args.upstream_branch: upstream_branch = args.upstream_branch else: upstream_branch = configmgr.get('upstream_branch', 'general') cmd += ['--upstream-branch=%s' % upstream_branch] if args.upstream_tag: cmd += ['--upstream-tag=%s' % args.upstream_tag] if args.squash_patches_until: cmd += ['--squash-patches-until=%s' % args.squash_patches_until] if args.no_patch_export: cmd += ['--no-patch-export'] if args.define: cmd += [('--define="%s"' % i) for i in args.define] if args.spec: cmd += ['--spec=%s' % args.spec] log.debug("running command: %s" % ' '.join(cmd)) retcode = os.system(' '.join(cmd)) if retcode != 0: raise GbsError('rpmbuild fails') else: log.info('Done')
'armv7el':['armv4l', 'armv5l', 'armv6l', 'armv7l', 'armv5el', 'armv6el', 'armv7el'], 'armv8l' :['armv4l', 'armv5el', 'armv6el', 'armv7el', 'armv8el' ], 'i586' :['i586', 'i386'], 'i686' :['i686', 'i586', 'i386',], 'x86_64' :['x86_64', 'i686', 'i586', 'i386'], } QEMU_CAN_BUILD = ['armv4l', 'armv5el', 'armv5l', 'armv6l', 'armv7l', 'armv6el', 'armv7el', 'armv7hl', 'armv8el', 'sh4', 'mips', 'mipsel', 'ppc', 'ppc64', 's390', 's390x', 'sparc64v', 'sparcv9v', 'sparcv9', 'sparcv8', 'sparc', 'hppa' ] USERID = pwd.getpwuid(os.getuid())[0] TMPDIR = os.path.join(configmgr.get('tmpdir', 'general'), '%s-gbs' % USERID) def prepare_repos_and_build_conf(args, arch, profile): '''generate repos and build conf options for depanneur''' cmd_opts = [] cache = Temp(prefix=os.path.join(TMPDIR, 'gbscache'), directory=True) cachedir = cache.path if not os.path.exists(cachedir): os.makedirs(cachedir) log.info('generate repositories ...') if args.skip_conf_repos: repos = [] else:
def get_editor_cmd(): """Determine the preferred text editor command""" from gitbuildsys.conf import configmgr return configmgr.get('editor') or os.getenv('EDITOR') or 'vi'
if base_prj: target_prj += ":%s" % base_prj else: target_prj = args.target_obsprj api_passwd = apiurl.passwd if apiurl.passwd else '' # Create temporary oscrc oscrc = OSCRC_TEMPLATE % { "http_debug": 1 if log.level == DEBUG else 0, "debug": 1 if log.level == DEBUG else 0, "apiurl": apiurl, "user": apiurl.user, "passwdx": encode_passwd(api_passwd), } tmpdir = configmgr.get('tmpdir', 'general') tmpd = utils.Temp(prefix=os.path.join(tmpdir, '.gbs_remotebuild_'), directory=True) exportdir = tmpd.path tmpf = utils.Temp(dirn=exportdir, prefix='.oscrc', content=oscrc) oscrcpath = tmpf.path api = OSC(apiurl, oscrc=oscrcpath) try: if args.buildlog: archlist = [] status = api.get_results(target_prj, package) for build_repo in status.keys(): for arch in status[build_repo]: