summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikolas Sepos <nikolas.sepos@gmail.com>2017-01-11 14:00:40 +0200
committerNikolas Sepos <nikolas.sepos@gmail.com>2017-01-27 20:00:47 +0200
commitd4418907d9839a9d2e61f2d8206b271282bfc9e6 (patch)
tree1acb5d7008fcd3afe87ff17496a2ef92172540f9
parent150705cf5065d3aa82a038a82eb35e3977c27e7c (diff)
downloadpython-jenkins-job-builder-d4418907d9839a9d2e61f2d8206b271282bfc9e6.tar.gz
python-jenkins-job-builder-d4418907d9839a9d2e61f2d8206b271282bfc9e6.tar.xz
python-jenkins-job-builder-d4418907d9839a9d2e61f2d8206b271282bfc9e6.zip
Add Dimensions SCM support
Change-Id: I6a8247ef42f9fba6f619e6cbd07726c3bb704e56
-rw-r--r--jenkins_jobs/modules/scm.py103
-rw-r--r--tests/scm/fixtures/dimensions-full.xml30
-rw-r--r--tests/scm/fixtures/dimensions-full.yaml25
-rw-r--r--tests/scm/fixtures/dimensions-minimal.xml20
-rw-r--r--tests/scm/fixtures/dimensions-minimal.yaml3
5 files changed, 181 insertions, 0 deletions
diff --git a/jenkins_jobs/modules/scm.py b/jenkins_jobs/modules/scm.py
index 2b7331ad..a151e82b 100644
--- a/jenkins_jobs/modules/scm.py
+++ b/jenkins_jobs/modules/scm.py
@@ -1256,6 +1256,109 @@ def url(registry, xml_parent, data):
data.get('clear-workspace', False)).lower()
+def dimensions(registry, xml_parent, data):
+ """yaml: dimensions
+
+ Specifies the Dimensions SCM repository for this job.
+ Requires Jenkins :jenkins-wiki:`Dimensions Plugin <Dimensions+Plugin>`.
+
+ :arg str project: Project name of format PRODUCT_ID:PROJECT_NAME (required)
+ :arg str permissions: Default Permissions for updated files
+ (default: DEFAULT)
+
+ :Permissions:
+ * **DEFAULT**
+ * **READONLY**
+ * **WRITABLE**
+ :arg str eol: End of line (default: DEFAULT)
+
+ :End of line:
+ * **DEFAULT**
+ * **UNIX**
+ * **WINDOWS**
+ * **UNCHANGED**
+ :arg list folders: Folders to monitor (default /)
+ :arg list exclude: Paths to exclude from monitor
+ :arg str username: Repository username for this job
+ :arg str password: Repository password for this job
+ :arg str server: Dimensions server for this job
+ :arg str database: Dimensions database for this job.
+ Format must be database@dsn
+ :arg bool update: Use update (default false)
+ :arg bool clear-workspace: Clear workspace prior to build (default false)
+ :arg bool force-build: Force build even if the repository SCM checkout
+ operation fails (default false)
+ :arg bool overwrite-modified: Overwrite files in worspace from
+ repository files (default false)
+ :arg bool expand-vars: Expand substitution variables (default false)
+ :arg bool no-metadata: Checkout files with no metadata (default false)
+ :arg bool maintain-timestamp: Maintain file timestamp from Dimensions
+ (default false)
+ :arg bool slave-checkout: Force slave based checkout (default false)
+ :arg str timezone: Server timezone
+ :arg str web-url: Dimensions Web URL
+
+ Examples:
+
+ .. literalinclude:: /../../tests/scm/fixtures/dimensions-minimal.yaml
+ :language: yaml
+ .. literalinclude:: /../../tests/scm/fixtures/dimensions-full.yaml
+ :language: yaml
+
+ """
+
+ scm = XML.SubElement(
+ xml_parent,
+ 'scm', {'class': 'hudson.plugins.dimensionsscm.DimensionsSCM'})
+
+ # List to check against for valid permission
+ perm = ['DEFAULT', 'READONLY', 'WRITABLE']
+
+ # List to check against for valid end of line
+ eol = ['DEFAULT', 'UNIX', 'WINDOWS', 'UNCHANGED']
+
+ mapping = [
+ # option, xml name, default value (text), attributes (hard coded)
+ ('project', 'project', None),
+ ('permissions', 'permissions', 'DEFAULT', perm),
+ ('eol', 'eol', 'DEFAULT', eol),
+ ('update', 'canJobUpdate', False),
+ ('clear-workspace', 'canJobDelete', False),
+ ('force-build', 'canJobForce', False),
+ ('overwrite-modified', 'canJobRevert', False),
+ ('expand-vars', 'canJobExpand', False),
+ ('no-metadata', 'canJobNoMetadata', False),
+ ('maintain-timestamp', 'canJobNoTouch', False),
+ ('slave-checkout', 'forceAsSlave', False),
+ ]
+ convert_mapping_to_xml(scm, data, mapping, fail_required=True)
+
+ # Folders to monitor. Default '/'
+ folders = XML.SubElement(scm, 'folders')
+ if 'folders' in data:
+ for folder in data['folders']:
+ XML.SubElement(folders, 'string').text = folder
+ else:
+ XML.SubElement(folders, 'string').text = '/'
+
+ # Excluded paths
+ exclude = XML.SubElement(scm, 'pathsToExclude')
+ if 'exclude' in data:
+ for exc in data['exclude']:
+ XML.SubElement(exclude, 'string').text = exc
+
+ optional_mapping = [
+ # option, xml name, default value (text), attributes (hard coded)
+ ('username', 'jobUserName', None),
+ ('password', 'jobPasswd', None),
+ ('server', 'jobServer', None),
+ ('database', 'jobDatabase', None),
+ ('timezone', 'jobTimeZone', None),
+ ('web-url', 'jobWebUrl', None),
+ ]
+ convert_mapping_to_xml(scm, data, optional_mapping, fail_required=False)
+
+
class SCM(jenkins_jobs.modules.base.Base):
sequence = 30
diff --git a/tests/scm/fixtures/dimensions-full.xml b/tests/scm/fixtures/dimensions-full.xml
new file mode 100644
index 00000000..81e9594f
--- /dev/null
+++ b/tests/scm/fixtures/dimensions-full.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project>
+ <scm class="hudson.plugins.dimensionsscm.DimensionsSCM">
+ <project>myProduct:myProject</project>
+ <permissions>WRITABLE</permissions>
+ <eol>UNIX</eol>
+ <canJobUpdate>true</canJobUpdate>
+ <canJobDelete>true</canJobDelete>
+ <canJobForce>true</canJobForce>
+ <canJobRevert>true</canJobRevert>
+ <canJobExpand>true</canJobExpand>
+ <canJobNoMetadata>true</canJobNoMetadata>
+ <canJobNoTouch>true</canJobNoTouch>
+ <forceAsSlave>true</forceAsSlave>
+ <folders>
+ <string>src</string>
+ <string>test</string>
+ </folders>
+ <pathsToExclude>
+ <string>excluded_dir</string>
+ <string>excluded_other_dir</string>
+ </pathsToExclude>
+ <jobUserName>johnd</jobUserName>
+ <jobPasswd>passw0rd</jobPasswd>
+ <jobServer>my.dmscm.server:1234</jobServer>
+ <jobDatabase>myDatabase@myDsn</jobDatabase>
+ <jobTimeZone>Europe/Berlin</jobTimeZone>
+ <jobWebUrl>https://my.dmscm.weburl</jobWebUrl>
+ </scm>
+</project>
diff --git a/tests/scm/fixtures/dimensions-full.yaml b/tests/scm/fixtures/dimensions-full.yaml
new file mode 100644
index 00000000..aaa13ab5
--- /dev/null
+++ b/tests/scm/fixtures/dimensions-full.yaml
@@ -0,0 +1,25 @@
+scm:
+ - dimensions:
+ project: myProduct:myProject
+ permissions: WRITABLE
+ eol: UNIX
+ folders:
+ - src
+ - test
+ exclude:
+ - excluded_dir
+ - excluded_other_dir
+ username: johnd
+ password: passw0rd
+ server: my.dmscm.server:1234
+ database: myDatabase@myDsn
+ update: true
+ clear-workspace: true
+ force-build: true
+ overwrite-modified: true
+ expand-vars: true
+ no-metadata: true
+ maintain-timestamp: true
+ slave-checkout: true
+ timezone: Europe/Berlin
+ web-url: https://my.dmscm.weburl
diff --git a/tests/scm/fixtures/dimensions-minimal.xml b/tests/scm/fixtures/dimensions-minimal.xml
new file mode 100644
index 00000000..560cce24
--- /dev/null
+++ b/tests/scm/fixtures/dimensions-minimal.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project>
+ <scm class="hudson.plugins.dimensionsscm.DimensionsSCM">
+ <project>myProduct:myProject</project>
+ <permissions>DEFAULT</permissions>
+ <eol>DEFAULT</eol>
+ <canJobUpdate>false</canJobUpdate>
+ <canJobDelete>false</canJobDelete>
+ <canJobForce>false</canJobForce>
+ <canJobRevert>false</canJobRevert>
+ <canJobExpand>false</canJobExpand>
+ <canJobNoMetadata>false</canJobNoMetadata>
+ <canJobNoTouch>false</canJobNoTouch>
+ <forceAsSlave>false</forceAsSlave>
+ <folders>
+ <string>/</string>
+ </folders>
+ <pathsToExclude/>
+ </scm>
+</project>
diff --git a/tests/scm/fixtures/dimensions-minimal.yaml b/tests/scm/fixtures/dimensions-minimal.yaml
new file mode 100644
index 00000000..b0038372
--- /dev/null
+++ b/tests/scm/fixtures/dimensions-minimal.yaml
@@ -0,0 +1,3 @@
+scm:
+ - dimensions:
+ project: myProduct:myProject