<?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>James Henstridge &#187; Loom</title>
	<atom:link href="http://blogs.gnome.org/jamesh/tag/loom/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.gnome.org/jamesh</link>
	<description>Random stuff</description>
	<lastBuildDate>Tue, 27 Oct 2009 08:48:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Looms Rock</title>
		<link>http://blogs.gnome.org/jamesh/2008/04/01/bzr-loom/</link>
		<comments>http://blogs.gnome.org/jamesh/2008/04/01/bzr-loom/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 08:52:03 +0000</pubDate>
		<dc:creator>James Henstridge</dc:creator>
				<category><![CDATA[Uncategorised]]></category>
		<category><![CDATA[Bazaar]]></category>
		<category><![CDATA[Loom]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/jamesh/2008/04/01/bzr-loom/</guid>
		<description><![CDATA[While doing a bit of work on Storm, I decided to try out the loom plugin for Bazaar.  The loom plugin is designed to help maintain a stack of changes to a base branch (similar to quilt).  Some use cases where this sort of tool are useful include:

Maintaining a long-running diff to a [...]]]></description>
			<content:encoded><![CDATA[<p>While doing a bit of work on <a href="http://storm.canonical.com/">Storm</a>, I decided to try out the <a href="https://launchpad.net/bzr-loom">loom plugin for Bazaar</a>.  The loom plugin is designed to help maintain a stack of changes to a base branch (similar to <a href="http://savannah.nongnu.org/projects/quilt">quilt</a>).  Some use cases where this sort of tool are useful include:</p>
<ol>
<li>Maintaining a long-running diff to a base branch.  Distribution packaging is one such example.</li>
<li>While developing a new feature, the underlying code may require some refactoring.  A loom could be used to keep the refactoring separate from the feature work so that it can be merged ahead of the feature.</li>
<li>For complex features, code reviewers often prefer to changes to be broken down into a sequence of simpler changes.  A loom can help maintain the stack of changes in a coherent fashion.</li>
</ol>
<p>A loom branch helps to manage these different threads in a coherent manner.  Each thread in the loom contains all the changes from the threads below it, so the revision graph ends up looking something like this:</p>
<p align="center"><img src="http://blogs.gnome.org/jamesh/files/2008/03/loom-timeline.png" alt="Sample Loom Timeline" height="230" width="475" /></p>
<p>Once the plugin has been installed, a normal branch can be converted to a loom with the &#8220;<tt>bzr loomify</tt>&#8221; command.  The &#8220;<tt>bzr create-thread</tt>&#8221; command can be used to create a new thread above the current one.</p>
<p>The &#8220;<tt>bzr down-thread</tt>&#8221; and &#8220;<tt>bzr up-thread</tt>&#8221; commands can be used to switch between threads.  When going up a thread, a merge will be performed if there are new changes from the lower thread.  The &#8220;<tt>bzr show-loom</tt>&#8221; command shows the current state of the loom, and which thread is currently selected.</p>
<p>The &#8220;<tt>bzr export-loom</tt>&#8221; command can be used to explode the loom, creating a standard branch for each thread.  The included HOWTO document gives a more detailed tutorial.</p>
<p>There are a few warts in the UI that I&#8217;ve encountered though:</p>
<ol>
<li>The &#8220;<tt>bzr combine-thread</tt>&#8221; command sounds like it should actually merge two threads.  Instead it is an advisory command that can be used to remove a thread once its contents have been merged.</li>
<li>After pulling new changes in from upstream on the bottom thread, it gets a bit tedious bubbling the changes up with &#8220;<tt>bzr up-thread</tt>&#8221; and &#8220;<tt>bzr commit</tt>&#8220;.</li>
<li>As well as committing revisions to individual threads, the &#8220;<tt>bzr record</tt>&#8221; command can be used to commit the state of the loom as a whole.  I haven&#8217;t really worked out when I should be using the command.</li>
<li>No indication is given if there are changes in the loom that haven&#8217;t been recorded with &#8220;<tt>bzr record</tt>&#8220;.  I&#8217;d expect some indication from &#8220;<tt>bzr status</tt>&#8221; to this effect.</li>
<li>When using looms to break a larger feature down into smaller chunks, it&#8217;d be nice to have a command that generated a sequence of merge requests that built on top of each other.  This would be the form needed to submit them for review on a mailing list.</li>
</ol>
<p>Despite the quirks in the interface, it does make the relevant work flows easier.  It will be interesting to see how the plugin develops.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/jamesh/2008/04/01/bzr-loom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
