181 lines
6 KiB
Python
181 lines
6 KiB
Python
# Copyright 2014 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""
|
|
This module contains functions to get or update stable version for a given
|
|
board.
|
|
|
|
The valid actions are:
|
|
list: Show version of a given board or list all boards and their stable
|
|
versions if --board option is not specified.
|
|
modify: Set the stable version of a given board to the given value.
|
|
delete: Delete the stable version of a given board. So its stable version will
|
|
use the value for board `DEFAULT`.
|
|
"""
|
|
|
|
import common
|
|
|
|
from autotest_lib.cli import topic_common
|
|
|
|
|
|
class stable_version(topic_common.atest):
|
|
"""stable_version class
|
|
|
|
atest stable_version [list|delete|modify] <options>
|
|
"""
|
|
usage_action = '[list|delete|modify]'
|
|
topic = msg_topic = 'stable_version'
|
|
msg_items = '<stable_version>'
|
|
|
|
def __init__(self):
|
|
"""Add to the parser the options common to all the
|
|
stable_version actions.
|
|
"""
|
|
super(stable_version, self).__init__()
|
|
|
|
self.parser.add_option('-b', '--board',
|
|
help='Name of the board',
|
|
type='string',
|
|
default=None,
|
|
metavar='BOARD')
|
|
|
|
self.topic_parse_info = topic_common.item_parse_info(
|
|
attribute_name='board', use_leftover=True)
|
|
|
|
|
|
def parse(self):
|
|
"""Parse command arguments.
|
|
"""
|
|
board_info = topic_common.item_parse_info(attribute_name='board')
|
|
(options, leftover) = super(stable_version, self).parse([board_info])
|
|
|
|
self.board = options.board
|
|
return (options, leftover)
|
|
|
|
|
|
def output(self, results):
|
|
"""Display output.
|
|
|
|
For most actions, the return is a string message, no formating needed.
|
|
|
|
@param results: return of the execute call.
|
|
"""
|
|
if results:
|
|
print results
|
|
|
|
|
|
class stable_version_help(stable_version):
|
|
"""Just here to get the atest logic working. Usage is set by its parent.
|
|
"""
|
|
pass
|
|
|
|
|
|
class stable_version_list(stable_version):
|
|
"""atest stable_version list [--board <board>]"""
|
|
|
|
def execute(self):
|
|
"""Execute list stable version action.
|
|
"""
|
|
if self.board:
|
|
version = self.execute_rpc(op='get_stable_version',
|
|
board=self.board)
|
|
return {self.board: version}
|
|
else:
|
|
return self.execute_rpc(op='get_all_stable_versions')
|
|
|
|
|
|
def output(self, results):
|
|
"""Display output.
|
|
|
|
@param results: A dictionary of board:version.
|
|
"""
|
|
board_columns = max([len(s) for s in results.keys()])
|
|
version_columns = max([len(s) for s in results.values()])
|
|
total_columns = board_columns + version_columns + 3
|
|
format = '%%-%ds | %%s' % board_columns
|
|
print '=' * total_columns
|
|
print format % ('board', 'version')
|
|
print '-' * total_columns
|
|
for board,version in results.iteritems():
|
|
print format % (board, version)
|
|
print '=' * total_columns
|
|
|
|
|
|
class stable_version_modify(stable_version):
|
|
"""atest stable_version modify --board <board> --version <version>
|
|
|
|
Change the stable version of a given board to the given value.
|
|
"""
|
|
|
|
def __init__(self):
|
|
"""Add to the parser the options common to all the
|
|
stable_version actions.
|
|
"""
|
|
super(stable_version_modify, self).__init__()
|
|
|
|
self.parser.add_option('-i', '--version',
|
|
help='Stable version.',
|
|
type='string',
|
|
metavar='VERSION')
|
|
|
|
self.topic_parse_info = topic_common.item_parse_info(
|
|
attribute_name='board', use_leftover=True)
|
|
|
|
|
|
def parse(self):
|
|
"""Parse command arguments.
|
|
"""
|
|
options,leftover = super(stable_version_modify, self).parse()
|
|
|
|
self.version = options.version
|
|
if not self.board or not self.version:
|
|
self.invalid_syntax('Both --board and --version arguments must be '
|
|
'specified.')
|
|
|
|
|
|
def execute(self):
|
|
"""Execute delete stable version action.
|
|
"""
|
|
current_version = self.execute_rpc(op='get_stable_version',
|
|
board=self.board)
|
|
if current_version == self.version:
|
|
print ('Board %s already has stable version of %s.' %
|
|
(self.board, self.version))
|
|
return
|
|
|
|
self.execute_rpc(op='set_stable_version', board=self.board,
|
|
version=self.version)
|
|
print ('Stable version for board %s is changed from %s to %s.' %
|
|
(self.board, current_version, self.version))
|
|
|
|
|
|
class stable_version_delete(stable_version):
|
|
"""atest stable_version delete --board <board>
|
|
|
|
Delete a stable version entry in afe_stable_versions table for a given
|
|
board, so default stable version will be used.
|
|
"""
|
|
|
|
def parse(self):
|
|
"""Parse command arguments.
|
|
"""
|
|
super(stable_version_delete, self).parse()
|
|
if not self.board:
|
|
self.invalid_syntax('`board` argument must be specified to delete '
|
|
'a stable version entry.')
|
|
if self.board == 'DEFAULT':
|
|
self.invalid_syntax('Stable version for board DEFAULT can not be '
|
|
'deleted.')
|
|
|
|
|
|
@topic_common.atest.require_confirmation(
|
|
'Are you sure to delete stable version for the given board?')
|
|
def execute(self):
|
|
"""Execute delete stable version action.
|
|
"""
|
|
self.execute_rpc(op='delete_stable_version', board=self.board)
|
|
print 'Stable version for board %s is deleted.' % self.board
|
|
default_stable_version = self.execute_rpc(op='get_stable_version')
|
|
print ('Stable version for board %s is default to %s' %
|
|
(self.board, default_stable_version))
|