[Buildbot-devel] Problem with SVNPoller on windows

Tomaz Stres Tomaz.Stres at hermes-softlab.com
Mon Sep 28 09:29:13 UTC 2009


I had similar problem, which I solved like this

svn_poller = SVNPoller(
                    svnurl=source_code_svn_url,
                    pollinterval=15*60, # seconds
                    histmax=10,
                    svnbin="c:\svn.exe") 

Note: in svnbin I also have problem if I use path which contains spaces
it did not work, but with out spaces it work as it should.

I hope this info will help you to resolve you problem.

Bye Tomaz

-----Original Message-----
From: Oscar Lindberg [mailto:oscar.lindberg at todos.se] 
Sent: Monday, September 28, 2009 11:03 AM
To: buildbot-devel at lists.sourceforge.net
Subject: [Buildbot-devel] Problem with SVNPoller on windows

Subject: Problem with SVNPoller on windows

Hi, 

I'm new to buildbot and also this mailing list, so I hope I'm not doing
something wrong by posting this here. 

Currently I'm setting up my first buildbot project. I've had some
problems with SVNPoller on windows, and I had to resort to a
particularly ugly work-around to make it work (hacking twisted). My hope
is that someone could give me a better alternative, or that this post
could result in some patch of buildbot (or twisted) in the future. 

OK, I'm running: 

--------------------------------------------------
C:\Documents and Settings\todos>buildbot --version Buildbot version:
0.7.11p3 Twisted version: 8.2.0

C:\Documents and Settings\todos>python --version Python 2.6.2
--------------------------------------------------

This results in some warnings at startup, Python 2.6 does not like the
modules that twisted 8.2.0 is using, but that is probably not the
problem: 

------------------------------------------------------------------------
-------
C:\Documents and Settings\todos\My Documents\buildbot_master\x>buildbot
start .
C:\Python26\lib\site-packages\twisted\persisted\sob.py:12:
DeprecationWarning: 
the md5 module is deprecated; use hashlib instead
  import os, md5, sys
C:\Python26\lib\site-packages\twisted\python\filepath.py:12:
DeprecationWarning
: the sha module is deprecated; use the hashlib module instead
  import sha
C:\Python26\lib\site-packages\twisted\mail\smtp.py:10:
DeprecationWarning: the MimeWriter module is deprecated; use the email
package instead
  import MimeWriter, tempfile, rfc822
------------------------------------------------------------------------
-------

The problem is my SVNPoller: 

from master.cfg: 
------------------------------------------------
from buildbot.changes.svnpoller import SVNPoller svn_poller = SVNPoller(
                   svnurl=svn_url,
                   pollinterval=5*60, # seconds
                   histmax=10,
 )
c['sources'] = [ svn_poller ]
------------------------------------------------

When I start, the SVNPoller will throw an exception, and it will not
run. 

In twistd.log:
------------------------------------------------------------------------
------
2009-09-28 13:25:56+0800 [-] SVNPoller polling
2009-09-28 13:25:56+0800 [-] SVNPoller getProcessOutput: svn with args
['info',  '--xml', '--non-interactive', 'svn+ssh://x.se/y/z']
2009-09-28 13:25:56+0800 [-] Unhandled error in Deferred:
2009-09-28 13:25:56+0800 [-] Unhandled Error
	Traceback (most recent call last):
	  File "C:\Python26\lib\site-packages\twisted\internet\base.py",
line 1137, in mainLoop
	    self.runUntilCurrent()
	  File "C:\Python26\lib\site-packages\twisted\internet\base.py",
line 757, in runUntilCurrent
	    call.func(*call.args, **call.kw)
	  File "C:\Python26\lib\site-packages\twisted\internet\task.py",
line 83, in start
	    self()
	  File "C:\Python26\lib\site-packages\twisted\internet\task.py",
line 114, in __call__
	    d = defer.maybeDeferred(self.f, *self.a, **self.kw)
	--- <exception caught here> ---
	  File
"C:\Python26\lib\site-packages\twisted\internet\defer.py",
line 106, in maybeDeferred
	    result = f(*args, **kw)
	  File
"C:\Python26\lib\site-packages\buildbot\changes\svnpoller.py",
line 258, in checksvn
	    d = self.get_root()
	  File
"C:\Python26\lib\site-packages\buildbot\changes\svnpoller.py",
line 283, in get_root
	    d = self.getProcessOutput(args)
	  File
"C:\Python26\lib\site-packages\buildbot\changes\svnpoller.py",
line 274, in getProcessOutput
	    d = utils.getProcessOutput(self.svnbin, args, {})
	  File
"C:\Python26\lib\site-packages\twisted\internet\utils.py",
line 124, in getProcessOutput
	    reactor)
	  File
"C:\Python26\lib\site-packages\twisted\internet\utils.py",
line 25, in _callProtocolWithDeferred
	    reactor.spawnProcess(p, executable,
(executable,)+tuple(args), env,
path)
	  File "C:\Python26\lib\site-packages\twisted\internet\
win32eventreactor.py", line 234, in spawnProcess
	    return Process(self, processProtocol, executable, args, env,
path)
	  File "C:\Python26\lib\site-packages\twisted\internet\
_dumbwin32proc.py", line 182, in __init__
	    raise OSError(pwte)
	exceptions.OSError: (2, 'CreateProcess', 'The system cannot find
the file specified.')
------------------------------------------------------------------------
-------

By adding some logging and reading some source code, I found out that
the call throwing the OSError is equivalent to: 

------------------------------------------------------------------------
-------
command = 'svn'
cmdline = 'svn info --xml --non-interactive svn+ssh://x.se/y/z'
win32process.CreateProcess(command, cmdline, None, None, 1, 0, env,
None,
StartupInfo)
------------------------------------------------------------------------
-------

If I run that separately, I get the same exception (exceptions.OSError:
(2, 'CreateProcess', 'The system cannot find the file specified.')). 

I read about the CreateProcess at
http://docs.activestate.com/activepython/
2.4/pywin32/win32process__CreateProcess_meth.html:

------------------------------------------------------------------------
-------
win32process.CreateProcess
PyHANDLE, PyHANDLE, int, int = CreateProcess(appName, commandLine ,
processAttributes , threadAttributes , bInheritHandles , dwCreationFlags
, newEnvironment , currentDirectory , startupinfo )

Creates a new process and its primary thread. The new process executes
the specified executable file.


Parameters
  appName : string
    name of executable module, or None
  commandLine : string
    command line string, or None
------------------------------------------------------------------------
-------

I thought that I should try to use None as the appName, since the
command name 
is already in the commandLine. 

That made the exception go away. "Svn info" now runs.

So I added my one-line-hack at the beginning of 
Process.__init__ in twisted\internet\_dumbwin32proc.py:
        command = None if command == 'svn' else command

Now my SVNRunner started, and it works like a charm. 

I could not move my hack to the buildbot source, because executable
needs to 
be a string and I need to pass None. 

I might be the first one to stumble upon the problem because I am
running the 
buildbot master on XP, I am using SVNPoller instead of a svn hook. 

So my questions are: 
Is there a better way to make this work? (I really hope so.) 
Is this a bug that I should report? 
If it is a bug, is it a bug in buildbot or in twisted? 

Best Regards, 
  Oscar Lindberg



------------------------------------------------------------------------
------
Come build with us! The BlackBerry® Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and
stay 
ahead of the curve. Join us from November 9-12, 2009. Register
now!
http://p.sf.net/sfu/devconf
_______________________________________________
Buildbot-devel mailing list
Buildbot-devel at lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/buildbot-devel




More information about the devel mailing list