Friday, October 17, 2008

Distributed Version Control Systems on Windows...

It's never easy...

So, having used Subversion and Trac successfully for roughly three years, I now have the oppurtunity to research and choose the technology base at the startup where I'm currently at.

DVCS:es seems to be all the rage, with Git and Mercurial being the two topmost contenders (I know about bazaar and a few others, but I didn't bother looking too much.)

Now, my prerequisites was that I wanted to get this to run on a Windows server (for various reasons). Open Source on the bleeding edge and Windows is never easy, but I've learnt a few things and gotten halfway there.

I'm using:

* Apache 2.2
* ModPython
* Python 2.5
* Trac 0.11
* Windows XP (server) and Vista (client)

Git

Git has a standalone installer for windows build on MSys (Mingw) which works well, both from the command-line and using the Tcl GUI.

By using Cygwin on the server, one can use ssh to access the common repo and push/pull. (Cygwin can import domain passwords, so you don't need to bother with dual user/password lists)

Pulling from http using webdav/apache is possible. With mod_auth_sspi you can again use windows domain usernames/password. (It might be possible to use LDAP too, haven't tried yet)

Git in daemon mode with by cygwin and inetd works too. (fast download path)

Trac and Git on windows does _not_ work, yet. This is because GitPlugin uses an old version of PyGit (not the PyGit on PyPi), for detail see this ticket. I might get around to do some hacking there.

I'm working on getting gitweb.cgi to run. I just get "403 Forbidden - No project found." all the time.

Mercurial

There are clients both for command-line (py2exe standalone builds, no python required) as well as windows shell integration (although it still has some rough edges, being 0.5 at the time of writing).

Trying to use Mercurial with mod_python is tricky, since the command-line dist has everything in library.zip (including dll's), which regular python can't import. So you need to unpack it somewhere and add that dir to sys.path. Also, Mercurial expects it's Templates to be in the same dir, so you need to copy that as well (otherwise you'll get hit an assert when using hgweb.cgi). See here for details.

hgweb.cgi works! See here for some tips.

Using MercurialPlugin in Trac from mod_python does not work. There is an issue with demandimport, or expat (under unix), or something. Which simply makes apache or python crash.

Installing Mercurial into c:\Python25 using easy_install might help (to avoid importing library.zip from the stand-alione cmd-line binaries), but that requires Visual C++ 7.1, which I don't have. I haven't found anyone who has precompiled for that use yet. (Copying the files to lib/site-packages did not work.)

I did get trac to run in tracd mode by modifying tracd-script.py and adding 'sys.path.append(r'C:\Program Files\Mercurial\lib')' and running it with 'python tracd-script.py --port ...' !! I have .py files associated with python so can just run py-files as .bat/.cmd, but this did not work here! Very strange.

So, tracd is slower than mod_python (or mod_wsgi, which I haven't tried, but I expect it to have the same wierd issues as mod_python), so I guess I'm stuck with using tracd.

Tracd can be run as a service
with the help of the Windows Resource Kit, but you don't get apache authentication (LDAP/SSPI). :(

Anyway, that seems to be the best bet.

Final words

I'm thinking of using apache under cygwin instead. That might help somewhat. Or just usel ighttpd/fastcgi on cygwin and windows-apache's mod_proxy. But.. the layers.. the jumping.. the hoops... arggh..

OTOH, I might go for subversion and wait until the DVCS-on-Win32 state improves (perhaps with my help), or until I get a Unix based server to toy with...

To be continued, as they say...
Post a Comment