Git at Magnolia – now a reality !

Back in December (I had to look it up), we decided to switch Magnolia’s codebase to Git. As far as I can recall, there were mostly 2 factors that drove our decision:

  • popularity. That might seem shallow, but when thinking about ways to attract contribution and participation, it really makes sense. If a tool makes it easier to contribute, for newcomers and seasoned Magnolians alike, then we should go for that tool. Git is that tool, and GitHub’s success quite likely largely contributed to the fact that many developers are now familiar with the concept of a “pull request”.
  • branching. Veterans (gosh I sound old) in the core team have been scarred by, and scared of, branches in Subversion for quite a while now. We hardly ever branched for anything else than maintaining older releases, and that made “innovation” difficult, for a ton of reasons that I suppose are fairly obvious.

With that in mind, we started thinking about when and how to migrate. Continue reading

Customizing mod_dav_svn’s output

It’s one of those things I’m pretty sure I’ve done before and couldn’t put my hands on anymore, so I’ll just leave it here. Hopefully it serves someone else, or myself, at some point.

I was looking for a way to add a “warning” banner, such as the one which is now up at http://svn.magnolia-cms.com/svn.

mod_dav_svn, the Apache mod used to serve Subversion repositories over HTTP, can also be used as a minimal front-end for html-based browsing of repositories. Unfortunately, its output is not very customizable, if at all: all you get is a directive that lets you specify an xslt sheet (yuck) for transforming the output; and if you do decide to go down that route, the transformation happens on the client side.

So I thought about using another Apache mod to modify the content served by mod_dav_svn. At first, I was going to go for a crude User-Agent detection, but realized that, when requested via a browser, the content was sent as text/html, while when requested via a proper SVN client, it was sent as text/xml. Good, then all I needed was provided by mod_ext_filter. All that was left to do was figure out the command I’d want to run with this filter…

Continue reading