Add views and jobs only options for update

JJB 2.0 update does not allow updating only views
or jobs which would be useful, which is implemented with
delete and delete-all. This patch add's thoses flags
for the update option.

Change-Id: I3712c8552ea83a4c29c05461894c4464aa41230f
Signed-off-by: Anil Belur <askb23@gmail.com>
This commit is contained in:
Anil Belur 2018-01-25 07:46:40 +10:00
parent 05e1d8eea1
commit ad61af1670
No known key found for this signature in database
GPG Key ID: 0FAA11C1B55BFA62
2 changed files with 38 additions and 7 deletions

View File

@ -190,6 +190,13 @@ use::
jenkins-jobs update --workers 0 /path/to/defs
To update only views or only jobs, simply add the argument
--views-only or --jobs-only after the command::
jenkins-jobs update --views-only Foo-view
jenkins-jobs update --jobs-only Foo-job
Passing Multiple Paths
^^^^^^^^^^^^^^^^^^^^^^
It is possible to pass multiple paths to JJB using colons as a path separator on

View File

@ -72,6 +72,18 @@ class UpdateSubCommand(base.BaseSubCommand):
dest='n_workers',
help="number of workers to use, 0 for autodetection and 1 "
"for just one worker.")
update.add_argument(
'-j', '--jobs-only',
action='store_true', dest='add_jobs',
default=False,
help='update only jobs'
)
update.add_argument(
'-v', '--views-only',
action='store_true', dest='add_views',
default=False,
help='update only views'
)
def _generate_xmljobs(self, options, jjb_config=None):
builder = JenkinsManager(jjb_config)
@ -104,6 +116,10 @@ class UpdateSubCommand(base.BaseSubCommand):
def execute(self, options, jjb_config):
if options.add_jobs and options.add_views:
raise JenkinsJobsException(
'"--views-only" and "--jobs-only" cannot be used together.')
if options.n_workers < 0:
raise JenkinsJobsException(
'Number of workers must be equal or greater than 0')
@ -111,13 +127,21 @@ class UpdateSubCommand(base.BaseSubCommand):
builder, xml_jobs, xml_views = self._generate_xmljobs(
options, jjb_config)
jobs, num_updated_jobs = builder.update_jobs(
xml_jobs, n_workers=options.n_workers)
logger.info("Number of jobs updated: %d", num_updated_jobs)
views, num_updated_views = builder.update_views(
xml_views, n_workers=options.n_workers)
logger.info("Number of views updated: %d", num_updated_views)
if options.add_jobs:
jobs, num_updated_jobs = builder.update_jobs(
xml_jobs, n_workers=options.n_workers)
logger.info("Number of jobs updated: %d", num_updated_jobs)
elif options.add_views:
views, num_updated_views = builder.update_views(
xml_views, n_workers=options.n_workers)
logger.info("Number of views updated: %d", num_updated_views)
else:
jobs, num_updated_jobs = builder.update_jobs(
xml_jobs, n_workers=options.n_workers)
logger.info("Number of jobs updated: %d", num_updated_jobs)
views, num_updated_views = builder.update_views(
xml_views, n_workers=options.n_workers)
logger.info("Number of views updated: %d", num_updated_views)
keep_jobs = [job.name for job in xml_jobs]
if options.delete_old: