<?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>teideal glic deisbhéalach &#187; scm</title>
	<atom:link href="http://www.serpentine.com/blog/category/software/scm/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.serpentine.com/blog</link>
	<description>Bryan O&#039;Sullivan&#039;s blog</description>
	<lastBuildDate>Thu, 01 Dec 2011 16:53:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>How to migrate from darcs to Mercurial or git</title>
		<link>http://www.serpentine.com/blog/2010/10/21/how-to-migrate-from-darcs-to-mercurial-or-git/</link>
		<comments>http://www.serpentine.com/blog/2010/10/21/how-to-migrate-from-darcs-to-mercurial-or-git/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 23:49:12 +0000</pubDate>
		<dc:creator>Bryan O'Sullivan</dc:creator>
				<category><![CDATA[haskell]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://www.serpentine.com/blog/?p=749</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[
]]></content:encoded>
			<wfw:commentRss>http://www.serpentine.com/blog/2010/10/21/how-to-migrate-from-darcs-to-mercurial-or-git/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Dual bitbucket/github citizenship</title>
		<link>http://www.serpentine.com/blog/2010/10/10/dual-bitbucketgithub-citizenship/</link>
		<comments>http://www.serpentine.com/blog/2010/10/10/dual-bitbucketgithub-citizenship/#comments</comments>
		<pubDate>Sun, 10 Oct 2010 22:56:02 +0000</pubDate>
		<dc:creator>Bryan O'Sullivan</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[scm]]></category>

		<guid isPermaLink="false">http://www.serpentine.com/blog/?p=718</guid>
		<description><![CDATA[One of the particularly nice things about working with a distributed revision control tool these days is that I can sidestep the choice of winning tool. Thanks to Scott Chacon and Augie Fackler&#8217;s excellent hg-git extension, I can use Mercurial and collaborate almost seamlessly with git users. This is exactly what I did when working [...]]]></description>
			<content:encoded><![CDATA[<p
>One of the particularly nice things about working with a distributed revision control tool these days is that I can sidestep the choice of winning tool. Thanks to Scott Chacon and Augie Fackler&#8217;s excellent <a href="http://hg-git.github.com/"
  >hg-git extension</a
  >, I can use Mercurial and collaborate almost seamlessly with git users. This is exactly what I did when working with Johan on the new I/O manager subsystem in GHC 7, and the experience was generally very smooth.</p
><p
>The only mild annoyance has been that I&#8217;d prefer to also not be forced to choose a hosting winner: although <a href="http://bitbucket.org/"
  >bitbucket</a
  > is pretty good, <a href="http://github.com/"
  >github</a
  > is currently far slicker, and has a much larger community of potential collaborators.</p
><p
>I&#8217;ve hosted most of my code on bitbucket for quite a while. Until this morning, I had a somewhat awkward way to mirror code to github. I just automated the problem away.</p
><p
>My automation scheme is implemented as a Mercurial hook. Here&#8217;s how I&#8217;ve enabled it in my <code
  >$HOME/.hgrc</code
  > file:</p
><pre class="numberLines"
><code
  >[hooks]
post-push = python:/home/bos/share/python/github_mirror.py:post_push
</code
  ></pre
><p
>That <code
  >github_mirror.py</code
  > hook is very simple. Every time I push, it checks to see if I'm pushing to a bitbucket repository, and if so checks my local repo's <code
  >.hg/hgrc</code
  > file to see if I have a mirror on github. If I do, it pushes to github, too.</p
><table class="sourceCode"
><tr
  ><td class="nums" title="Click to toggle line numbers" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"
    ><pre
      >1<br
	 />2<br
	 />3<br
	 />4<br
	 />5<br
	 />6<br
	 />7<br
	 />8<br
	 />9<br
	 />10</pre
      ></td
    ><td class="sourceCode"
    ><pre class="sourceCode python"
      ><code
	><span class="ch"
	  >from</span
	  > mercurial <span class="ch"
	  >import</span
	  > commands<br
	   /><br
	   /><span class="kw"
	  >def</span
	  > post_push(ui, repo, pats, opts, *args, **kwargs):<br
	   />    dest = pats and pats[<span class="dv"
	  >0</span
	  >]<br
	   />    dest = ui.expandpath(dest or <span class="st"
	  >'default-push'</span
	  >, dest or <span class="st"
	  >'default'</span
	  >)<br
	   />    <span class="kw"
	  >if</span
	  > <span class="st"
	  >'bitbucket.org'</span
	  > in dest:<br
	   />        github = ui.config(<span class="st"
	  >'paths'</span
	  >, <span class="st"
	  >'github'</span
	  >)<br
	   />        <span class="kw"
	  >if</span
	  > github:<br
	   />            <span class="kw"
	  >return</span
	  > commands.push(ui, repo, github, **opts)<br
	   />        ui.warn(<span class="st"
	  >'no github mirror!?</span
	  ><span class="ch"
	  >\n</span
	  ><span class="st"
	  >'</span
	  >)<br
	   /></code
	></pre
      ></td
    ></tr
  ></table
><p
>How do I tell Mercurial that I have a girhub mirror? In a repo's <code
  >.hg/hgrc</code
  > file, I have something like this (taken from a real repo):</p
><pre class="numberLines"
><code
  >[paths]
default = http://bitbucket.org/bos/pcap
default-push = ssh://hg@bitbucket.org/bos/pcap
github = git+ssh://git@github.com/bos/pcap.git
</code
  ></pre
><p
>The <code
  >github_mirror.py</code
  > hook looks for that <code
  >github</code
  > key in the <code
  >paths</code
  > section of the file, and uses it if present.</p
>]]></content:encoded>
			<wfw:commentRss>http://www.serpentine.com/blog/2010/10/10/dual-bitbucketgithub-citizenship/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Converting a Mercurial tree repeatedly with files removed</title>
		<link>http://www.serpentine.com/blog/2010/08/10/converting-a-mercurial-tree-repeatedly-with-files-removed/</link>
		<comments>http://www.serpentine.com/blog/2010/08/10/converting-a-mercurial-tree-repeatedly-with-files-removed/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 00:13:53 +0000</pubDate>
		<dc:creator>Bryan O'Sullivan</dc:creator>
				<category><![CDATA[mercurial]]></category>

		<guid isPermaLink="false">http://www.serpentine.com/blog/?p=645</guid>
		<description><![CDATA[Here's a useful little tip if you need to use hg convert to generate a stripped-down copy of a Mercurial repository. For instance, maybe we have a tree that someone committed a large file to by accident, or perhaps someone accidentally checked some closed source code into an open source tree. If such a commit [...]]]></description>
			<content:encoded><![CDATA[<p>Here's a useful little tip if you need to use <a href="http://mercurial.selenic.com/wiki/ConvertExtension"><tt>hg convert</tt></a> to generate a stripped-down copy of a <a href="http://mercurial.selenic.com/">Mercurial</a> repository. For instance, maybe we have a tree that someone committed a large file to by accident, or perhaps someone accidentally checked some closed source code into an open source tree. If such a commit makes it into a busy repository, it can be a while before anyone notices. Worse, we can't necessarily expect everyone who's downstream of that repository to immediately drop everything they're doing and find a way to switch over to the freshly-scrubbed tree you want to publish.</p>

<p>There's a fairly painless way around this. Firstly, we'll need to use the <a href="http://mercurial.selenic.com/wiki/ConvertExtension#A--filemap"><tt>filemap</tt></a> option to make <tt>hg convert</tt> strip out the files we want to lose from our new repository. Here's an idea of how that should work. To start off, we create a demo repository, named <tt>hg-100</tt>.</p>

<pre>
$ hg clone -r 100 http://www.selenic.com/repo/hg hg-100
$ ls -F hg-100
comparison.txt	hgweb.py     mercurial/  PKG-INFO  setup.py  tkmerge
hg		MANIFEST.in  notes.txt	 README    tests/
</pre>

<p>Next, we set up a filemap that eliminates all tests from the tree.</p>

<pre>
$ echo exclude tests > no-tests.map
$ hg convert --quiet --filemap no-tests.map hg-100 nukeme
$ hg --cwd nukeme update --quiet
$ ls -F nukeme
comparison.txt	hgweb.py     mercurial/  PKG-INFO  setup.py
hg		MANIFEST.in  notes.txt	 README    tkmerge
</pre>

<p>Now that we have run <tt>hg convert</tt>, it's changed the changeset ID of every commit that either contains a change to a file in <tt>tests</tt> or is a child of such a commit. Ouch, right? Haven't we now lost the ability to merge contaminated repositories with the scrubbed one?</p>

<p>Fortunately, no. We could always pull future changes into <tt>hg-100</tt>, then rerun <tt>hg convert</tt> with <i>the same</i> <tt>--filemap</tt> option, and successfully scrub later changes, which we could then share with our collaborators.</p>

<p>The only trouble with this is that it relies on a non-version-controlled file named <tt>.hg/shamap</tt> in our <tt>nukeme</tt> tree. That file contains the mapping from source changeset ID to target changeset ID. This is what <tt>hg convert</tt> uses to tell whether a changeset has been seen before, and if so, what its new ID is. So if we lose the <tt>nukeme</tt> tree, we can't run <tt>hg convert</tt> again, and we're stuck, right? Well, once again, not necessarily.</p>

<p>A final trick up our sleeves is to run every instance of <tt>hg convert</tt> with <tt>--config convert.hg.saverev=True</tt>. This is documented in the output of <tt>hg help</tt>, but sadly not on the wiki page. This saves each source changeset ID in a special field in the corresponding changeset in the target repo.</p>

<pre>
$ rm -rf nukeme
$ hg convert --quiet --filemap no-tests.map --config convert.hg.saverev=True \
    hg-100 nukeme
$ hg --cwd nukeme tip --debug | grep 'extra:'
extra:       branch=default
extra:       convert_revision=526722d24ee5b3b860d4060e008219e083488356
</pre>

<p>The <tt>convert_revision</tt> data gives us enough to create a new <tt>.hg/shamap</tt> file whenever we need to. First, we create a <a href="http://hgbook.red-bean.com/read/customizing-the-output-of-mercurial.html">style file</a> to extract the necessary data from Mercurial.</p>

<pre>
$ cat >> pants.map << EOF
changeset = '{extras}\n'
extra = '{key} {value} {node}\n'
EOF
</pre>

<p>Then, in any clone of our converted repo, it becomes simple to regenerate the <tt>.hg/shamap</tt> file:</p>

<pre>
$ hg log -r0: --style pants.map | awk '/convert_revision/{print $2,$3}' \
    > $(hg root)/.hg/shamap
</pre>

<p>And finally: remember, kids, if you like this kind of information, not only is my Mercurial book <a href="http://hgbook.red-bean.com/">free to read online</a>, but if you buy a paper or ebook copy, <i>all the royalties</i> go to the <a href="http://conservancy.softwarefreedom.org/">Software Freedom Convervancy</a>, whose work is so worthy of support you should buy five copies, not just one.</p>]]></content:encoded>
			<wfw:commentRss>http://www.serpentine.com/blog/2010/08/10/converting-a-mercurial-tree-repeatedly-with-files-removed/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>In which I write again about revision control</title>
		<link>http://www.serpentine.com/blog/2009/09/10/in-which-i-write-again-about-revision-control/</link>
		<comments>http://www.serpentine.com/blog/2009/09/10/in-which-i-write-again-about-revision-control/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 16:53:14 +0000</pubDate>
		<dc:creator>Bryan O'Sullivan</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[scm]]></category>

		<guid isPermaLink="false">http://www.serpentine.com/blog/?p=421</guid>
		<description><![CDATA[Several months ago, I wrote an article on evaluating revision control systems. It was initially published in ACM Queue a few weeks ago, and the article has now made its way (unchanged) to Communications of the ACM. I&#8217;m quite happy with how it turned out, and I hope that people will find it useful in [...]]]></description>
			<content:encoded><![CDATA[<p>Several months ago, I wrote an article on evaluating revision control systems. It was initially published in <a href="http://queue.acm.org/detail.cfm?id=1595636">ACM Queue</a> a few weeks ago, and the article has now made its way (unchanged) to <a href="http://cacm.acm.org/magazines/2009/9/38901-making-sense-of-revision-control-systems/fulltext">Communications of the ACM</a>. I&#8217;m quite happy with how it turned out, and I hope that people will find it useful in figuring out what&#8217;s important to them.</p>

<p>Since the publication of the article, a few people have asked why I didn&#8217;t write about their favourite revision control system. The simple answer is that I was already about 50% over my initial word budget by the time I finished up what I <i>did</i> write. (I&#8217;ll confess that I was thoroughly charmed by a conspiratorial suggestion that I was editing some beloved tool out of history by not mentioning it.)</p>]]></content:encoded>
			<wfw:commentRss>http://www.serpentine.com/blog/2009/09/10/in-which-i-write-again-about-revision-control/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mercurial book is now in production, and a little gift</title>
		<link>http://www.serpentine.com/blog/2009/05/15/mercurial-book-is-now-in-production-and-a-little-gift/</link>
		<comments>http://www.serpentine.com/blog/2009/05/15/mercurial-book-is-now-in-production-and-a-little-gift/#comments</comments>
		<pubDate>Fri, 15 May 2009 04:29:40 +0000</pubDate>
		<dc:creator>Bryan O'Sullivan</dc:creator>
				<category><![CDATA[mercurial]]></category>

		<guid isPermaLink="false">http://www.serpentine.com/blog/?p=362</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[
]]></content:encoded>
			<wfw:commentRss>http://www.serpentine.com/blog/2009/05/15/mercurial-book-is-now-in-production-and-a-little-gift/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Mercurial: The Definitive Guide</title>
		<link>http://www.serpentine.com/blog/2009/03/27/mercurial-the-definitive-guide/</link>
		<comments>http://www.serpentine.com/blog/2009/03/27/mercurial-the-definitive-guide/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 18:29:05 +0000</pubDate>
		<dc:creator>Bryan O'Sullivan</dc:creator>
				<category><![CDATA[mercurial]]></category>

		<guid isPermaLink="false">http://www.serpentine.com/blog/?p=343</guid>
		<description><![CDATA[If you&#8217;ve looked at the Mercurial book site in the past 24 hours, you&#8217;ll have noticed that both its look and the name of the book have changed. First, the cosmetic news. The change in appearance is due to my switching over to the system I used to publish Real World Haskell. I&#8217;ve always made [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve looked at the <a href="http://hgbook.red-bean.com/">Mercurial book</a> site in the past 24 hours, you&#8217;ll have noticed that both its look and the name of the book have changed.</p>

<p>First, the cosmetic news. The change in appearance is due to my switching over to the system I used to publish <a href="http://book.realworldhaskell.org/">Real World Haskell</a>. I&#8217;ve always made the <a href="http://bitbucket.org/bos/hgbook/">source code to the Mercurial book</a> available, but now it includes the source of the Django app and jQuery code that drives the comment system. So if you&#8217;re writing an online book, have at it!</p>

<p>The change in title occurs because O&#8217;Reilly Media is going to publish the book in a few months, once I&#8217;ve tidied it up (with, I hope, your help!). The content is still licensed under the <a href="http://opencontent.org/openpub/">OPL</a>, so you remain free to use and modify my work under remarkably liberal terms.</p>

<p>O&#8217;Reilly and I are donating my royalties on this book to the <a href="http://conservancy.softwarefreedom.org/">Software Freedom Conservancy</a>, so if you buy a hardcopy, you&#8217;ll be helping one of the finest causes in the software world.</p>

<p>This is a great time to get involved in the production and polishing of the book, and as I did with the Haskell book, I&#8217;ll give credit to everyone who provides their name. If you&#8217;re interested in helping out, be it by contributing content, corrections, typo fixes, or suggestions, you have two easy ways to do so:</p>
<ul>
<li>Clone a copy of the source tree and start sending patches</li>
<li>Use the comment system on the web site to point out errors and omissions, or to make suggestions</li>
<li>For bigger stuff, <a href="http://bitbucket.org/bos/hgbook/issues/">report an issue</a></li>
</ul>

<p>So please dive on in, and let&#8217;s make this book an even more outstanding resource for the Mercurial community!</p>]]></content:encoded>
			<wfw:commentRss>http://www.serpentine.com/blog/2009/03/27/mercurial-the-definitive-guide/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>The 12 Days of EFF</title>
		<link>http://www.serpentine.com/blog/2008/12/16/the-12-days-of-eff/</link>
		<comments>http://www.serpentine.com/blog/2008/12/16/the-12-days-of-eff/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 21:58:48 +0000</pubDate>
		<dc:creator>Bryan O'Sullivan</dc:creator>
				<category><![CDATA[scm]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.serpentine.com/blog/?p=314</guid>
		<description><![CDATA[Via the ever industrious Danny O&#8217;Brien, we bring to you the Electronic Frontier Foundation&#8216;s end-of-year animation. Learn more about this video and support EFF!]]></description>
			<content:encoded><![CDATA[<p>Via the ever industrious <a href="http://www.oblomovka.com/">Danny O&#8217;Brien</a>, we bring to you the <a href="http://www.eff.org/">Electronic Frontier Foundation</a>&#8216;s end-of-year animation.</p>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="500" height="402"><param name="movie" value="http://w2.eff.org/12days/video/flowplayer.swf" /><param name="allowfullscreen" value="true" /><param name="flashvars" value='config={"clip":{"url":"http://www.archive.org/download/12DaysofEFF/12days.flv","autoPlay":false,"autoBuffering":true,"linkUrl":"http://secure.eff.org/happyholidays","linkWindow":"_top"},"plugins":{"controls":{"url":"http://w2.eff.org/12days/video/flowplayer.controls.swf","backgroundColor":"#000000","sliderColor":"#000000","progressColor":"#990000","bufferColor":"#666666","timeColor":"#000000","backgroundGradient":"low"}},"playlist":[{"url":"http://www.archive.org/download/12DaysofEFF/12days.flv","autoPlay":false,"autoBuffering":true,"linkUrl":"http://secure.eff.org/happyholidays","linkWindow":"_top"}]}' /><embed type="application/x-shockwave-flash" width="500" height="402" allowfullscreen="true" src="http://w2.eff.org/12days/video/flowplayer.swf" flashvars='config={"clip":{"url":"http://www.archive.org/download/12DaysofEFF/12days.flv","autoPlay":false,"autoBuffering":true,"linkUrl":"http://secure.eff.org/happyholidays","linkWindow":"_top"},"plugins":{"controls":{"url":"http://w2.eff.org/12days/video/flowplayer.controls.swf","backgroundColor":"#000000","sliderColor":"#000000","progressColor":"#990000","bufferColor":"#666666","timeColor":"#000000","backgroundGradient":"low"}},"playlist":[{"url":"http://www.archive.org/download/12DaysofEFF/12days.flv","autoPlay":false,"autoBuffering":true,"linkUrl":"http://secure.eff.org/happyholidays","linkWindow":"_top"}]}'/></object><br /><a href="http://secure.eff.org/happyholidays">Learn more about this video and support EFF!</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.serpentine.com/blog/2008/12/16/the-12-days-of-eff/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.archive.org/download/12DaysofEFF/12days.flv" length="7785961" type="video/x-flv" />
		</item>
		<item>
		<title>First impressions of darcs: not so hot</title>
		<link>http://www.serpentine.com/blog/2007/01/11/why-i-dont-like-darcs/</link>
		<comments>http://www.serpentine.com/blog/2007/01/11/why-i-dont-like-darcs/#comments</comments>
		<pubDate>Fri, 12 Jan 2007 06:54:50 +0000</pubDate>
		<dc:creator>Bryan O'Sullivan</dc:creator>
				<category><![CDATA[scm]]></category>

		<guid isPermaLink="false">http://www.serpentine.com/blog/2007/01/11/why-i-dont-like-darcs/</guid>
		<description><![CDATA[I&#8217;ve been using darcs recently for some Haskell-related revision control tasks, as it&#8217;s the revision control tool of choice for the Haskell community (no surprise; it&#8217;s the most widely used Haskell program in existence). However, I can&#8217;t say I&#8217;ve been all that happy with darcs during my first few days of use. It has some [...]]]></description>
			<content:encoded><![CDATA[I&#8217;ve been using darcs recently for some Haskell-related revision control tasks, as it&#8217;s the revision control tool of choice for the Haskell community (no surprise; it&#8217;s the most widely used Haskell program in existence).

However, I can&#8217;t say I&#8217;ve been all that happy with darcs during my first few days of use. It has some behaviours that I think of as ill-considered, and not oriented towards making new users comfortable quickly.

By default, &#8220;darcs record&#8221; (the equivalent of &#8220;commit&#8221; in other toolsâ€”why the different command name?) prompts me for every single hunk, to see if I really want to commit that hunk. The &#8220;&#8211;all&#8221; option records all hunks, but why is this not the default? It&#8217;s all very well that I can pick and choose hunks, but why isn&#8217;t by far the most frequent use case embodied in the default behaviour of the command?

When I run &#8220;darcs record&#8221; without &#8220;&#8211;all&#8221;, darcs presents me with a prompt that is impressive in its opacity.
<blockquote>Shall I record this change? (1/?)  [<strong>ynWsfqadjkc</strong>], or ? for help:</blockquote>
I&#8217;ve rendered in bold the scary bit. I know that a prompt string like this is asking me to choose one of several single-character options. Normally, that&#8217;s fine; but in this case, <em>yow</em>! I have almost half the alphabet to choose from! Am I supposed to remember what the alphabet soup that isn&#8217;t &#8220;y&#8221; or &#8220;n&#8221; is for? And if I&#8217;m not expected to remember them, then why am I being prompted with them? Are they all equally important?

And there&#8217;s still one more, truly obnoxious, piece of behaviour here. Unlike every other command line tool I&#8217;ve used in, well, as long as I can remember, darcs puts my terminal window into &#8220;cbreak&#8221; mode. What this means is that it responds immediately to a single keystroke, instead of waiting for me to hit the &#8220;return&#8221; key. Since every other tool that I use expects a keystroke followed by &#8220;return&#8221; when it prompts me in this way, that is how my muscle memory is trained: I type a key, I hit &#8220;return&#8221;.

The result is that darcs treats what I intended to be one response as <em>two</em>â€”as responses to requests for handling <em>two different hunks</em>. The first hunk is handled however I specified, and darcs interprets the second as &#8220;do whatever the default action is on this hunk&#8221;. Ugh.

There&#8217;s one final thing about darcs record. When I&#8217;m done foontling about with hunks, it asks me &#8220;What is the patch name?&#8221; Being an open source hacker, I associate &#8220;patch name&#8221; with &#8220;the name of a patch file&#8221;, but once again I must translate peculiar darcs idiom into familiar revision control language: darcs really wants a one-line <em>description</em> of my change, not a file name.

So that&#8217;s the &#8220;record&#8221; command (I have similar gripes with several other darcs commands, but let&#8217;s keep this thing short). These aren&#8217;t fatal problems (for the fatal problem with darcs, see question 1 in the <a target="_blank" href="http://darcs.net/DarcsWiki/FrequentlyAskedQuestions">darcs FAQ</a>), but I find these behaviours to be weird and annoying at least; in the case of the terminal-diddling business, downright bad.

Long-time darcs users have no doubt trained themselves to not notice this stuff; I suppose I&#8217;ll get there eventually.]]></content:encoded>
			<wfw:commentRss>http://www.serpentine.com/blog/2007/01/11/why-i-dont-like-darcs/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>OSCON 2006: Come see me talk</title>
		<link>http://www.serpentine.com/blog/2006/07/24/oscon-2006-come-see-me-talk/</link>
		<comments>http://www.serpentine.com/blog/2006/07/24/oscon-2006-come-see-me-talk/#comments</comments>
		<pubDate>Mon, 24 Jul 2006 22:50:42 +0000</pubDate>
		<dc:creator>Bryan O'Sullivan</dc:creator>
				<category><![CDATA[mercurial]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://home.serpentine.com/blog/2006/07/24/oscon-2006-come-see-me-talk/</guid>
		<description><![CDATA[I&#8217;m giving a talk at OSCON in Portland this week; the title is &#8220;Painless maintenance of local changes to fast-moving software&#8221;. The content is about how managing and developing patches with Mercurial Queues will make you a happier person and straighten your teeth while you sleep, all for free. The talk is in room F150, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m giving a talk at OSCON in Portland this week; the title is &ldquo;Painless maintenance of local changes to fast-moving software&rdquo;.  The content is about how managing and developing patches with Mercurial Queues will make you a happier person and straighten your teeth while you sleep, all for free.</p>
<p>The talk is in room F150, on Wednesday, July 26, at 2:35pm.  It&#8217;ll be a lot of fun.</p>]]></content:encoded>
			<wfw:commentRss>http://www.serpentine.com/blog/2006/07/24/oscon-2006-come-see-me-talk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Been a busy month</title>
		<link>http://www.serpentine.com/blog/2006/07/15/been-a-busy-month/</link>
		<comments>http://www.serpentine.com/blog/2006/07/15/been-a-busy-month/#comments</comments>
		<pubDate>Sun, 16 Jul 2006 00:31:21 +0000</pubDate>
		<dc:creator>Bryan O'Sullivan</dc:creator>
				<category><![CDATA[mercurial]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://home.serpentine.com/blog/2006/07/15/been-a-busy-month/</guid>
		<description><![CDATA[Couple my usual reluctance to post here with work on a new all-consuming project, and you have a recipe for potentially long periods of silence. Yesterday, I posted an announcement of the availability of the first chapter of the Mercurial manual to the mailing list. You can read the first chapter here (PDF only thus [...]]]></description>
			<content:encoded><![CDATA[<p>Couple my usual reluctance to post here with work on a new all-consuming project, and you have a recipe for potentially long periods of silence.</p>
<p>Yesterday, I posted an announcement of the availability of the first chapter of the Mercurial manual to the mailing list.  You can <a href="http://www.red-bean.com/~bos/hgbook.pdf">read the first chapter here</a> (PDF only thus far); it documents Mercurial Queues, which I&#8217;ve enthused about at length in front of several audiences recently.</p>
<p>I&#8217;m working on the manual <a href="http://hg.serpentine.com/mercurial/book">in the open</a>, and releasing it under the <a href="http://opencontent.org/openpub/">Open Publication License</a>.  It&#8217;s a lot of fun to finally be writing a publication-quality manual for a piece of software I like so much.</p>
<p>As the manual progresses, I&#8217;ll be making it available in both HTML and PDF formats, with integrated feedback links available.  More about that later, as time permits.</p>]]></content:encoded>
			<wfw:commentRss>http://www.serpentine.com/blog/2006/07/15/been-a-busy-month/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

