summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbin Vass <albin.vass@zenseact.com>2022-03-10 09:42:36 +0100
committerAlbin Vass <albin.vass@zenseact.com>2022-04-12 21:08:51 +0200
commit9cf3b834bbb926ff7e96c8c6185c45edad15d3ae (patch)
tree6064f5bdcfdd6b466b3398026ace8c173ab0326c
parent3f594f0721cb74fed015fef9bd0da55db20661b1 (diff)
downloadzuul-9cf3b834bbb926ff7e96c8c6185c45edad15d3ae.tar.gz
Allow using 'unique' workspace scheme in jobs
Change-Id: Ie3c00f1afc368b2a86fc80554324c37fea9f07e9
-rw-r--r--doc/source/config/job.rst12
-rw-r--r--tests/unit/test_merger_repo.py8
-rw-r--r--zuul/configloader.py2
-rw-r--r--zuul/model.py2
4 files changed, 21 insertions, 3 deletions
diff --git a/doc/source/config/job.rst b/doc/source/config/job.rst
index 326487aa2..aaf4ff079 100644
--- a/doc/source/config/job.rst
+++ b/doc/source/config/job.rst
@@ -939,3 +939,15 @@ Here is an example of two job definitions:
Note, however, that this scheme may produce collisions with
`component` and `component/component`.
+
+ .. value:: unique
+
+ This writes the repository into a directory based on the
+ organization name and the ``urllib.parse.quote_plus`` formatted
+ project name. For example::
+
+ src/example.com/organization/organization%2Fproject
+
+
+ This scheme will produce unique workspace paths for every repository
+ and won't cause collisions.
diff --git a/tests/unit/test_merger_repo.py b/tests/unit/test_merger_repo.py
index 3eb208741..5cf308951 100644
--- a/tests/unit/test_merger_repo.py
+++ b/tests/unit/test_merger_repo.py
@@ -1133,7 +1133,13 @@ class TestMergerSchemes(ZuulTestCase):
os.path.join(root, 'project1')))
def test_unique_scheme(self):
- merger = self._getMerger(scheme=zuul.model.SCHEME_UNIQUE)
+ cache_merger = self._getMerger(work_root=self.cache_root)
+ cache_merger.updateRepo('gerrit', 'org/project1')
+ self._assertScheme(self.cache_root, 'unique')
+
+ merger = self._getMerger(
+ cache_root=self.cache_root,
+ scheme=zuul.model.SCHEME_UNIQUE)
merger.getRepo('gerrit', 'org/project1')
self._assertScheme(self.work_root, 'unique')
diff --git a/zuul/configloader.py b/zuul/configloader.py
index 29e7a2ede..591b848fe 100644
--- a/zuul/configloader.py
+++ b/zuul/configloader.py
@@ -632,7 +632,7 @@ class JobParser(object):
'variant-description': str,
'post-review': bool,
'match-on-config-updates': bool,
- 'workspace-scheme': vs.Any('golang', 'flat'),
+ 'workspace-scheme': vs.Any('golang', 'flat', 'unique'),
}
job_name = {vs.Required('name'): str}
diff --git a/zuul/model.py b/zuul/model.py
index 0bd5cb88b..b35e544ea 100644
--- a/zuul/model.py
+++ b/zuul/model.py
@@ -106,7 +106,7 @@ NODE_STATES = set([STATE_BUILDING,
# Workspace scheme
SCHEME_GOLANG = 'golang'
SCHEME_FLAT = 'flat'
-SCHEME_UNIQUE = 'unique' # Internal use only
+SCHEME_UNIQUE = 'unique'
def add_debug_line(debug_messages, msg, indent=0):