<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Branching: do it like this and nobody gets hurt</title>
	<atom:link href="http://www.build-doctor.com/2008/09/10/branching-do-it-like-this-and-nobody-gets-hurt/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.build-doctor.com/2008/09/10/branching-do-it-like-this-and-nobody-gets-hurt/</link>
	<description>Helping to deliver working software, one continuous integration build at a time</description>
	<lastBuildDate>Tue, 09 Mar 2010 21:43:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: 2008 in posts &#8212; The Build Doctor</title>
		<link>http://www.build-doctor.com/2008/09/10/branching-do-it-like-this-and-nobody-gets-hurt/comment-page-1/#comment-217</link>
		<dc:creator>2008 in posts &#8212; The Build Doctor</dc:creator>
		<pubDate>Tue, 30 Dec 2008 15:31:41 +0000</pubDate>
		<guid isPermaLink="false">http://beta.build-doctor.com/?p=99#comment-217</guid>
		<description>[...] September: Branching: do it like this and nobody gets hurt [...]</description>
		<content:encoded><![CDATA[<p>[...] September: Branching: do it like this and nobody gets hurt [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Julian</title>
		<link>http://www.build-doctor.com/2008/09/10/branching-do-it-like-this-and-nobody-gets-hurt/comment-page-1/#comment-216</link>
		<dc:creator>Julian</dc:creator>
		<pubDate>Fri, 12 Sep 2008 05:49:00 +0000</pubDate>
		<guid isPermaLink="false">http://beta.build-doctor.com/?p=99#comment-216</guid>
		<description>Douglas, Jon. Thanks for your comments.  I think I want to do a longer post on this topic.&lt;br/&gt;&lt;br/&gt;Tea42: Yes, tagging/labelling is necessary to identify the exact code that&#039;s running in prod.  But IMO you need a branch so you can only release production bugfixes and enhancements and not mainline development as well.</description>
		<content:encoded><![CDATA[<p>Douglas, Jon. Thanks for your comments.  I think I want to do a longer post on this topic.</p>
<p>Tea42: Yes, tagging/labelling is necessary to identify the exact code that&#8217;s running in prod.  But IMO you need a branch so you can only release production bugfixes and enhancements and not mainline development as well.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: tea42</title>
		<link>http://www.build-doctor.com/2008/09/10/branching-do-it-like-this-and-nobody-gets-hurt/comment-page-1/#comment-215</link>
		<dc:creator>tea42</dc:creator>
		<pubDate>Fri, 12 Sep 2008 05:29:00 +0000</pubDate>
		<guid isPermaLink="false">http://beta.build-doctor.com/?p=99#comment-215</guid>
		<description>Branches? Unless its a transitional release (rc1, rc2, etc.) shouldn&#039;t you be releasing tags?</description>
		<content:encoded><![CDATA[<p>Branches? Unless its a transitional release (rc1, rc2, etc.) shouldn&#8217;t you be releasing tags?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jon</title>
		<link>http://www.build-doctor.com/2008/09/10/branching-do-it-like-this-and-nobody-gets-hurt/comment-page-1/#comment-214</link>
		<dc:creator>Jon</dc:creator>
		<pubDate>Thu, 11 Sep 2008 08:47:00 +0000</pubDate>
		<guid isPermaLink="false">http://beta.build-doctor.com/?p=99#comment-214</guid>
		<description>I totally agree! KISS rule goes a long way here.&lt;br/&gt;I wrote a little bit of ant/shell to handle automatic svn tagging based on whether a build was run against trunk or a branch.&lt;br/&gt;&lt;br/&gt;I can&#039;t post the antscript here (blogger paranoia!), but suffices to say it&#039;s pretty noddy. Just passes in the ${label} and ${checkoutdir} for the build.&lt;br/&gt;&lt;br/&gt;The bash bit:&lt;br/&gt;#!/bin/bash&lt;br/&gt;&lt;br/&gt;# Expects to be called by the tag.xml antscript. Needs to be told the working copy it&#039;s tagging from and the label to tag with.&lt;br/&gt;&lt;br/&gt;checkoutDir=$1&lt;br/&gt;label=$2&lt;br/&gt;svn_revision=`svn info ./${checkoutDir}&#124;grep &quot;Revision:&quot;&#124;awk &#039;{print $2}&#039;`&lt;br/&gt;svn_url=`svn info ./${checkoutDir}&#124;grep &quot;URL:&quot;&#124;awk &#039;{print $2}&#039;`&lt;br/&gt;echo ${svn_url} &#124;grep trunk &gt; /dev/null 2&gt;&amp;1&lt;br/&gt;if [ $? -eq 0 ]&lt;br/&gt;then&lt;br/&gt; svn_tag_url=${svn_url/trunk/tags}/trunk/&lt;br/&gt;else&lt;br/&gt; svn_tag_url=${svn_url/branches/tags}&lt;br/&gt;fi&lt;br/&gt;&lt;br/&gt;echo &quot;svn autotagging ${svn_url} at revision ${svn_revision} for build ${label}...&quot;&lt;br/&gt;svn copy -r ${svn_revision} ${svn_url}/ ${svn_tag_url}/${label}/ -m &quot;cruise: Autotagging for build ${label}(Revision: ${svn_revision}).&quot;&lt;br/&gt;echo &quot;svn autotagging complete.&quot;&lt;br/&gt;&lt;br/&gt;I&#039;m sure there&#039;s a more elegant way to do it though :)</description>
		<content:encoded><![CDATA[<p>I totally agree! KISS rule goes a long way here.<br />I wrote a little bit of ant/shell to handle automatic svn tagging based on whether a build was run against trunk or a branch.</p>
<p>I can&#39;t post the antscript here (blogger paranoia!), but suffices to say it&#39;s pretty noddy. Just passes in the ${label} and ${checkoutdir} for the build.</p>
<p>The bash bit:<br />#!/bin/bash</p>
<p># Expects to be called by the tag.xml antscript. Needs to be told the working copy it&#39;s tagging from and the label to tag with.</p>
<p>checkoutDir=$1<br />label=$2<br />svn_revision=`svn info ./${checkoutDir}|grep &quot;Revision:&quot;|awk &#39;{print $2}&#39;`<br />svn_url=`svn info ./${checkoutDir}|grep &quot;URL:&quot;|awk &#39;{print $2}&#39;`<br />echo ${svn_url} |grep trunk &gt; /dev/null 2&gt;&amp;1<br />if [ $? -eq 0 ]<br />then<br /> svn_tag_url=${svn_url/trunk/tags}/trunk/<br />else<br /> svn_tag_url=${svn_url/branches/tags}<br />fi</p>
<p>echo &quot;svn autotagging ${svn_url} at revision ${svn_revision} for build ${label}&#8230;&quot;<br />svn copy -r ${svn_revision} ${svn_url}/ ${svn_tag_url}/${label}/ -m &quot;cruise: Autotagging for build ${label}(Revision: ${svn_revision}).&quot;<br />echo &quot;svn autotagging complete.&quot;</p>
<p>I&#39;m sure there&#39;s a more elegant way to do it though <img src='http://www.build-doctor.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Douglas Squirrel</title>
		<link>http://www.build-doctor.com/2008/09/10/branching-do-it-like-this-and-nobody-gets-hurt/comment-page-1/#comment-213</link>
		<dc:creator>Douglas Squirrel</dc:creator>
		<pubDate>Wed, 10 Sep 2008 23:50:00 +0000</pubDate>
		<guid isPermaLink="false">http://beta.build-doctor.com/?p=99#comment-213</guid>
		<description>We&#039;re at most one release ahead of production, so we just have HEAD and the immediately prior release to run tests on; one of our projects releases frequently enough that we don&#039;t even have to branch it at all normally. The three projects share a server farm, with several CruiseControl instances running different types of tests for each in rotation, so we&#039;ve just inserted the branches as new projects in the rotation. &lt;br/&gt;&lt;br/&gt;Since changes to the branches are rare, other projects don&#039;t often have to wait for the branches. Since changes are well-vetted, we don&#039;t run branched code through all the steps in the build pipeline, just the ones that are most critical (we skip browser-compatibility tests for example, since we rarely make substantial HTML changes in branches).</description>
		<content:encoded><![CDATA[<p>We&#8217;re at most one release ahead of production, so we just have HEAD and the immediately prior release to run tests on; one of our projects releases frequently enough that we don&#8217;t even have to branch it at all normally. The three projects share a server farm, with several CruiseControl instances running different types of tests for each in rotation, so we&#8217;ve just inserted the branches as new projects in the rotation. </p>
<p>Since changes to the branches are rare, other projects don&#8217;t often have to wait for the branches. Since changes are well-vetted, we don&#8217;t run branched code through all the steps in the build pipeline, just the ones that are most critical (we skip browser-compatibility tests for example, since we rarely make substantial HTML changes in branches).</p>
]]></content:encoded>
	</item>
</channel>
</rss>
