Ticket #228: step_props.diff
| File step_props.diff, 6.4 KB (added by nhemingway, 2 years ago) |
|---|
-
buildbot/process/buildstep.py
diff -rN -u old-buildbot_step_props/buildbot/process/buildstep.py new-buildbot_step_props/buildbot/process/buildstep.py
old new 632 632 def getProperty(self, propname): 633 633 return self.build.getProperty(propname) 634 634 635 def getPropertyOrDefault(self, propname, default): 636 return self.build.getPropertyOrDefault(propname, default) 637 635 638 def setProperty(self, propname, value): 636 639 self.build.setProperty(propname, value) 637 640 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 638 650 def startStep(self, remote): 639 651 """Begin the step. This returns a Deferred that will fire when the 640 652 step finishes. -
buildbot/status/builder.py
diff -rN -u old-buildbot_step_props/buildbot/status/builder.py new-buildbot_step_props/buildbot/status/builder.py
old new 670 670 watchers = [] 671 671 updates = {} 672 672 finishedWatchers = [] 673 properties = {} 673 674 674 675 def __init__(self, parent): 675 676 assert interfaces.IBuildStatus(parent) … … 679 680 self.watchers = [] 680 681 self.updates = {} 681 682 self.finishedWatchers = [] 683 self.properties = {} 682 684 683 685 def getName(self): 684 686 """Returns a short string with the name of this step. This string … … 706 708 def getLogs(self): 707 709 return self.logs 708 710 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 709 720 def getURLs(self): 710 721 return self.urls.copy() 711 722 … … 799 810 def setProgress(self, stepprogress): 800 811 self.progress = stepprogress 801 812 813 def setStepProperty(self, propname, value): 814 self.properties[propname] = value 815 802 816 def stepStarted(self): 803 817 self.started = util.now() 804 818 if self.build: … … 886 900 self.urls = {} 887 901 888 902 903 import operator 904 889 905 class BuildStatus(styles.Versioned): 890 906 implements(interfaces.IBuildStatus, interfaces.IStatusEvent) 891 907 persistenceVersion = 2 … … 937 953 def getProperty(self, propname): 938 954 return self.properties[propname] 939 955 956 def getPropertyOrDefault(self, propname, default): 957 if self.properties.has_key(propname): 958 return self.properties[propname] 959 else: 960 return default 961 940 962 def getNumber(self): 941 963 return self.number 942 964 … … 1023 1045 def getTestResults(self): 1024 1046 return self.testResults 1025 1047 1048 def sumStepProperty(self, propname): 1049 return reduce(operator.add, map(lambda x: x.getStepPropertyOrDefault(propname, 0), self.steps)) 1050 1026 1051 def getLogs(self): 1027 1052 # TODO: steps should contribute significant logs instead of this 1028 1053 # hack, which returns every log from every step. The logs should get -
buildbot/test/test_status.py
diff -rN -u old-buildbot_step_props/buildbot/test/test_status.py new-buildbot_step_props/buildbot/test/test_status.py
old new 980 980 self.failUnless(isinstance(b2, client.RemoteBuilder)) 981 981 b3 = client.makeRemote(None) 982 982 self.failUnless(b3 is None) 983 984 class 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') -
docs/buildbot.texinfo
diff -rN -u old-buildbot_step_props/docs/buildbot.texinfo new-buildbot_step_props/docs/buildbot.texinfo
old new 187 187 * Transferring Files:: 188 188 * Triggering Schedulers:: 189 189 * Writing New BuildSteps:: 190 * BuildStep Properties:: 190 191 191 192 Source Checkout 192 193 … … 3763 3764 * Transferring Files:: 3764 3765 * Triggering Schedulers:: 3765 3766 * Writing New BuildSteps:: 3767 * BuildStep Properties:: 3766 3768 @end menu 3767 3769 3768 3770 @node Common Parameters, Source Checkout, Build Steps, Build Steps … … 5339 5341 5340 5342 5341 5343 5342 @node BuildStep URLs, , Adding LogObservers, Writing New BuildSteps5344 @node BuildStep URLs, BuildStep Properties , Adding LogObservers, Writing New BuildSteps 5343 5345 @subsubsection BuildStep URLs 5344 5346 5345 5347 @cindex links … … 5416 5418 be merged before the buildbot ever sees them, so such interleaving 5417 5419 will be unavoidable. 5418 5420 5421 @node BuildStep Properties, , BuildStep URLs, Build Steps 5422 @subsection BuildStep Properties 5423 5424 BuildSteps may set and retrieve properties. There is also a facility 5425 to retrieve a step property's value returning a default value if the 5426 property was not set. At the build level, there is a helper to sum a 5427 property across a whole build. 5419 5428 5420 5429 @node Interlocks, Build Factories, Build Steps, Build Process 5421 5430 @section Interlocks
![[Buildbot Logo]](/trac/chrome/site/header-text-transparent.png)