Date: 2005-01-17T06:19:03 Editor: MarkLundquist Wiki: Cocoon Wiki Page: CocoonVendorBranch URL: http://wiki.apache.org/cocoon/CocoonVendorBranch
cosmetic New Page: = Abstract = A variation of the Subversion "[http://svnbook.red-bean.com/en/1.0/ch07s04.html vendor branch]" strategy for maintaining Cocoon releases under local version control. = Motivation = 1. Control of local modifications (patches, additions to lib/optional and lib/local) 1. Being able to easily see what changed from release to release 1. Import into the repository only what we need for production builds (no samples or docs) = Caveat emptor :-) = I've set this up for myself, imported the first drop (Cocoon 2.1.6), and controlled some local mods. The phase where I merge in the next drop has not been tested yet. When Cocoon 2.1.7 hits, I'll do it and fix any errors in this note. = Overview = This is a variation on the Subversion "[http://svnbook.red-bean.com/en/1.0/ch07s04.html vendor branch]" strategy. It differs from the technique outlined in the book, in that we don't have a single main branch into which we merge vendor drops; we want to preserve the "awareness" of each project on the version of Cocoon that it requires, so we have a main branch for each Cocoon release that contains our local mods. = Details = 1. {{{mkdir /usr/local/Cocoon/drop}}} 1. {{{cd /usr/local/Cocoon/drop}}} 1. download and explode the Cocoon release tarball for the current release into this directory. 1. Prune the source tree! Delete the following files and directories in {{{src/}}} (note, this is right for 2.1.6, check it for each version; also, YMMV e.g. you might need to keep something in {{{deprecated/}}}. Also, if you want to delete sources for blocks you know you will never, ever, need, you can do that here as well): * {{{documentation/}}} * {{{samples/}}} * {{{resources/javadoc/}}} * in {{{webapp/}}} everything ''except'' {{{WEB-INF/}}} and {{{sitemap.xmap}}} * {{{blocks/*/samples/}}} * {{{deprecated/}}} 1. Import the drop. * For the initial drop (e.g., 2.1.6): {{{ setenv cocoon_svn file:///var/svn/repos/cocoon # (example setenv cocoon_new_release cocoon-2.1.6 # (example) cd /usr/local/Cocoon/drop svn import -m "Initial drop (cocoon-2.1.6)" $cocoon_svn/dist/$cocoon_new_release }}} * For subsequent drops: {{{ setenv cocoon_svn file:///var/svn/repos/cocoon # (example) setenv cocoon_new_release cocoon-2.1.7 # (example) setenv cocoon_prev_release cocoon-2.1.6 # (example) cd /usr/local/Cocoon/drop svn_load_dirs.pl -t $cocoon-new-release \ $cocoon_svn/dist \ current \ ./$cocoon-new-release }}} 1. Create the new main branch and check it out: {{{ svn copy -m "Create main branch" \ $cocoon_svn/dist/$cocoon-new-release \ $cocoon_svn/main/$cocoon-new-release cd /usr/local/Cocoon/builds # (create this if it's the first time) svn checkout $cocoon_svn/main/$cocoon-new-release cd $cocoon-new-release }}} 1. Merge in changes from the previous main branch (only if this isn't the initial drop! :-) {{{ svn merge $cocoon_svn/dist/$cocoon-prev-release $cocoon_svn/main/$cocoon-prev-release }}} 1. Resolve any conflicts and commmit; 1. Build Cocoon 1. Delete /usr/local/Cocoon/drop = Reader comments = Add 'em here, or email me --[wiki:MarkLundquist ML]
