Hi, On 30 June 2010 20:06, Oliver Tappe <zooey@xxxxxxxxxxxxxxx> wrote: > - in the 'Decentralized with Shared Mainline' workflow, committers may work > on branches in the central repo or in their own repository/ies. Peer-review > and -programming would require that developer-specific repositories are > accessible by others, otherwise the development isn't visible until the > developer pushes the commits into the central repository. I think this should be the main model (for now). We have a main branch (let's call it 'trunk') with more or less the same policies we currently apply to the svn trunk. So the same group of commiters, with the same 'push it when it's done' mentality. I think the tool probably should actively enforce that mentality, like how bzr allows you to have a checkout that pushes every commit when it happens. This as opposed to git and hg that first commit locally, and then you need too push with the occasional merge/rebase cycle. (Yes, it is only one extra command, but I am certain in our repository most changes will/could be pushed right away and we should encourage that.) As for the version branches, those should be dedicated branches only to be used by the release coordinator(s). With the way we worked last time, I think the tool should have the ability to cherry-pick changesets that are applied to the trunk. > - the 'Decentralized with human gatekeeper' workflow is a tough one to > implement if there aren't enough devs motivated to be gatekeepers. Judging > by the amount of peer-review we get done, I suppose this might be difficult > for us. Agreed. > - the 'Decentralized with automatic gatekeeper' workflow is probably less > problematic to implement, but the result would be less valuable than with a > human gatekeeper (i.e. most probably it'd be that haiku still builds with > the incoming changes applied). What would that gatekeeper do? Style check? > Obviously, none of these workflows are fixed, they can (and probably need > to) be adjusted to form our own workflow. > > Here are a couple of questions that hopefully can help getting an idea: > > - where should branches live, in the central repository, in local > repositories, or in both (depending on how long-lived they are meant to be)? > > - if there are branches in the central repository, should they be available > as individual repositories (such that they can be pulled individually), or > do we pull the whole thing always? Today I was thinking about when exactly it is useful to have the full history on your hard drive. I sort of came to the conclusion that the answer is probably none. (You don't need full history when you work offline and commit). I think that the tool we pick should at least support shallow checkouts, like svn's working copies, because in my view this is going to be the main usage model. > - do we try to avoid that using a DVCS moves some part of the development > into the dark (into local repositories) or do we trust that devs will find > the way to publish/share their repos that fits them best? I think we should a la git-hub have a system where developers can create (and delete) their own work in progress branches. This probably requires a sort of front-end, because I feel little for everybody ssh'ing into vmsvn.haiku-os.org and meddle around there. We could have a policy that is built on feature branches, where a number of people work on one feature (coordination via email) and personal branches, where only one developer is responsible for what happens. So next to the policy that whatever is ready goes into trunk immediately, we can also have the policy that whatever is work in progress (and could use eyes), should be shared. > - as a counter measure to decreased visibility, is it a good idea to > support shared, dev-specific repositories on the server, with e.g. > potential integration into haiku-commits? See above. > - how do we try to make it easier for external contributors > (non-committers) to get their patches reviewed and applied - is the > technical improvement of using a DVCS enough or do we need something better? I have thought about this too. Every DVCS has their specific format for packing patches. Hg has bundles, for example. With the current patch functionality on Trac we can at least mark these patches. The next step could be to write an extension/script for the tool we are going to use to automatically push and pull patches from dev.haiku-os.org. Example of bundling all changesets not in trunk and attaching it to a ticket: bzr trac push #3523 Getting the patches from a certain ticket and apply them to the local repository: git-trac pull #4439 > - is Trac a sacred cow or are we prepared to look for something else if the > DVCS of our choice doesn't work well with Trac? I think that any non-svn repository of our size has not been used with Trac, so only testing will tell. There is some knowledge about Trac in-house (that would be me), and I know that for example mercurial has a special place in the heart of Trac developers so with the right contacts we might be able to mobilize them too. As for others, every tool has its own web environment, we should see how far we could get with that. > - during the import of subversion's history into the DVCS, would it be > acceptable if some part of the history of renamed and/or copied files gets > lost? Would keeping a mirror of the subversion repo be enough to compensate? I actually think so, but I think you can get quite far. There is a major rename around 10700 (iirc) and everything before that might be weird, but for the rest I think both the hg and git imports are quite good. If bzr's isn't, we might try to tweak the tool to see what we can do. Regards, N>