Sunday, July 5, 2009

Announcing pyvcs, django-vcs, and piano-man

Justin Lilly and I have just released pyvcs, a lightweight abstraction layer on top of multiple version control systems, and django-vcs, a Django application leveraging pyvcs in order to provide a web interface to version control systems. At this point pyvcs exists exclusively to serve the needs of django-vcs, although it is separate and completely usable on its own. Django-vcs has a robust feature set, including listing recent commits, pretty diff rendering of commits, and code browsing. It also supports multiple projects. Both pyvcs and django-vcs currently support Git and Mercurial, although adding support for a new backend is as simple as implementing four methods and we'd love to be able to support additional VCS like Subversion or Bazaar. Django-vcs comes with some starter templates (as well as CSS to support the pretty diff rendering).

It goes without saying that we'd like to thank the authors of the VCS themselves, in addition we'd like to thank the authors of Dulwich, for providing a pure Python implementation of the Git protocol, as well as the Pocoo guys, for pygments, the syntax highlighting library for Python, as well as the pretty diff rendering which we lifted out of the lodgeit pastbin application.

Having announced what we have already, we'll now be looking towards the future. As such Justin and I plan to be starting a new Django project "piano-man". Piano-man, a reference to Billy Joel, follows the Django tradition of naming things after musicians (although we've branched out a bit, leaving the realm of Jazz in favour of Rock 'n Roll). Piano-man will be a complete web based project management system, similar to Trac or Redmine. There are a number of logistical details that we still need to sort out, such as whether this will be a part of Pinax as a "code edition" or whether it will be a separate project entirely, like Satchmo and Reviewboard.

Some people are inevitably asking why we've chosen to start a new project, instead of working to improve one of the existing ones I alluded to. The reason is, after hearing coworkers complain about poor Git support in Trac (even with external plugins), and friends complain about the need to modify Redmine just to support branches in Git properly I'd become convinced it couldn't possibly be that hard, and I think Justin and I have proven that it isn't. All the work you see in pyvcs and django-vcs took 48 hours to complete, with both of us working evenings and a little bit during the day on these projects.

You can find both django-vcs and pyvcs on PyPi as well on Github under my account (http://github.com/alex/), both are released under the BSD license. We hope you enjoy both these projects and find them helpful, and we'd appreciate and contributions, just file bugs on Github. I'll have another blog post in a few days outlining the plan for piano-man once Justin and I work out the logistics. Enjoy.

Edit: I seem to have forgotten all the relevant links, here they are
Sorry about that.

16 comments:

  1. Instead of "At this point pyvcs exists exclusively to serve the needs of pyvcs...", don't you mean "At this point pyvcs exists exclusively to serve the needs of django-vcs..."?

    ReplyDelete
  2. Looks great - can't wait for piano man. If you guys need any help on front-end work (design or code) for piano man let me know. (@richleland)

    The gang at Washington Post started a project mgmt tool a few months back that has svn support. Might be a good place to grab some of that if you are planning to add svn:

    http://opensource.washingtontimes.com/projects/django-projectmgr/

    ReplyDelete
  3. @Rich, that's the Washington Times, not the Post, that wrote projectmgr, and if I'm not mistaken, Justin Lilly (one of the people behind this release) works there.

    ReplyDelete
  4. Yeah my mistake. I always mistype Post and Times. Thx for the correction! Justin Lilly works w/the gang at HUGE - I think you're referring to Justin Quick.

    ReplyDelete
  5. Haha, yes, indeed, now *I'm* mistaken.

    ReplyDelete
  6. Both of you mistake me for someone

    ReplyDelete
  7. This project is very interesting. I've also start my own repo manager, but I just work with Hg, so I'm able to do some things like commit/push/pull authentication throught django (the Hg user is a django user)

    For those who are interested:
    http://bitbucket.org/nautilebleu/django_hg/

    ReplyDelete
  8. I am curious about what all you are going to include in piano_man.

    I haven't used Redmine much, but I find [Pivotal Tracker](http://pivotaltracker.com/) very interesting.

    I think it would be great if you give enough insight into the specs all over again, than consider Redmine, a standard.

    ReplyDelete
  9. You might want to provide some links for your friendly readers (this is still the web right?).

    I'm assuming you don't want people ending up at the project on Google Code? :)

    ReplyDelete
  10. Interesting. I had recently started my own project management app in Django. It's not ready for public consumption, but I've enjoyed comparing notes.

    One thing I missed was something like pyvsc. That is a great idea and I'm glad to see it. However, something you might want to think about is the naming scheme you use in pyvcs. It appears you are currently using git terminology. Now obviously you have to use something, but as was recently pointed out by someone new to git (on the gitpython mailing list): "commit" is an action, yet the "commit" method refers to a previous commit object. Perhaps "changeset" (as used by Mercurial and others) would be a better term so that "commit" can be reserved for the action of creating a new commit if that feature is ever added to pyvcs.

    Now, I realize pyvcs is described as "lightweight", so creating comits may be beyond its scope, but with multiple backends supported by default, there shouldn't be any reason to be married to the terminology of any one specific backend. Rather, the terminology used should be clear to anyone familiar to any one of the supported backends.

    I look forward to seeing how things progress with all three of these projects.

    ReplyDelete
  11. I'm all for a django-based project management software. I've never liked trac, but i'm very (VERY) happy with redmine. It's featureful, well done, and almost everything about is really great. BUT i dont know ruby or RoR and can't offer to learn those.. so i cannot make any modification, or participate to the development, and this is quite irritating.

    ReplyDelete
  12. I would love to use it, but there is now howto, or installation section...?

    ReplyDelete
  13. This comment has been removed by a blog administrator.

    ReplyDelete
  14. are there any updates with piano-man ahead? Thanks!

    ReplyDelete
  15. I missed was something like pyvsc. That is a great idea and I'm glad to see it. However, something you might want to think about is the naming scheme you use in pyvcs. It appears you are currently using git terminology.

    ReplyDelete
  16. This comment has been removed by a blog administrator.

    ReplyDelete

Note: Only a member of this blog may post a comment.