Ticket #228: step_props.diff

File step_props.diff, 6.4 kB (added by nhemingway, 8 months ago)

darcs diff -u to add step properties

  • old-buildbot_step_props/buildbot/process/buildstep.py

    old new  
    632632    def getProperty(self, propname): 
    633633        return self.build.getProperty(propname) 
    634634 
     635    def getPropertyOrDefault(self, propname, default): 
     636        return self.build.getPropertyOrDefault(propname, default) 
     637 
    635638    def setProperty(self, propname, value): 
    636639        self.build.setProperty(propname, value) 
    637640 
     641    def getStepProperty(self, propname): 
     642        return self.step_status.getStepProperty(propname) 
     643 
     644    def getStepPropertyOrDefault(self, propname, default): 
     645        return self.step_status.getStepPropertyOrDefault(propname, default) 
     646 
     647    def setStepProperty(self, propname, value): 
     648        self.step_status.setStepProperty(propname, value) 
     649 
    638650    def startStep(self, remote): 
    639651        """Begin the step. This returns a Deferred that will fire when the 
    640652        step finishes. 
  • old-buildbot_step_props/buildbot/status/builder.py

    old new  
    670670    watchers = [] 
    671671    updates = {} 
    672672    finishedWatchers = [] 
     673    properties = {} 
    673674 
    674675    def __init__(self, parent): 
    675676        assert interfaces.IBuildStatus(parent) 
     
    679680        self.watchers = [] 
    680681        self.updates = {} 
    681682        self.finishedWatchers = [] 
     683        self.properties = {} 
    682684 
    683685    def getName(self): 
    684686        """Returns a short string with the name of this step. This string 
     
    706708    def getLogs(self): 
    707709        return self.logs 
    708710 
     711    def getStepProperty(self, propname): 
     712        return self.properties[propname] 
     713 
     714    def getStepPropertyOrDefault(self, propname, default): 
     715        if self.properties.has_key(propname): 
     716            return self.properties[propname] 
     717        else: 
     718            return default 
     719 
    709720    def getURLs(self): 
    710721        return self.urls.copy() 
    711722 
     
    799810    def setProgress(self, stepprogress): 
    800811        self.progress = stepprogress 
    801812 
     813    def setStepProperty(self, propname, value): 
     814        self.properties[propname] = value 
     815 
    802816    def stepStarted(self): 
    803817        self.started = util.now() 
    804818        if self.build: 
     
    886900            self.urls = {} 
    887901 
    888902 
     903import operator 
     904 
    889905class BuildStatus(styles.Versioned): 
    890906    implements(interfaces.IBuildStatus, interfaces.IStatusEvent) 
    891907    persistenceVersion = 2 
     
    937953    def getProperty(self, propname): 
    938954        return self.properties[propname] 
    939955 
     956    def getPropertyOrDefault(self, propname, default): 
     957        if self.properties.has_key(propname): 
     958            return self.properties[propname] 
     959        else: 
     960            return default 
     961 
    940962    def getNumber(self): 
    941963        return self.number 
    942964 
     
    10231045    def getTestResults(self): 
    10241046        return self.testResults 
    10251047 
     1048    def sumStepProperty(self, propname): 
     1049        return reduce(operator.add, map(lambda x: x.getStepPropertyOrDefault(propname, 0), self.steps)) 
     1050 
    10261051    def getLogs(self): 
    10271052        # TODO: steps should contribute significant logs instead of this 
    10281053        # hack, which returns every log from every step. The logs should get 
  • old-buildbot_step_props/buildbot/test/test_status.py

    old new  
    980980        self.failUnless(isinstance(b2, client.RemoteBuilder)) 
    981981        b3 = client.makeRemote(None) 
    982982        self.failUnless(b3 is None) 
     983 
     984class Properties(unittest.TestCase): 
     985    def testProperties(self): 
     986        status = builder.BuildStatus(builder.BuilderStatus("test"), 123) 
     987        status.addStepWithName('step1') 
     988        status.addStepWithName('step2') 
     989        status.addStepWithName('step3') 
     990        status.addStepWithName('step4') 
     991 
     992        steps = status.getSteps() 
     993        (step1, step2, step3, step4) = steps 
     994 
     995        step1.setStepProperty('test-prop', 1) 
     996        step1.setStepProperty('other-prop', 27) # Just to have some other properties around 
     997        step3.setStepProperty('test-prop', 2) 
     998        step4.setStepProperty('test-prop', 4) 
     999 
     1000        self.failUnlessEqual(step1.getStepProperty('test-prop'), 1, 'Retrieve an existing property') 
     1001        self.failUnlessEqual(step1.getStepPropertyOrDefault('test-prop', 99), 1, 'Don\'t default an existing property') 
     1002        self.failUnlessEqual(step2.getStepPropertyOrDefault('test-prop', 99), 99, 'Default a non-existant property') 
     1003 
     1004        self.failUnlessEqual( status.sumStepProperty('test-prop'), 7, 'Sum property across the build') 
  • old-buildbot_step_props/docs/buildbot.texinfo

    old new  
    187187* Transferring Files::           
    188188* Triggering Schedulers::        
    189189* Writing New BuildSteps::       
     190* BuildStep Properties:: 
    190191 
    191192Source Checkout 
    192193 
     
    37633764* Transferring Files::           
    37643765* Triggering Schedulers::        
    37653766* Writing New BuildSteps::       
     3767* BuildStep Properties:: 
    37663768@end menu 
    37673769 
    37683770@node Common Parameters, Source Checkout, Build Steps, Build Steps 
     
    53395341 
    53405342 
    53415343 
    5342 @node BuildStep URLs, , Adding LogObservers, Writing New BuildSteps 
     5344@node BuildStep URLs, BuildStep Properties , Adding LogObservers, Writing New BuildSteps 
    53435345@subsubsection BuildStep URLs 
    53445346 
    53455347@cindex links 
     
    54165418be merged before the buildbot ever sees them, so such interleaving 
    54175419will be unavoidable. 
    54185420 
     5421@node BuildStep Properties, , BuildStep URLs, Build Steps 
     5422@subsection BuildStep Properties 
     5423 
     5424BuildSteps may set and retrieve properties.  There is also a facility 
     5425to retrieve a step property's value returning a default value if the 
     5426property was not set.  At the build level, there is a helper to sum a 
     5427property across a whole build. 
    54195428 
    54205429@node Interlocks, Build Factories, Build Steps, Build Process 
    54215430@section Interlocks