On Mar 8, 2008, at 9:04 AM, David Roundy wrote:

> On Sat, Mar 8, 2008 at 8:43 AM, Mark Stosberg <[EMAIL PROTECTED]>  
> wrote:
>>  I think so. Here are the commands we are asking buildbot to run:
>>
>>  f1.addStep(step.Darcs, timeout=3600, repourl='http://darcs.net/ 
>> repos/unstable', mode="copy")
...
>>  f1.addStep(step.Test, timeout=3600, command=['bash','-c','make  
>> test'])
...
>>  So, I think you can decode the shell commands it runs from that.
>
> No, unfortunately buildbot does something different than this, and we
> can't really tell what it's actually doing.

It spawns a subprocess and executes something in it. It prints to a  
web page the name of the executable, the arguments, the current  
working directory, and the environment variables, and the exit code.   
Here is the output from the "make test" step mentioned above:

http://darcs.net:8008/macos-tiger/builds/26/step-test/0

We know what happens when a process is spawned and run -- the only  
remaining uncertainty is what the buildbot does with the stderr,  
stdout, and stdin pipes of the child process.  Here is the relevant  
source code:

http://buildbot.net/trac/browser/buildbot/slave/commands.py?rev=491#L311

The call to "spawnProcess" is where Buildbot hands off the job of  
spawning a subprocess to the Twisted library.  I see just before that  
it says

         if not self.keepStdinOpen:
              self.pp.closeStdin()

I see from the script quoted above in this Mark Stosberg's message  
that the name of the class created is "Test", respectively.  Let's  
look at that class:

http://buildbot.net/trac/browser/buildbot/steps/shell.py?rev=491#L280

It does not set the "keepStdinOpen" member variable, so it must still  
be set to the default setting.  A bit of Grep Oriented Programming  
tells me that the default value is false, and I think that it can be  
set by passing a keyword 'keep_stdin_open', like this:

f1.addStep(step.Test, timeout=3600, command=['bash','-c','make  
test'] , keep_stdin_open=True)

So, my current hypothesis is that closing stdin changes the behavior  
of the perl tests.  I don't think there is anything else that differs  
between the buildslave's invocation of 'make test' and a local  
invocation of 'make test' from a bash shell.

One thing that would have helped with this debugging -- whether or  
not closing stdin turns out to be an issue -- is if the buildbot page  
that describes the step (linked above) included the disposition of  
the three standard pipes as well as all of the other relevant  
information about the process's environment.  Another thing that  
would help -- whether or not closing stdin turns out to be an issue  
-- is if buildbot didn't close stdin by default.  (That way, we  
wouldn't have to wonder whether it changes the behavior, because it  
would be the same when spawned by a buildslave or when run from an  
interactive shell by a user.)


> Perhaps it's only the
> environment that differs?

We can easily tell if any environment variables differ by comparing  
the ones listed on the buildbot page that describes the step with the  
result of 'env' in the local shell.

> Maybe it changes the default shell?

According to the buildbot page linked above the process being  
executed has argv: ['bash', '-c', 'make test'].


Regards,

Zooko

_______________________________________________
darcs-devel mailing list
darcs-devel@darcs.net
http://lists.osuosl.org/mailman/listinfo/darcs-devel

Reply via email to