If the build succeeds, the new version of the package is uploaded to
the apt repository, tagged in its git repository, and the Invirt
-superrepo is updated to point at the new version.
+superproject is updated to point at the new version.
If the build fails, the Invirtibuilder sends mail with the build log.
pocket package hash principal
where pocket is one of the pockets globally configured in
-git.pockets. For instance, the pockets in XVM are "prod" and "dev".
+build.pockets. For instance, the pockets in XVM are "prod" and "dev".
principal is the Kerberos principal that requested the build.
"""
+from __future__ import with_statement
+
import contextlib
import os
import re
def getDscName(package, ref):
"""Return the .dsc file that will be generated for this package."""
v = getVersion(package, ref)
- return '%s_%s-%s.dsc' % (
+ if v.debian_version:
+ v_str = '%s-%s' % (v.upstream_version,
+ v.debian_version)
+ else:
+ v_str = v.upstream_version
+ return '%s_%s.dsc' % (
package,
- version.upstream_version,
- version.debian_version)
+ v_str)
def sanitizeVersion(version):
This function strips the epoch from the version number and
replaces any tildes with periods."""
- v = '%s-%s' % (version.upstream_version,
- version.debian_version)
+ if v.debian_version:
+ v = '%s-%s' % (version.upstream_version,
+ version.debian_version)
+ else:
+ v = version.upstream_version
return v.replace('~', '.')
def aptCopy(packages, dst_pocket, src_pocket):
"""Copy a package from one pocket to another."""
- binaries = []
- for line in b.getGitFile(package, commit, 'debian/control').split('\n'):
- m = re.match('Package: (.*)$')
- if m:
- binaries.append(m.group(1))
-
+ binaries = getBinaries(package, commit)
cpatureOutput(['reprepro-env', 'copy',
b.pocketToApt(dst_pocket),
b.pocketToApt(src_pocket),
I'm sure that long description gives you great confidence in teh
legitimacy of my reasoning.
"""
- if config.git.pockets[pocket].get('allow_backtracking', False):
+ if config.build.pockets[pocket].get('allow_backtracking', False):
env = dict(os.environ)
branch = b.pocketToGit(pocket)
version = b.getVersion(package, ref)
- env['GIT_COMMITTER_NAME'] = config.git.tagger.name
- env['GIT_COMMITTER_EMAIL'] = config.git.tagger.email
+ env['GIT_COMMITTER_NAME'] = config.build.tagger.name
+ env['GIT_COMMITTER_EMAIL'] = config.build.tagger.email
tag_msg = ('Tag %s of %s\n\n'
'Requested by %s' % (version.full_version,
package,
changes])
-def updateSuperrepo(pocket, package, commit, principal):
- """Update the superrepo.
+def updateSuperproject(pocket, package, commit, principal):
+ """Update the superproject.
This will create a new commit on the branch for the given pocket
that sets the commit for the package submodule to commit.
Note that there's no locking issue here, because we disallow all
- pushes to the superrepo.
+ pushes to the superproject.
"""
- superrepo = os.path.join(b._REPO_DIR, 'packages.git')
+ superproject = os.path.join(b._REPO_DIR, 'invirt/packages.git')
branch = b.pocketToGit(pocket)
tree = c.captureOutput(['git', 'ls-tree', branch],
- cwd=superrepo)
+ cwd=superproject)
new_tree = re.compile(
r'^(160000 commit )[0-9a-f]*(\t%s)$' % package, re.M).sub(
tree)
new_tree_id = c.captureOutput(['git', 'mktree'],
- cwd=superrepo,
+ cwd=superproject,
stdin_str=new_tree)
commit_msg = ('Update %s to version %s\n\n'
principal))
new_commit = c.captureOutput(
['git', 'commit-tree', new_tree_hash, '-p', branch],
- cwd=superrepo,
+ cwd=superproject,
env=env,
stdin_str=commit_msg)
c.captureOutput(
['git', 'update-ref', 'refs/heads/%s' % branch, new_commit],
- cwd=superrepo)
+ cwd=superproject)
@contextlib.contextmanager
tagSubmodule(pocket, package, commit, principal)
db.failed_stage = 'updating submodule branches'
updateSubmoduleBranch(pocket, package, commit)
- db.failed_stage = 'updating superrepo'
- updateSuperrepo(pocket, package, commit, principal)
+ db.failed_stage = 'updating superproject'
+ updateSuperproject(pocket, package, commit, principal)
db.failed_stage = 'uploading packages to apt repo'
uploadBuild(pocket, workdir)