我已经有一个方法返回特定仓库的分支列表,我想用它根据Buildbot的Web UI中返回的列表动态生成选择。
例如,而不是这个静态列表:
c['schedulers'].append(
schedulers.ForceScheduler(
...,
branch=util.ChoiceStringParameter(
...,
choices=['master', 'branch1', 'branch2', ...],
...
我想要动态生成的东西,比如这个:
def get_branches():
refs = subprocess.check_output(["git", "ls-remote", "--heads", "git@bitbucket.org:foo/bar.git"])
branches = []
for item in refs.split('\n'):
m = re.match(r"^\w+\trefs/heads/(.*$)", item)
if m:
branch = m.group(1)
branches.append(branch)
return branches
c['schedulers'].append(
schedulers.ForceScheduler(
...,
branch=util.ChoiceStringParameter(
...,
choices=get_branches,
...
Buildbot文档解释了它可以通过子类化和覆盖'getChoices'成员函数来完成。它还提供了由InheritBuildParameter类的源提供的an example,但我不明白如何使用'getChoices'成员函数。
关于这个主题的文档很少,我不得不问你这个问题!提前谢谢: - )
答案 0 :(得分:0)
使用作为生成器的类是使动态选择的一种方法:
class Branches(object):
def __init__(self):
self.branches = []
refs = subprocess.check_output(["git", "ls-remote", "--heads", "git@bitbucket.org:foo/bar.git"])
for item in refs.split('\n'):
m = re.match(r"^\w+\trefs/heads/(.*)$", item)
if m:
branch = m.group(1)
self.branches.append(branch)
def __iter__(self):
self.__init__()
for b in self.branches:
yield b
c['schedulers'].append( ForceScheduler(
...
branch=ChoiceStringParameter(name="branch",
choices=Branches(),
default="develop"),
...