darcs repository web UI and hosting app. This is the main darcsden trunk, which also runs hub.darcs.net. (https://hub.darcs.net)

#54Take inspiration from Launchpad, not GitHub

I've not done a lot of personal research the various version control systems/hosting out there, but I have the benefit of working with someone who's a bit of an enthusiast. So I've heard quite a few rants about how bazaar and launchpad do quite a few things better than git and github. And it turns out I agree with many of them, so it'd be nice to have a darcs hub doing the right thing, rather than the popular thing.

For instance, like github, hub.darcs.net nests all repositories under a user. If I fork a repository to implement something, it forever looks like I have my own copy of the project. Launchpad, as I understand it, is project based, so repositories and forks are nested under the project, rather than the user that created them.

This especially becomes a problem when projects start to become popular. Often when that happens, people wish for the project to become an entity of its own, so they actually mimic what Launchpad does by creating github users for the project itself. Then you have a fork that is actually the main branch, and the old user-based repository is deprecated and so on. Whereas on launchpad the project is always primary, and forks within its constituent repositories indicate feature development and whatnot, rather than 'all the work done by $USER'. Organizing around projects just seems like a fundamentally better policy.

This also seems particularly important for darcs, because there is no concept of a branch internal to a repository as there is in git or mercurial (for instance). A repository is a branch. To make a temporary feature branch on hub.darcs.net, I would have to fork the original repository, giving it a new name, and the same permanent status as the original, even though its purpose is to be a temporary development offshoot of the main project. This rather leads one to the same work-around of creating an account per-project and having its repositories be the branches, but this is just conventionally layering the wanted structure on top of something that wasn't designed for it (and probably doesn't achieve everything wanted).


Another infelicity with github is bug tracking. Each of the above user forks has its own bug tracker, if I'm not mistaken, which is an unfortunate way to structure things. By contrast, launchpad does not even have per-project trackers. The bug database is global, which easily allows cross-project bug tracking. If my program foo depends on a library bar, and someone reports a problem with foo that is caused by a bug in bar, it's natural for the bug to be global, rather than opening a separate bug in bar and having the foo bug refer to it or some such.

I'm unsure how much in general is transferable from either the git or bazaar models to darcs, but both the above, at least, seem independent of such details. Anyhow, consider this a wish to look at launchpad (and whoever else) for ideas, since they seem to have put a lot of thought into what is the best way to structure this type of collaboration, rather than what can most easily be layered atop the underlying version control systems, requiring users to perform a further manual effort to get good results.