2015-06-02 20 views
0

我已經有一個方法返回特定回購的分支列表,我想用它來動態生成基於Buildbot的Web UI返回列表的選擇。如何使用Buildbot中的'getChoices'成員函數動態生成選擇?

例如,而不是此靜態列表:

c['schedulers'].append(
    schedulers.ForceScheduler(
     ..., 
     branch=util.ChoiceStringParameter(
      ..., 
      choices=['master', 'branch1', 'branch2', ...], 
      ... 

我想的東西動態生成的,像這樣的:

def get_branches(): 
    refs = subprocess.check_output(["git", "ls-remote", "--heads", "[email protected]: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

使用一類是發電機是一種方式進行動態的選擇:

class Branches(object): 
    def __init__(self): 
     self.branches = [] 
     refs = subprocess.check_output(["git", "ls-remote", "--heads", "[email protected]: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"), 
     ... 
相關問題