Version 5 (modified by allison, 4 years ago)

--

(Keeping two revision control systems around is a bad idea. It doubles the maintenance burden, doubles the points of potential failure, and saddles us with maintaining the old system even if we transition to yet a fourth revision control system down the road. If we made the transition, we would have to make it completely, which means figuring out ahead of time how to handle referring to specific revisions, both old and new. --ANR)

So Subversion is old and busted and git is the new hawtness. This is established and completely beyond question. Don't question it. Also, I've wasted way too much time wrestling with svn's stupid quirks and failures, so I want Parrot to switch to using Git as its primary vcs. The only problem is that Parrot has a lot of links and references to subversion revision numbers, both on this Trac site, in the source, in old messages, lots of places. We don't want these to break and make people sad. That means that even after we switch to Git, we'll need to keep the Subversion repository accessible using current links.

Oh noes! Trac isn't meant to have multiple version control backends, you might say. There's a solution:

  •  This tiny patch allows a Trac project to have a sub-project.
  • The sub-project can be configured to use the same db as the parent project, propagating permissions and user info.
  • Trac  allows navigation items to be customized.
    • A plugin allows them to be  added.
  • A more or less usable  Git plugin exists for Trac.

Using these tools, here's the plan (as it exists):

  • Keep Subversion as the version control backend on the current Trac project (the parent).
  • Add a subproject (the child) which uses Git as the vc backend.
  • Make the following changes to the the navigation items ("Wiki", "Timeline", etc at the top of each page):
    • Change "Browse Source" to "Browse svn" and add a "Browse git" item to the parent.
    • Make "Browse git" point at the child project's source code browser.
    • Add "Browse svn" to the child project, point it at the parent project's code browser.
    • Make all navigation items in the child project point at the parent.

This will allow Git and Subversion to integrate gracefully with Trac and will preserve links to Subversion revision numbers. There are still some holes to fill in but that's more or less the plan. I (cotto) will make sure all the pieces exist and can be made to fit together before seriously proposing anything.

remaining issues:

  • nice urls
    • make code browser urls look better ( parrot/svn-browser/... instead of parrot/p/parrot-git/browser)
    • make git changeset urls look good (parrot/git-changeset/102fe62b8 instead of parrot/p/parrot-git/changeset/...)
    • the IRequestHandler and IRequestFilter interfaces may be helpful here ( link)
    • have the child project generate nice-looking links
    • A small custom plugin may be required if none exists.
  • It might be a good idea to add a notification to the svn code browser that informs users that active development no longer happens there.
  • read-only access to the svn repo (marginally useful, mitigated by keeping a mirror on github, which allows svn access to git repositories)
  • git trac plugin is inefficient (this is mitigated somewhat by the possibility of using github as a supplementary tool)