cloner: make more zuul args optional
When running in a timer job ZUUL_BRANCH and ZUUL_REF are not provided. Rather than having to set those in the job definition, just make them optional for zuul-cloner. The prepare logic is updated to avoid incorrect string substitutions in case they are not supplied. With those two optional, the only remaining required argument is ZUUL_URL. This is only required if ZUUL_REF is set. Also, enhance debugability by always printing the commit sha, even if cloner has simply checked out a branch. Change-Id: I8f88cb8d1e49255d38c2c75dd226b3027779aa9e
This commit is contained in:
parent
fbdcdaa594
commit
f5f1a61b3d
@ -88,17 +88,14 @@ class Cloner(zuul.cmd.ZuulApp):
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
# Validate ZUUL_* arguments. If ref is provided then URL is required.
|
||||
zuul_args = [zuul_opt for zuul_opt, val in vars(args).items()
|
||||
if zuul_opt.startswith('zuul') and val is not None]
|
||||
if 'zuul_ref' in zuul_args and 'zuul_url' not in zuul_args:
|
||||
parser.error("Specifying a Zuul ref requires a Zuul url. "
|
||||
"Define Zuul arguments either via environment "
|
||||
"variables or using options above.")
|
||||
|
||||
# Validate ZUUL_* arguments. If any ZUUL_* argument is set they
|
||||
# must all be set, otherwise fallback to defaults.
|
||||
zuul_missing = [zuul_opt for zuul_opt, val in vars(args).items()
|
||||
if zuul_opt.startswith('zuul') and val is None]
|
||||
if (len(zuul_missing) > 0 and
|
||||
len(zuul_missing) < len(ZUUL_ENV_SUFFIXES)):
|
||||
parser.error(("Some Zuul parameters are not set:\n\t%s\n"
|
||||
"Define them either via environment variables or "
|
||||
"using options above." %
|
||||
"\n\t".join(sorted(zuul_missing))))
|
||||
self.args = args
|
||||
|
||||
def setup_logging(self, color=False, verbose=False):
|
||||
|
@ -138,8 +138,11 @@ class Cloner(object):
|
||||
if project in self.project_branches:
|
||||
indicated_branch = self.project_branches[project]
|
||||
|
||||
override_zuul_ref = re.sub(self.zuul_branch, indicated_branch,
|
||||
self.zuul_ref)
|
||||
if indicated_branch:
|
||||
override_zuul_ref = re.sub(self.zuul_branch, indicated_branch,
|
||||
self.zuul_ref)
|
||||
else:
|
||||
override_zuul_ref = None
|
||||
|
||||
if indicated_branch and repo.hasBranch(indicated_branch):
|
||||
self.log.info("upstream repo has branch %s", indicated_branch)
|
||||
@ -150,14 +153,18 @@ class Cloner(object):
|
||||
# FIXME should be origin HEAD branch which might not be 'master'
|
||||
fallback_branch = 'master'
|
||||
|
||||
fallback_zuul_ref = re.sub(self.zuul_branch, fallback_branch,
|
||||
self.zuul_ref)
|
||||
if self.zuul_branch:
|
||||
fallback_zuul_ref = re.sub(self.zuul_branch, fallback_branch,
|
||||
self.zuul_ref)
|
||||
else:
|
||||
fallback_zuul_ref = None
|
||||
|
||||
# If we have a non empty zuul_ref to use, use it. Otherwise we fall
|
||||
# back to checking out the branch.
|
||||
if ((override_zuul_ref and
|
||||
self.fetchFromZuul(repo, project, override_zuul_ref)) or
|
||||
(fallback_zuul_ref != override_zuul_ref and
|
||||
(fallback_zuul_ref and
|
||||
fallback_zuul_ref != override_zuul_ref and
|
||||
self.fetchFromZuul(repo, project, fallback_zuul_ref))):
|
||||
# Work around a bug in GitPython which can not parse FETCH_HEAD
|
||||
gitcmd = git.Git(dest)
|
||||
@ -169,9 +176,9 @@ class Cloner(object):
|
||||
# Checkout branch
|
||||
self.log.info("Falling back to branch %s", fallback_branch)
|
||||
try:
|
||||
repo.checkout('remotes/origin/%s' % fallback_branch)
|
||||
commit = repo.checkout('remotes/origin/%s' % fallback_branch)
|
||||
except (ValueError, GitCommandError):
|
||||
self.log.exception("Fallback branch not found: %s",
|
||||
fallback_branch)
|
||||
self.log.info("Prepared %s repo with branch %s",
|
||||
project, fallback_branch)
|
||||
self.log.info("Prepared %s repo with branch %s at commit %s",
|
||||
project, fallback_branch, commit)
|
||||
|
@ -130,6 +130,7 @@ class Repo(object):
|
||||
self.log.debug("Checking out %s" % ref)
|
||||
repo.head.reference = ref
|
||||
reset_repo_to_head(repo)
|
||||
return repo.head.commit
|
||||
|
||||
def cherryPick(self, ref):
|
||||
repo = self.createRepoObject()
|
||||
|
Loading…
x
Reference in New Issue
Block a user