<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Software Configuration Management and Agile Software Development &#187; GNU Bash</title>
	<atom:link href="http://accurev.com/blog/tag/gnu-bash/feed/" rel="self" type="application/rss+xml" />
	<link>http://accurev.com/blog</link>
	<description>SCM and Agile Software Development Blog</description>
	<lastBuildDate>Fri, 03 Feb 2012 19:28:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Team of One Pattern</title>
		<link>http://accurev.com/blog/2008/02/22/team-of-one/</link>
		<comments>http://accurev.com/blog/2008/02/22/team-of-one/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 23:00:42 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Patterns]]></category>
		<category><![CDATA[version control]]></category>
		<category><![CDATA[AccuRev for personal projects]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[development process]]></category>
		<category><![CDATA[GNU Bash]]></category>
		<category><![CDATA[large teams]]></category>
		<category><![CDATA[multiple releases]]></category>
		<category><![CDATA[multiple releases in parallel]]></category>
		<category><![CDATA[parallel releases]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[single developer]]></category>
		<category><![CDATA[small teams]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[source code control]]></category>
		<category><![CDATA[team for one]]></category>
		<category><![CDATA[vim plugin]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/?p=125</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/02/22/team-of-one/' addthis:title='Team of One Pattern ' ><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">&#124;</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div>We all know that AccuRev is well suited for large enterprises with teams of developers spread across the globe. But what about the crack team of one developer? You know, those of use who go solo because we know we can do it faster, better, and leaner than any contrived dream team. Can AccuRev really [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/02/22/team-of-one/' addthis:title='Team of One Pattern '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/02/22/team-of-one/' addthis:title='Team of One Pattern ' ><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">|</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div><p>We all know that AccuRev is well suited for large enterprises with teams of developers spread across the globe. But what about the crack team of <em>one</em> developer? You know, those of use who go solo because we know we can do it faster, better, and leaner than any contrived dream team.</p>
<p>Can AccuRev <em>really </em>work for small teams including a team of one? &#8230; You bet your ASCII it does!</p>
<p>In fact, I use AccuRev for my own personal projects. They happen to be AccuRev integrations, but are software projects nonetheless [Vim Plugin, GNU Bash, etc]. At this point, critics may proclaim, &#8220;For one developer, you just need to commit to trunk and label for each release.&#8221; Well&#8230; that worked OK for the first and second release, but then came the need to maintain multiple versions in parallel with patch releases (due to wholescale refactoring per major release) as well as compatibility between corresponding versions of AccuRev (since these are plugins). The compatibility matrix completely obliterates any suggestion of linear branching/labeling&#8230; so fuh-get-abot-it. Time to graduate from the traditional branch-based tools.</p>
<div id="attachment_517" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.accurev.com/blog/wp-content/uploads/2008/02/teamofone.jpg" target="_blank"><img class="size-medium wp-image-517" title="Stream Structure for Team of One Development in AccuRev SCM" src="http://www.accurev.com/blog/wp-content/uploads/2008/02/teamofone.jpg?w=300" alt="Stream Structure for Team of One Development in AccuRev SCM" width="300" height="168" /></a><p class="wp-caption-text">click to enlarge</p></div>
<p>The above picture shows my stream structure containing projects including vim-plugin and bash-completion. I&#8217;ll use the bash-completion project as a reference example to discuss my pattern of development. Even as a single developer, I found it critical to maintain a strict develop -&gt; test -&gt; release pattern simply because my development activities change day-to-day and typically turn into &#8220;It&#8217;s been a month since I looked at this code&#8230; time to roll up the sleeves and figure out what the heck I was thinking!&#8221; If I was forced to a single commit bucket (branch), I&#8217;d go nuts &#8212; trying to manage multiple patches, new development, updates to documentation, etc and <strong>then</strong> being <em>forced </em>to deliver it <strong>all </strong>because pulling out changes is about as fun as filling sandbags with a pitch fork&#8230; I&#8217;d rack my brains trying to keep it all straight especially since I have multiple projects going on concurrently!</p>
<p>My development process is as follows (annotated as steps 1-6 on the picture):</p>
<ol>
<li><strong>Develop </strong>&#8211; After working in my private workspace on a unit of work for days, weeks, months, I promote to the &#8220;-test &#8220;stream. Then, continue working in the private workspace on the next set of work.</li>
<li><strong>Test </strong>&#8211; After unit testing and performing a clean-room functional test of all changes in my &#8220;-test&#8221; stream, I deem all changes &#8220;release ready&#8221; and promote to the top bash-completion stream.</li>
<li><strong>Release Candidate</strong> &#8212; The changes in the base stream represent a configuration that is good-enough to start a new codeline. <strong>I do NOT snapshot an official release X.Y </strong>(just yet). I first create a &#8220;dash-x&#8221; line to start the codeline (e.g. bash-completion-3.x for the 3.0, 3.1, 3.2, etc versions).</li>
<li><strong>Maintenance</strong> &#8212; In anticipation for even minor patch work, I proactively create a &#8220;-maint&#8221; stream to collect any upcoming maintenance changes based on the starting codeline. Initially, this stream will just be empty and identical in configuration to the parent &#8216;dash-x&#8217; stream.</li>
<li><strong>Official Release</strong> &#8212; At this point, I&#8217;ve immediately created the&#8221;dash-x&#8221; and &#8220;-maint&#8221; streams in succession so they are all identical in contents &#8211; namely, all containing the next release. So NOW I create my first official &#8220;dot oh&#8221; release (e.g. bash-completion-3.0).</li>
<li><strong>Publish </strong>&#8211; With the official configuration under snapshot, I &#8216;pop&#8217; the code, archive, and ship to my web server. <em>La commedia e finite!</em></li>
</ol>
<p>With the visual nature of the StreamBrowser and the ease of creating streams, <a href="http://www.accurev.com/whitepaper/accurev_advantage.htm" target="_blank">managing multiple versions</a> of multiple products with AccuRev is priceless. I use a simple, repeatable development pattern that lets me separate ongoing development work (workspaces) from upcoming changes being tested (-test stream) all separate from previous releases (dash-x) and patch development (-maint). And the best part about all of this is I can (and have, MANY times) come back to any project even months later and quickly ascertain the current state of the union &#8212; what&#8217;s in development, what&#8217;s in test, which releases are published, etc. Sweet.</p>
<p>Lastly, while I use this &#8216;dot oh&#8217; pattern for my own projects, I even recommend it for large team development. It&#8217;s a great pattern and I hope you find it useful for your own stream management.</p>
<p>/happy releasing/ &#8211; dave</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/02/22/team-of-one/' addthis:title='Team of One Pattern '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://accurev.com/blog/2008/02/22/team-of-one/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>GNU Bash plugin for AccuRev 4.6</title>
		<link>http://accurev.com/blog/2008/02/08/gnu-bash-plugin-for-accurev-46/</link>
		<comments>http://accurev.com/blog/2008/02/08/gnu-bash-plugin-for-accurev-46/#comments</comments>
		<pubDate>Fri, 08 Feb 2008 22:00:13 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[change management]]></category>
		<category><![CDATA[configuration management]]></category>
		<category><![CDATA[GNU Bash]]></category>
		<category><![CDATA[GNU bash plugin]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[source control]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/?p=122</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/02/08/gnu-bash-plugin-for-accurev-46/' addthis:title='GNU Bash plugin for AccuRev 4.6 ' ><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">&#124;</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div>I&#8217;m happy to announce the latest release of the GNU Bash programmable completion for AccuRev 4.6! For those AccuRev users out there that know the true power of the GNU Bash shell, life just got even better. This GNU Bash plugin has its own site at http://bash4accurev.wordpress.com for downloads, announcements, documentation and user feedback (ala [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/02/08/gnu-bash-plugin-for-accurev-46/' addthis:title='GNU Bash plugin for AccuRev 4.6 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/02/08/gnu-bash-plugin-for-accurev-46/' addthis:title='GNU Bash plugin for AccuRev 4.6 ' ><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">|</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div><p>I&#8217;m happy to announce the latest release of the GNU Bash programmable completion for AccuRev 4.6!</p>
<p>For those <a href="http://www.accurev.com/customers.html" target="_blank">AccuRev users </a>out there that know the true power of the <a title="GNU Bash Website" href="http://www.gnu.org/software/bash/">GNU Bash</a> shell, life just got even better.</p>
<p>This GNU Bash plugin has its own site at <a title="Bash for AccuRev" href="http://bash4accurev.wordpress.com/">http://bash4accurev.wordpress.com</a> for downloads, announcements, documentation and user feedback (ala blog style). You can download the plugin from the <a title="Download GNU Bash for AccuRev" href="http://bash4accurev.wordpress.com/download">download page</a>.</p>
<p>The plugin requires <strong>GNU Bash 2.05+</strong> and supports <strong>AccuRev 4.6.x.</strong> It was developed and tested using linux (Ubuntu 7.10) and GNU Bash 3.2.25.</p>
<p><em><span style="color: #ff0000;"><strong>Important note</strong>:</span> While the plugin was developed by an AccuRev employee (me) and GNU Bash user for 10+ years, it is considered a third-party open-source plugin and is not officially supported by the folks @ AccuRev support. That being said, I&#8217;m proud of the plugin and welcome feedback and enhancement requests for the next release. You&#8217;ll find my contact information on the plugin website.</em></p>
<p>/happy tabbing/ &#8211; dave</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/02/08/gnu-bash-plugin-for-accurev-46/' addthis:title='GNU Bash plugin for AccuRev 4.6 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://accurev.com/blog/2008/02/08/gnu-bash-plugin-for-accurev-46/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile Programmable Completion &#8211; AccuRev + GNU Bash</title>
		<link>http://accurev.com/blog/2007/10/18/agile-programmable-completion-accurev-gnu-bash/</link>
		<comments>http://accurev.com/blog/2007/10/18/agile-programmable-completion-accurev-gnu-bash/#comments</comments>
		<pubDate>Thu, 18 Oct 2007 19:59:02 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile SCM]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[GNU Bash]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[programmable completion]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[SCM systems]]></category>
		<category><![CDATA[shell facility]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[Stream-based]]></category>
		<category><![CDATA[TAB Completion]]></category>
		<category><![CDATA[Windows users]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/2007/10/18/agile-programmable-completion-accurev-gnu-bash/</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/10/18/agile-programmable-completion-accurev-gnu-bash/' addthis:title='Agile Programmable Completion &#8211; AccuRev + GNU Bash ' ><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">&#124;</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div>When at the command line (CLI), productivity means keeping your hands on the keyboard. But once your fingers have memorized all the commands, flags, static arguments, and common usage patterns &#8212; can you still get faster? Yes. Programmable completion is a shell facility that allows for customizing the command line in real-time as it is [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/10/18/agile-programmable-completion-accurev-gnu-bash/' addthis:title='Agile Programmable Completion &#8211; AccuRev + GNU Bash '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/10/18/agile-programmable-completion-accurev-gnu-bash/' addthis:title='Agile Programmable Completion &#8211; AccuRev + GNU Bash ' ><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">|</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div><p>When at the <a href="http://en.wikipedia.org/wiki/Command_line_interface" target="_blank">command line</a> (CLI), productivity means keeping your hands on the keyboard. But once your fingers have memorized all the commands, flags, static arguments, and common usage patterns &#8212; can you still get faster?</p>
<p><span style="font-weight:bold">Yes</span>.</p>
<p>Programmable completion is a shell facility that allows for customizing the command line in real-time as it is typed. Also referred to as &#8220;TAB Completion&#8221;, many shells in both Linux and Windows have a default implementation that support completion on filenames and directories. If you&#8217;re lucky, you&#8217;ll even get environment variables and functions.</p>
<p>Let&#8217;s move to software configuration management (SCM). Various branch and label-based SCM systems like CVS have basic tab completion for commands and flags. Thats a good start. But an <span style="font-style:italic">agile </span>user needs a context-sensitive, custom-data completion facility. What you ~really~ want is completion on your own data &#8212; branch names, labels, usernames, etc.</p>
<p>Users of stream-based AccuRev are in luck.</p>
<p>Do you use AccuRev on Linux? If so, <a href="http://www.fepus.net/software/accurev-tools/accurev-bash-completion-3.0.tar.gz">download </a>the latest GNU Bash (2.05+) completion for AccuRev 4.5.x. Here is the <a href="http://www.fepus.net/software/accurev-tools/accurev-bash-completion-3_0/README" target="_blank">README</a>. You&#8217;ll never have to memorize flags or type stream names again.</p>
<p>Coming in Part 2 &#8212; Support for Windows users.</p>
<p>/happy tabbing/ &#8211; dave</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2007/10/18/agile-programmable-completion-accurev-gnu-bash/' addthis:title='Agile Programmable Completion &#8211; AccuRev + GNU Bash '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://accurev.com/blog/2007/10/18/agile-programmable-completion-accurev-gnu-bash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

