Recommended DVCS mechanism for hosting many independent patches
I have a project just getting started at http://sourceforge.net/projects/iotabuildit/ (more details at http://sourceforge.net/p/iotabuildit/wiki/Home/) that is currently using Mercurial for revision control. And it seems like Mercurial and SourceForge almost have all the right features or elements to put together the collaboration mechanism I have in mind for this project, but I think I’m not quite there yet. I want people to be able to submit, discuss and vote on individual changes from a large number of individuals (more developers than a project would normally have). And I want it to be as easy as possible for users to participate in this. The thought right now is that people can clone the “free4all” fork, which is a clone of the base “code” repository, or they can create their own fork in their own SourceForge user project (SourceForge now provides a workspace for every user to host miscellaneous project-related content). Then they can clone that to their local repository (after downloading TortoiseHg or their preferred Mercurial client). Then they can make modifications, commit them, push them to the fork, and request a merge into the base “code” repository, at which point we can discuss/review the merge request. This all is still far too many steps, and more formal than I’d like.
I see there is such a thing as “shelving” in Mercurial, but I don’t see how/if that is supported in the SourceForge repository. And there probably isn’t a way to discuss shelved changes as there is merge requests.
I’m looking for any suggestions that would make this easier. Ideally, I would like users to be able to:
- Allow the user to download the requested version of the project for local editing (a C# version built from the same source is also playable locally, or Internet Explorer apparently ignores the security restriction, allowing local play in a browser)
- Accept submitted modifications in a form that can be merged with any other compatible “branch” or version of the game that has been submitted/posted (ideally this would be very simple — perhaps used just uploads the whole set of files back to the server and the compare and patch/diff extraction is performed there)
- Other players can see a list of available submitted patches and choose any set to play/test with, then discuss and vote on changes.
Clearly some of these requirements are very specific, and I will probably need to write some server side code if I want to reach the ideal goal. But I want to take the path of least resistance and use the technologies available if much of the functionality I need is already almost there. Or I’d like to see if I can get any closer than the process I outlined earlier without writing any server code. So what pieces will help me do this? Does Mercurial & SourceForge support storing and sharing shelved code in the way I would want? Is there something to this “Patch Queue” (that I see, but can’t understand or get to work yet) that might help? Is there a way to extract a patch file from a given set of files compared to a specific revision in a repository (on the server side), without having the user download any Mercurial components?
One Solution collect form web for “Recommended DVCS mechanism for hosting many independent patches”
It sounds like something you could do with mercurial queue (mq) patch queues. The patch queue can be is own, separate versioned repository, and people can use ‘guards’ to apply only the patches they want to try.
But really it sounds even easier to use bitbucket or github, both of which have excellent patch-submission, review, and acceptance workflows built into them.