def gentoo_build(script_name, logger, release_repo_uri, options):
"""Main function that creates a versioned ebuild file and releases it."""
- ebuild = find_ebuild(logger, options.category)
+ ebuilds = find_ebuilds(logger, options.category)
if options.tag_from_debian:
git_tag = tag_from_debian_changelog(logger)
else:
git_tag = get_latest_tag(logger)
- ebuild.set_version(git_tag)
- ebuild.set_git_commit(git_tag)
+ for ebuild in ebuilds:
+ ebuild.set_version(git_tag)
+ ebuild.set_git_commit(git_tag)
tmpdir = tempfile.mkdtemp(prefix=script_name+".")
try:
# Checkout release repository
dir=tmpdir))
check_branch_existance(logger, release_repo_uri, branch)
release_repo = git.Repo.clone_from(release_repo_uri, tmpdir, b=branch)
- # Copy modified ebuild into release repository
- ebuild.save(tmpdir)
- # Update manifest file (in a Gentoo chroot)
- cmd = ["schroot", "-c", options.chroot_name, "-u", options.chroot_user,
- "-d", tmpdir, "--", "ebuild", ebuild.get_relpath(), "manifest"]
- logger.info("Calling " + " ".join(cmd))
- retcode = subprocess.call(cmd)
- if retcode != 0:
- logger.error("ebuild command in Gentoo schroot failed with exit "
- "code {code}.".format(code=retcode))
- sys.exit(retcode)
- release_repo.git.add("-A")
- release_repo.git.commit("-m", "Added " + ebuild.get_relpath())
- logger.info("Adding following commit:\n" + \
- release_repo.git.log("-p", "--stat", "HEAD~1..HEAD"))
+ for ebuild in ebuilds:
+ # Copy modified ebuild into release repository
+ ebuild.save(tmpdir)
+ update_manifest(logger, options.chroot_name, options.chroot_user,
+ tmpdir, ebuild.get_relpath())
+ release_repo.git.add("-A")
+ release_repo.git.commit("-m", "Added " + ebuild.get_relpath())
+ logger.info("Added following commit:\n" + \
+ release_repo.git.log("-p", "--stat", "HEAD~1..HEAD"))
# Push changes to the release repository
if options.dry_run:
logger.info("Not pushing changes to {repo} as dry run was "
else:
shutil.rmtree(tmpdir)
+def update_manifest(logger, chroot_name, chroot_user, workdir, ebuild_path):
+ """Update manifest file in a Gentoo chroot."""
+ cmd = ["schroot", "-c", chroot_name, "-u", chroot_user,
+ "-d", workdir, "--", "ebuild", ebuild_path, "manifest"]
+ logger.info("Calling " + " ".join(cmd))
+ retcode = subprocess.call(cmd)
+ if retcode != 0:
+ logger.error("ebuild command in Gentoo schroot failed with exit "
+ "code {code}.".format(code=retcode))
+ sys.exit(retcode)
+
def check_branch_existance(logger, repo_uri, branch):
"""Check if the specified remote repository has the given branch.
This check is needed, because a git clone on Debian 6.0 (squeeze)
"{repo}".format(branch=branch, repo=repo_uri))
sys.exit(1)
-def find_ebuild(logger, category):
- """Search for exactly one ebuild file in the current directory"""
+def find_ebuilds(logger, category):
+ """Search for ebuild files in the current directory"""
ebuild_files = glob.glob("*.ebuild")
if len(ebuild_files) == 0:
logger.error('No .ebuild file found in "{dir}".\n'
'does your project contain an .ebuild file in the top '
'directory?'.format(dir=os.getcwd()))
sys.exit(1)
- if len(ebuild_files) > 1:
- logger.error('More than one .ebuild file found in "{dir}": '
- '{ebuild_files}\nThe script expects exactly one .ebuild '
- 'file.'.format(dir=os.getcwd(),
- ebuild_files=ebuild_files))
- sys.exit(1)
- ebuild_file = ebuild_files[0]
- logger.info('Use ebuild file: {ebuild}'.format(ebuild=ebuild_file))
- return Ebuild(logger, ebuild_file, category)
+ logger.info('Found {n} ebuild file(s): '
+ '{ebuild}'.format(n=len(ebuild_files),
+ ebuild=" ".join(ebuild_files)))
+ return [Ebuild(logger, e, category) for e in ebuild_files]
def tag_from_debian_changelog(logger):
"""Create a tag from the version specified in debian/changelog.