Support post jobs by supporting rev checkout
Currently zuul-cloner does not support post jobs, as it does not know
what to checkout. This adds the ability on a per project basis to
specify a revision to be checked out. When specified zuul-cloner
will successfully check out the same repo as gerrit-git-prep.sh does
in post jobs.
Sample usage:
clonemap:
- name: openstack/neutron
dest: ./neu
- name: openstack/requirements
dest: ./reqs
export ZUUL_PROJECT="openstack/neutron"
export ZUUL_NEWREV="a2Fhc2Rma2FzZHNkZjhkYXM4OWZhc25pb2FzODkK"
export ZUUL_BRANCH="stable/liberty"
zuul-cloner -m map.yaml git://git.openstack.org $ZUUL_PROJECT \
openstack/requirements
This results with openstack/neutron checked out at rev a2Fhc2 and
openstack/requirements at 'heads/stable/liberty'
Change-Id: Ie9b03508a44f04adfbe2696cde136439ebffb9a6
diff --git a/tests/test_cloner.py b/tests/test_cloner.py
index 137c157..e3576bd 100644
--- a/tests/test_cloner.py
+++ b/tests/test_cloner.py
@@ -566,3 +566,57 @@
self.worker.hold_jobs_in_build = False
self.worker.release()
self.waitUntilSettled()
+
+ def test_post_checkout(self):
+ project = "org/project"
+ path = os.path.join(self.upstream_root, project)
+ repo = git.Repo(path)
+ repo.head.reference = repo.heads['master']
+ commits = []
+ for i in range(0, 3):
+ commits.append(self.create_commit(project))
+ newRev = commits[1]
+
+ cloner = zuul.lib.cloner.Cloner(
+ git_base_url=self.upstream_root,
+ projects=[project],
+ workspace=self.workspace_root,
+ zuul_branch=None,
+ zuul_ref='master',
+ zuul_url=self.git_root,
+ zuul_project=project,
+ zuul_newrev=newRev,
+ )
+ cloner.execute()
+ repos = self.getWorkspaceRepos([project])
+ cloned_sha = repos[project].rev_parse('HEAD').hexsha
+ self.assertEqual(newRev, cloned_sha)
+
+ def test_post_and_master_checkout(self):
+ project = "org/project1"
+ master_project = "org/project2"
+ path = os.path.join(self.upstream_root, project)
+ repo = git.Repo(path)
+ repo.head.reference = repo.heads['master']
+ commits = []
+ for i in range(0, 3):
+ commits.append(self.create_commit(project))
+ newRev = commits[1]
+
+ cloner = zuul.lib.cloner.Cloner(
+ git_base_url=self.upstream_root,
+ projects=[project, master_project],
+ workspace=self.workspace_root,
+ zuul_branch=None,
+ zuul_ref='master',
+ zuul_url=self.git_root,
+ zuul_project=project,
+ zuul_newrev=newRev
+ )
+ cloner.execute()
+ repos = self.getWorkspaceRepos([project, master_project])
+ cloned_sha = repos[project].rev_parse('HEAD').hexsha
+ self.assertEqual(newRev, cloned_sha)
+ self.assertEqual(
+ repos[master_project].rev_parse('HEAD').hexsha,
+ repos[master_project].rev_parse('master').hexsha)