From c4805936fa68aa77b465c2c6af1f3e8919b76545 Mon Sep 17 00:00:00 2001 From: Monty Taylor Date: Thu, 21 Sep 2017 15:40:16 -0500 Subject: [PATCH] Extract required projects from embedded clonemaps Some jobs write out a clone map directly. We can pull from them. Change-Id: I681e864a8550b1166fa078e875e975f4a17ba4fd --- zuul/cmd/migrate.py | 47 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/zuul/cmd/migrate.py b/zuul/cmd/migrate.py index de6dfe0655..1025c7bbea 100644 --- a/zuul/cmd/migrate.py +++ b/zuul/cmd/migrate.py @@ -91,20 +91,46 @@ def deal_with_shebang(data): return (executable, data) -def extract_projects(data): +def _extract_from_vars(line): # export PROJECTS="openstack/blazar $PROJECTS" # export DEVSTACK_PROJECT_FROM_GIT=python-swiftclient # export DEVSTACK_PROJECT_FROM_GIT="python-octaviaclient" # export DEVSTACK_PROJECT_FROM_GIT+=",glean" projects = [] + line = line.replace('"', '').replace('+', '').replace(',', ' ') + if (line.startswith('export PROJECTS') or + line.startswith('export DEVSTACK_PROJECT_FROM_GIT')): + nothing, project_string = line.split('=') + project_string = project_string.replace('$PROJECTS', '').strip() + projects = project_string.split() + return projects + + +def extract_projects(data): + # clonemap: + # - name: openstack/windmill + # dest: . + # EOF + projects = [] data_lines = data.split('\n') + in_clonemap = False for line in data_lines: - line = line.strip().replace('"', '').replace('+', '').replace(',', ' ') - if (line.startswith('export PROJECTS') or - line.startswith('export DEVSTACK_PROJECT_FROM_GIT')): - nothing, project_string = line.split('=') - project_string = project_string.replace('$PROJECTS', '').strip() - projects.extend(project_string.split()) + line = line.strip() + if line == 'clonemap:': + in_clonemap = True + continue + elif line == 'EOF': + in_clonemap = False + continue + if in_clonemap: + if line.startswith('- name:'): + garbage, project = line.split(':') + project = project.strip().replace("'", '').replace('"', '') + if project == '$ZUUL_PROJECT': + continue + projects.append(project) + else: + projects.extend(_extract_from_vars(line)) return projects @@ -790,8 +816,13 @@ class Job: output['nodes'] = self.getNodes() if self.required_projects: - output['required-projects'] = expand_project_names( + expanded_projects = expand_project_names( self.required_projects, project_names) + # Look for project names in the job name. Lookie there - the + # python in operator works on lists and strings. + expanded_projects.extend(expand_project_names( + self.name, project_names)) + output['required-projects'] = list(set(expanded_projects)) return output