<?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>Labix Blog &#187; RCS</title>
	<atom:link href="http://blog.labix.org/tag/rcs/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.labix.org</link>
	<description>by Gustavo Niemeyer</description>
	<lastBuildDate>Mon, 16 Jan 2012 04:02:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Bazaar, the git way</title>
		<link>http://blog.labix.org/2012/01/16/bazaar-the-git-way</link>
		<comments>http://blog.labix.org/2012/01/16/bazaar-the-git-way#comments</comments>
		<pubDate>Mon, 16 Jan 2012 04:02:51 +0000</pubDate>
		<dc:creator>Gustavo Niemeyer</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[RCS]]></category>

		<guid isPermaLink="false">http://blog.labix.org/?p=935</guid>
		<description><![CDATA[Back at the Ubuntu Platform Rally last week, I&#8217;ve pestered some of the Bazaar team with questions about co-location of branches in the same directory with Bazaar. The great news is that this seems to be really coming for the &#8230; <a href="http://blog.labix.org/2012/01/16/bazaar-the-git-way">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Back at the Ubuntu Platform Rally last week, I&#8217;ve pestered some of the Bazaar team with questions about co-location of branches in the same directory with Bazaar. The great news is that this seems to be really coming for the next release, with first-class integration of the feature in the command set. Unfortunately, though, it&#8217;s not quite yet ready for prime time, or even for <i>I&#8217;m-crazy-and-want-this-feature</i> time.</p>
<p>Some background on why this feature turns out to be quite important right now may be interesting, since life with Bazaar in the past years hasn&#8217;t really brought that up as a blocker. <span id="more-935"></span>The cause for the new interest lies in some recent changes in the toolset of the Go language. The new <i>go</i> tool not only makes building and interacting with Go packages a breeze, but it also solves a class of problems previously existent. For the <i>go</i> tool to work, though, it requires the use of $GOPATH consistently, and this means that the package has to live in a <i>well defined directory</i>. The traditional way that Bazaar manages branches into their own directories becomes a deal breaker then.</p>
<p>So, last week I had the chance to exchange some ideas with Jelmer Vernooij and Vincent Ladeuil (both Bazaar hackers) on these problems, and they introduced me to the approach of using lightweight checkouts to workaround some of the limitations. Lightweight checkouts in Bazaar makes the working tree resemble a little bit the old-style VCS tools, with the working tree being bound to another location that actually has the core content. The idea is great, and given how well lightweight checkouts work with Bazaar, building a full fledged solution shouldn&#8217;t be a lot of work really.</p>
<p>After that conversation, I&#8217;ve put a trivial hack together that would make bzr look like git from the outside, by wrapping the command line, and did a lightning talk demo. This got a few more people interested on the concept, which was enough motivation for me to move the idea forward onto a working implementation. Now I just needed the time to do it, but it wasn&#8217;t too hard to find it either.</p>
<p>I happen to be part of the unlucky group that too often takes more than 24 hours to get back home from these events. This is not entirely bad, though.. I also happen to be part of the lucky group that can code while flying and riding buses as means to relieve the boredom (reading helps too). This time around, <a href="http://labix.org/cobzr">cobzr</a> became the implementation of choice, and given ~10 hours of coding, we have a very neat and over-engineered wrapper for the bzr command.</p>
<p>The core of the implementation is the same as the original hack: wrap bzr and call it from outside to restructure the tree. That said, rather than being entirely lazy and hackish line parsing, it actually parses bzr&#8217;s &#8211;help output for commands to build a base of supported options, and parses the command line exactly like Bazaar itself would, validating options as it goes and distinguishing between flags with arguments from positional parameters. That enables the proxying to do much more interesting work on the intercepted arguments.</p>
<p>Here is a quick session that shows a branch being created with the tool. It should look fairly familiar for someone used to git:</p>
<p><code><br />
[~]% bzr branch lp:juju<br />
Branched 443 revisions.                                                                                                                       </p>
<p>[~]% cd juju<br />
[~/juju]% bzr branch<br />
* master</p>
<p>[~/juju]% bzr checkout -b new-feature<br />
Shared repository with trees (format: 2a)<br />
Location:<br />
  shared repository: .bzr/cobzr<br />
Branched 443 revisions.<br />
Branched 443 revisions.<br />
Tree is up to date at revision 443.<br />
Switched to branch: /home/niemeyer/juju/.bzr/cobzr/new-feature/</p>
<p>[~/juju]% bzr branch other-feature<br />
Branched 443 revisions.                                                                                                                       </p>
<p>[~/juju]% bzr branch<br />
&nbsp;&nbsp;master<br />
* new-feature<br />
&nbsp;&nbsp;other-feature<br />
</code></p>
<p>Note that cobzr will not reorganize the tree layout before the multiple branch support is required.</p>
<p>Even though the wrapping is taking place and bzr&#8217;s &#8211;help output is parsed, there&#8217;s pretty much no noticeable overhead given the use of Go for the implementation and also that the processed output of &#8211;help is cached (I <i>said</i> it was overengineered).</p>
<p>As an example, the first is the real bzr, while the second is a link to cobzr:</p>
<p><code><br />
[~/juju]% time /usr/bin/bzr status<br />
/usr/bin/bzr status  0.24s user 0.03s system 88% cpu 0.304 total</p>
<p>[~/juju]% time bzr status<br />
bzr status  0.19s user 0.08s system 88% cpu 0.307 total<br />
</code></p>
<p>This should be more than enough for surviving comfortably until bzr itself comes along with first class support for co-located branches in the next release.</p>
<p>In case you&#8217;re interested in using it or are just curious about the command set or other details, please check out the web page for the project:</p>
<ul>
<li><a href="http://labix.org/cobzr">http://labix.org/cobzr</a>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.labix.org/2012/01/16/bazaar-the-git-way/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Launchpad + Rietveld == HappyCodeReviews</title>
		<link>http://blog.labix.org/2011/11/17/launchpad-rietveld-happycodereviews</link>
		<comments>http://blog.labix.org/2011/11/17/launchpad-rietveld-happycodereviews#comments</comments>
		<pubDate>Fri, 18 Nov 2011 02:28:42 +0000</pubDate>
		<dc:creator>Gustavo Niemeyer</dc:creator>
				<category><![CDATA[Go]]></category>
		<category><![CDATA[Patch]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[RCS]]></category>

		<guid isPermaLink="false">http://blog.labix.org/?p=849</guid>
		<description><![CDATA[In the past week, I&#8217;ve finally stopped to fix something that I&#8217;ve been wishing for years: inline code reviews in Launchpad. Well, I haven&#8217;t exactly managed fix it in Launchpad, but the integration with Rietveld feels nice enough to be &#8230; <a href="http://blog.labix.org/2011/11/17/launchpad-rietveld-happycodereviews">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In the past week, I&#8217;ve finally stopped to fix something that I&#8217;ve been wishing for years: inline code reviews in Launchpad. Well, I haven&#8217;t exactly managed fix it <i>in</i> Launchpad, but the integration with Rietveld feels nice enough to be relatively painless.</p>
<p>The integration is done using the <a href="https://launchpad.net/lbox">lbox</a> tool, that was developed in <a href="http://golang.org">Go</a> using the <a href="http://goneat.org/lp/lpad">lpad package</a> for the communication with Launchpad, and a newly written <a href="http://goneat.org/lp/goetveld/rietveld">rietveld package</a> for communication with Rietveld.</p>
<p>If you want to join me in my happines, here are the few steps to get that working for you as well.</p>
<p><span id="more-849"></span>First, install lbox from the Launchpad PPA. Since it&#8217;s written in Go, it has no dependencies.</p>
<pre>
$ sudo add-apt-repository ppa:gophers/go
$ sudo apt-get update
$ sudo apt-get install lbox
</pre>
<p>Now, as an example of using it, let&#8217;s suppose we want to perform a change in the lbox code itself. First, we take the branch out of Launchpad.</p>
<pre>
$ mkdir hacking
$ cd hacking
$ bzr branch lp:lbox
Branched 9 revision(s).
</pre>
<p>Then, let&#8217;s create a feature branch based on the original trunk, and perform a change.</p>
<pre>
$ bzr branch lbox my-nice-feature
Branched 9 revision(s).

$ cd my-nice-feature
$ echo # Yo >> Makefile
$ bzr commit -m "Yo-ified makefile"
Committing to: /home/user/hacking/my-nice-feature/
modified Makefile
Committed revision 10.
</pre>
<p>Ok, we&#8217;re ready for the magic step, which is actually pushing that branch and proposing the merge on the original branch on both Launchpad and Rietveld. It&#8217;s harder to explain than to do it:</p>
<pre>
$ lbox propose -cr
2011/11/17 23:29:49 Looking up branch information for "."...
2011/11/17 23:29:49 Looking up branch information for "hacking/lbox"...
2011/11/17 23:29:49 Found landing target: bzr+ssh://bazaar.../lbox/
(...)
</pre>
<p>This command will ask you for a few details interactively, like your authentication details in Launchpad and in Rietveld (your Google Account, details sent over SSL to Google itself; you may have to visit Rietveld first for that to work), and also the change description.</p>
<p>In case something fails, feel free to simply execute the command again, as many times as you want. The command is smart enough to figure that an existing merge proposal and change in Rietveld exist and will update the existing ones with the new details you provide, rather than duplicating work.</p>
<p>Once the command finishes, you can visit the URL for the merge proposal in Launchpad that was printed, and you should see something like this:</p>
<p><a href="http://blog.labix.org/wp-content/uploads/2011/11/lbox-lp-mp.jpg"><img src="http://blog.labix.org/wp-content/uploads/2011/11/lbox-lp-mp-1024x580.jpg" alt="" title="lbox-lp-mp" width="640" height="362" class="alignnone size-large wp-image-861"/></a></p>
<p>Note that the change description already includes a link onto the Rietveld issue at codereview.appspot.com. The issue on Rietveld will look something like this:</p>
<p><a href="http://blog.labix.org/wp-content/uploads/2011/11/lbox-rietveld.jpg"><img src="http://blog.labix.org/wp-content/uploads/2011/11/lbox-rietveld.jpg" alt="" title="lbox-rietveld" width="979" height="333" class="alignnone size-full wp-image-865" /></a></p>
<p>Observe how the issue has the same description as the merge proposal, but it links back onto the merge proposal. At the left-hand side, there&#8217;s also an interesting detail: the original merge proposal email has been added as the reviewer of this change. This means that any changes performed in Rietveld will be mailed back onto the merge proposal for its record.</p>
<p>In the center you can find the meat of the whole work: the actual change set that is being reviewed. Rietveld works with patch sets, so that you can not only see a given change, but you can also review the history of proposals that the proponent has made, and any inline comments performed in them.</p>
<p>Click on the side-by-side link next to Makefile to get an overview of the actual change, and to make comments on it just click on the desired line:</p>
<p><a href="http://blog.labix.org/wp-content/uploads/2011/11/lbox-rietveld-diff.jpg"><img src="http://blog.labix.org/wp-content/uploads/2011/11/lbox-rietveld-diff.jpg" alt="" title="lbox-rietveld-diff" width="986" height="628" class="alignnone size-full wp-image-867" /></a></p>
<p>Your comments won&#8217;t be sent immediately. Once you&#8217;re done making comments and want to deliver the review, click on the &#8220;Publish+Mail Comments&#8221; link at the top-right, which will take you onto a page that enables complementing with any heading details if desired.</p>
<p>Since the merge proposal is registered as the reviewer of the issue in Rietveld, publishing the review will deliver a message back onto the merge proposal itself, including context links that enable anyone to be taken to the precise review point back in Rietveld:</p>
<p><a href="http://blog.labix.org/wp-content/uploads/2011/11/lbox-lp-comment.jpg"><img src="http://blog.labix.org/wp-content/uploads/2011/11/lbox-lp-comment.jpg" alt="" title="lbox-lp-comment" width="776" height="275" class="alignnone size-full wp-image-870" /></a></p>
<p>Then, once you do make the suggested changes and want to publish a new version of the branch, simply repeat the original command: &#8220;lbox propose -cr&#8221;. This will push the new diff onto Rietveld and create a new patch set. You&#8217;ll also be given the chance to edit the previous description, and any changes there will take place both in the merge proposal and in the Rietveld issue.</p>
<p>lbox also has other useful command line options, such as -bug, -new-bug, to associate Launchpad bugs with the merge proposal and put them in progress, or -bp to associate a blueprint with the branch and bug (if provided) being handled.</p>
<p>This should turn your code reviews in Launchpad into significantly more pleasant tasks, and maybe even save some of your precious life time for more interesting activities.</p>
<p>Happy reviewing!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.labix.org/2011/11/17/launchpad-rietveld-happycodereviews/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Support for Launchpad and Bazaar in goinstall</title>
		<link>http://blog.labix.org/2010/07/03/support-for-launchpad-and-bazaar-in-goinstall</link>
		<comments>http://blog.labix.org/2010/07/03/support-for-launchpad-and-bazaar-in-goinstall#comments</comments>
		<pubDate>Sat, 03 Jul 2010 19:17:57 +0000</pubDate>
		<dc:creator>Gustavo Niemeyer</dc:creator>
				<category><![CDATA[Go]]></category>
		<category><![CDATA[Patch]]></category>
		<category><![CDATA[RCS]]></category>

		<guid isPermaLink="false">http://blog.labix.org/?p=355</guid>
		<description><![CDATA[The patch submitted last weekend to support Launchpad and Bazaar in goinstall went in! This means that once the next release of Go is out (or you sync up with the tip code) you&#8217;ll be able to host modules for &#8230; <a href="http://blog.labix.org/2010/07/03/support-for-launchpad-and-bazaar-in-goinstall">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://codereview.appspot.com/1699050">patch submitted last weekend</a> to support <a href="https://launchpad.net">Launchpad</a> and <a href="http://bazaar.canonical.com/">Bazaar</a> in <a href="http://golang.org/cmd/goinstall/">goinstall</a> went in!</p>
<p>This means that once the next release of <a href="http://golang.org">Go</a> is out (or you sync up with the tip code) you&#8217;ll be able to host modules for Go in Launchpad and people will be able to install it by running something similar to:</p>
<p><span id="more-355"></span></p>
<blockquote><p>
goinstall launchpad.net/yourproject
</p></blockquote>
<p>Then, you can simply use that in your source code as:</p>
<blockquote><p>
import &#8220;launchpad.net/yourproject&#8221;
</p></blockquote>
<p>The following URLs are supported:</p>
<blockquote><p>
import &#8220;launchpad.net/project&#8221;<br />
import &#8220;launchpad.net/project/series&#8221;<br />
import &#8220;launchpad.net/project/series/sub/directory&#8221;</p>
<p>import &#8220;launchpad.net/~user/project/branch&#8221;<br />
import &#8220;launchpad.net/~user/project/branch/sub/directory&#8221;</p>
<p>import &#8220;launchpad.net/~user/+junk/branch&#8221;<br />
import &#8220;launchpad.net/~user/+junk/branch/sub/directory&#8221;
</p></blockquote>
<p>Where you see <i>sub/directory</i> above, it means the module to be compiled, installed, and used, may be inside a subdirectory in the Bazaar branch itself. This is a convention used in all supported backends of goinstall.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.labix.org/2010/07/03/support-for-launchpad-and-bazaar-in-goinstall/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quickies</title>
		<link>http://blog.labix.org/2007/03/10/quickies</link>
		<comments>http://blog.labix.org/2007/03/10/quickies#comments</comments>
		<pubDate>Sat, 10 Mar 2007 04:12:09 +0000</pubDate>
		<dc:creator>Gustavo Niemeyer</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[Other]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[RCS]]></category>

		<guid isPermaLink="false">http://blog.labix.org/2007/03/10/quickies/</guid>
		<description><![CDATA[brother&#8230; My brother Diogo is in town! Good to see him after so much time. pycon&#8230; PyCon 2007 was fantastic. It was great to meet everyone there, and we had two awesome sprinting weeks around it. confluence&#8230; I&#8217;ve recently visited &#8230; <a href="http://blog.labix.org/2007/03/10/quickies">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><b>brother&#8230;</b></p>
<p>My brother Diogo is in town!  Good to see him after so much time.</p>
<p><b>pycon&#8230;</b></p>
<p><a href="http://us.pycon.org">PyCon 2007</a> was fantastic. It was great to meet everyone there, and we had two awesome sprinting weeks around it.</p>
<p><b>confluence&#8230;</b></p>
<p>I&#8217;ve recently <a href="http://www.confluence.org/confluence.php?lat=-31&#038;lon=-52">visited a confluence</a> with a good friend of mine. Kayaks, paddling, walking, driving, swimming, aslphalt, sand, water, grass.. it was awesome.</p>
<p><b>svn2bzr&#8230;</b></p>
<p>It looks like <a href="http://bazaar-vcs.org">Bazaar</a> tags are now really coming, so I&#8217;m doing some work on <a href="http://bazaar-vcs.org/svn2bzr">svn2bzr</a> again. Hopefully this time I&#8217;ll really migrate some projects over.</p>
<p><b>editmoin&#8230;</b></p>
<p>Version 1.9 of <a href="http://labix.org/editmoin">editmoin</a> was released.</p>
<p><b>smart&#8230;</b></p>
<p>Some work in <a href="http://labix.org/smart">Smart</a> is coming in the upcoming weeks.</p>
<p><b>projects&#8230;</b></p>
<p>Hopefully I&#8217;ll be able to speak more openly about (some of the) interesting things I&#8217;ve been working on in the near future.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.labix.org/2007/03/10/quickies/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>editmoin now talks to moin 1.6</title>
		<link>http://blog.labix.org/2006/11/20/editmoin-now-talks-to-moin-16</link>
		<comments>http://blog.labix.org/2006/11/20/editmoin-now-talks-to-moin-16#comments</comments>
		<pubDate>Tue, 21 Nov 2006 00:09:08 +0000</pubDate>
		<dc:creator>Gustavo Niemeyer</dc:creator>
				<category><![CDATA[Project]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[RCS]]></category>

		<guid isPermaLink="false">http://blog.labix.org/2006/11/20/editmoin-now-talks-to-moin-16/</guid>
		<description><![CDATA[editmoin 1.8 was just released, including support for moin 1.6, submitted by both David I. Lehn and Daniele Favara, and URL aliases, as suggested by Diogo Matsubara. One interesting thing I should mention is that Daniele has sent me a &#8230; <a href="http://blog.labix.org/2006/11/20/editmoin-now-talks-to-moin-16">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://labix.org/editmoin">editmoin</a> 1.8 was just released, including support for <a href="http://moinmoin.wikiwikiweb.de/">moin</a> 1.6, submitted by both David I. Lehn and Daniele Favara, and URL aliases, as suggested by Diogo Matsubara.</p>
<p>One interesting thing I should mention is that Daniele has sent me a reference to a <a href="http://bazaar-vcs.org">Bazaar</a> branch containing the change. It&#8217;s the first time I receive a <i>bzr</i> (as it&#8217;s also known) branch when the upstream project is using a different RCS (Subversion).</p>
<p>I actually intend to port this and other projects to Bazaar, but I&#8217;m <a href="http://www.google.com/search?q=%22Gustavo+Niemeyer%22+bzr+tags">waiting for the tags support</a>.  Hopefully it&#8217;s not too far away now.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.labix.org/2006/11/20/editmoin-now-talks-to-moin-16/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

