In answer to what appears to be becoming a frequently asked question in #exherbo, my development workflow (and by extension, the one true workflow, any deviation from which is clearly heresy) is as follows:
For any repository I consider interesting, I have a local copy (but not a clone, because git clone is Satan’s work) in my home directory.
For Paludis, every repository it sees has location under /var somewhere. Paludis is never pointed at a repository that is modified by anything other than itself.
For syncing, any repository I consider interesting is synced using sync = git+file:///home/users/ciaranm/repos/blah, with sync_options = --reset (as previously described). Others are synced as normal.
Before syncing normally, I pull all of the interesting repositories I have checked out in my home directory, so that Paludis ends up with everything up to date. The shell one-liner to do this is in my history, so it’s no additional work thanks to the wonder that is reverse-i-search.
On those rare occasions when I have to do some work on Exherbo that I can’t either just yell about until someone fixes it for me or force to be fixed by making Paludis reject it, I work as follows:
- Changes are made and committed in my home directory copy of the repository.
- Paludis is synced, picking up those changes.
- Testing is done.
- More changes are made and committed, since things never work as expected the first time.
- Paludis is synced, picking up those changes.
- And so on.
- When things finally work,
git rebase -iis used to turn all my messy work-in-progress commits into something suitable for pushing. Given that other people are often working on the repositories in question, this also rebases my changes against current master. - Things are pushed.
- When syncing again, the
--resetensures that Paludis ends up with the history-rewritten result, not some horrible automatic merge of the end result and previous works in progress.
Fortunately, Git is easily powerful enough to handle this kind of thing, meaning Exherbo development workflows are designed around what works best, not around what is possible.
On a related note, I am still strongly considering making --reset the default one of these days. Anyone using paludis --sync on a repository they themselves modify should quickly justify their iniquity or risk being horribly surprised when the default changes.


