Wednesday 5: Sam Boyer, "dog: A New Era for Drupal Sitebuilding"

dog = Drupal on git

dog = Like drush make

Strategies for deployment, management, Contributing patches, managing updates, Managing overall state


Drual sites not portable: Difficult to work across multiple instances. Code from tarballs is dead code (lives in the repository, so dead in a checkout :) Patching modules for a real site sucks. 

Drush make helps with some of this. But drush generate-makefile is mediocre and dog is meant to fix this


Quick fix from tar ball - generating patch is painful. But from git: checkout, new local branch, still need patch files, but it makes sense to move to lots of git checkout modules.


So, if  your site now consists of lots of git repositories. How to make that easier? multiple sets of git pull, push, branch etc. All in one command Also, git's submodules suck, and we want  consistent configuration across different local git repos. Can we capture and replay overall status of the site? Can we even have a gui?


A dog Root repository contains:

web root





Upstream repository on d.o - we can write patches but never actually directly push. Collab repositories are local - managed by e.g. Gitosis


Main Commands

Dog-rollup = git push but with patches

Dog-rollout = git clone but for sending a package of collabs to a colleague

Then dog-rollup pushes back to collab and you run local dog-catchup


Collab becomes your local forked versions of all contrib modules. [Every client? Certainly every contrib module has a local collab repository, to be hosted somewhere your production site can see. This is a lot of cruft, isn't it? Aren't makefile [patch][] commands neater?]