RCS abstraction for the Project module

Name: Jakob Petsovits
Email: jpetso [at] gmx [dot] at
IRC (Freenode): jpetso
Jabber: jpetso [at] kdetalk [dot] net
drupal.org user: jpetso

This is version 1.0 of my application for a Drupal project in the Google Summer of Code 2007.

Synopsis

The Project module, together with its companion project_release.module, makes extensive use of the CVS module in order to accomplish revision control system (RCS) integration. In order to get drupal.org's new release system done in time, the Project module has been made even more dependent on CVS specifics, making it hard to impossible to use Project's functionality together with other revision control systems.

During the Summer of Code, I want to decouple the Project module from the CVS module and move CVS specifics into an RCS independent API. At the end, cvs.module should only be one of several possible backends for the RCS API, so that supporting other revision control systems like Subversion, Mercurial or Git can be achieved with reasonable effort. As an additional advantage, other projects like Case Tracker can also make use of the RCS API in order to integrate revision control functionality while sharing as much code as possible.

What is specifically not planned for this project (though possible in case that the existing deliverables take less time than expected) is Subversion support itself. I decided to leave this task out because all the knowledgeable developers that I contacted estimate more time needed for the groundwork than what it would originally look like. So I'll concentrate on just getting the Project module to be RCS independent - which, according to dww, is the majority of the work - and leave actual Subversion support to a future project.

Motivation

Getting rid of the hard dependency on CVS will benefit a lot of people who want to use the Project module together with their internally used revision control systems. drupal.org itself makes heavy use of the Project module, and if drupal.org ever wants to switch to a more modern revision control system (like Subversion which is frequently in the talks) then RCS abstraction is a basic requirement for such a switch. However, as mentioned above, writing the actual Subversion support itself is not in scope of this project.

My personal motivation for doing this project is manifold:

  • I really like Drupal, and want to make it useful for a lot of people.
  • I don't like CVS all too much, and want to help with moving to other revision control systems.
  • My current employer, Pro.Karriere, is using Subversion as internal RCS, and it would be great if we could eventually use the Project module together with our Drupal-based project web.
  • I like to work on interesting stuff, and this project can definitely be considered very interesting.

Deliverables & Schedule

The following tasks will have to be completed so that the project can be considered successful:

  1. Analyze the differences between CVS (the currently used RCS), Subversion (the most demanded alternative RCS) and Git (a new-style RCS with different paradigms). Document the findings, especially with respect to:
    • Information contained in a commit
    • Handling of tags/branches, file layout
    • Hooks, with respect to integration possibilities for xcvs-* (the currently used hook scripts)
    • How this functionality is used by cvs.module

    Targeted for: 2007/06/11

  2. Determine the functionality that the Project module needs from a RCS, and which parts of the currently used functionality can not typically be implemented in a similar way with other revision control systems. Come up with a first draft of how the RCS API should look like, and how backend modules can hook into project_rcs_api in order to provide their functionality.
    Targeted for: 2007/07/09
  3. Refactor the database table layout of the current cvs.module so that there is a table scheme for the project_rcs_api module containing RCS independent information, and redesign the table layout of cvs.module so that it complements the RCS independent tables. In order to make sure the project_rcs_api table layout is really RCS independent, create a similar complementary layout that an SVN backend would use. (For the latter, take into account how existing Subversion module tables look like.) Improve the RCS API based on knowing the exact table structure.
    Targeted for: 2007/07/16
  4. Modify the xcvs-* scripts so that they store data in the newly defined database scheme.
    Targeted for: 2007/07/19
  5. Finalize the RCS API. While doing so, make sure that there are also ways for backend modules to provide RCS specific data that project_rcs_api doesn't know of, without losing RCS independence in the API.
    Targeted for: 2007/07/23
  6. Move code from cvs.module into project_rcs_api.module as appropriate, and make cvs.module hook into the RCS API as a backend.
    Targeted for: 2007/08/10
  7. Modify the Project module so that it uses the RCS API instead of cvs.module.
    Targeted for: 2007/08/15
  8. Testing, more testing, and debugging. Make sure everything works as expected.
    Targeted for: 2007/08/20

Personal schedule

My summer semester ends at the end of June, which means that I can't invest too much time in June due to university work and exams. Also, I'll be attending the annunal KDE conference, aKademy, where I will stay from June 29th to July 8th. After that, I can work full-time on this project until the end of the Summer of Code.

The target dates given in the above list of deliverables already take personal availability into account, even if that means that the majority of the work will have to be done after the student mid-term evaluation date which is set to July 9th.

Previous work on this issue

As this project satisfies a demand that is often asked for, there have been previous takes on the issue. Most notably, there are two modules which are especially to be considered potentially helpful in gathering requirements and ideas for this project:

  • The Subversion module created by Gavin Mogan (drupal.org user halkeye), currently only available for Drupal 4.7. Says the module page: "A module that lets you track Subversion commit messages among other things".
  • A not yet publicly released fork of cvs.module by Adam Light (drupal.org user aclight), aiming to replace CVS with SVN facilities while keeping cvs.module's API and table layout.

Both modules are likely to especially help in defining the RCS independent API and its database table layout.

Why you should choose me for doing this project

  • I've been doing Drupal development before. Since the late days of 4.6, I've been using Drupal on a couple of websites, and I've been involved with developing/porting and translating Drupal modules quite a bit already (translations for Subscriptions, CCK and Sitemenu, 4.7 to 5.0 ports of Usernode, Node Family, Node Profile and Pageroute). So it's fair to say that I'm familiar with concepts and code, you don't get a newbie in Drupal development.
  • I'm know my way through open source development processes. I'm using IRC, mailing lists and issue queues for communicating with other developers, and take quite a bit of time to follow current developments. Which provides the opportunity to work in collaboration with other developers, and coordinate stuff that would otherwise result in a duplication of work or derivate from what it should be.
  • I'm not in it for the money. While paychecks from Google are definitely nice to have, my primary motivation is to push Drupal forward and work on important stuff. Which means that I actually care about delivering quality work, and not only getting through with just as much effort as minimally required.
  • I already finished a Summer of Code project successfully, and I can do it again! My project from last year was C# support for KDevelop which was received very well in the KDevelop community.

Short Bio (with respect to experience in open source)

I was born on the 8th of July 1983 as an Austrian citizen. After school and mandatory military service I started studying computer science at the Vienna University of Technology in 2002. I gained a bachelor (or rather, its Austrian equivalent called Bakkalaureus) in "Software & Information Engineering" last year, and I'm now going for a master in "Software Engineering & Internet Computing".

My interest in open source started to manifest in 2003 when I switched from Windows to Gentoo Linux. Since then I eagerly follow open source news and developments and contribute to various projects from time to time. Since then, I have been contributing to various projects, like KDevelop (parsers for Java and C#), the Lila icon theme (as maintainer of the KDE version), K3b (documentation, and a patch for more flexible audio CD ripping) and recently also Drupal (as already mentioned above).

I've been using Drupal since one and a half years on a couple of web sites, like my father's doctor's office, the community site of my region's AFS group, and finally my own blog site. Recently I have been employed by Pro.Karriere as a Drupal developer, and they provided me with the opportunity to take a time-out from company work so that I can focus on my Summer of Code project.