Hi folks,


first of all thanks to the team and contributors for working on Buildbot. I 
enjoyed deploying it in version 0.8 and really dig the new Web interface of 0.9.



However, during the port of one of my custom builders I hit a problem 
concerning changes. I read the documentation many times, dived into the source 
code and tried many things, but fear I can't solve this by myself. So any help 
would be really appreciated.



In order to avoid the X/Y-problem, I'd like to describe my usecase first:

I use Buildbot to run pre-merge continuous integration checks on a range of 
projects backed by Gerrit. A subclassed `GerritChangeSource` reacts on 
published reviews, adds all these as Buildbot changes to the database which 
triggers a custom builder. This builder now looks at all incoming changes, does 
some dependency calculations (due to projects with submodules) and triggers 
builds on multiple schedulers, each with a subset of the incoming changes (and 
some sourcestamps generated due to dependencies). This allows for each 
published Gerrit change  to be built as stand-alone as possible.



All these classes (`GerritChangeSource` subclass and the buildstep for the 
custom builder) were written for Buildbot 0.8 and worked great. With 0.9.14 
(after rewriting them according to `Upgrading to Nine`, not so much. Since 
there's a short and a long version of the problem, I'll give you both.



The short version:

In version 0.8 each build got all the changes that were added by the connected 
`ChangeSource` (using `self.build.allChanges()`). In version 0.9.14 this only 
ever returns one change.

How can I get all changes the `ChangeSource` added?



The long version:

I subclass `GerritChangeSource` to receive Buildbot changes from Gerrit. 
Subclassing is mostly done to have a way of forcing rebuilds for a Gerrit 
change. Whenever a Gerrit change is published, I can see in the twistd.log that 
the expected number of changes are added to the database. So for two Gerrit 
changes that are published I see two Buildbot changes added to the database 
according to twistd.log. There only is one scheduler which reacts on these 
Gerrit changes (using `util.GerritChangeFilter` as `change_filter`). This 
scheduler only has one connected builder, which has `collapseRequests` set to 
`False`. This builder is triggered by the `ChangeSource` and its one and only 
step starts. This custom step implements `buildstep.ShellMixin` and 
`buildstep.Buildstep`. Inside the run method I now try to access all changes 
added by the ChangeSource for this build. Now here's the problem.

- `self.build.allChanges()` only ever returns a list of size 1, containing only 
the latest change.

- `self.build.requests()` also only ever returns a list of size 1 (and each 
request only ever has one change in each of the codebases).

- `self.build.build_status.getChanges()` only ever returns a list of size 1, 
containing only the latest change.

How can I access all changes that were added by the `ChangeSource`? They are 
sometimes listed on the `Changes` tab in the Web-UI (sometimes the same commit 
is shown multiple times here), but I cannot seem to get at them from inside the 
buildstep itself.



Did I miss any vital information? Is there anything I can explain in more 
detail?



Any help in this matter would be greatly appreciated.



Best Regards

Lennart Sauerbeck

_______________________________________________
users mailing list
users@buildbot.net
https://lists.buildbot.net/mailman/listinfo/users

Reply via email to