<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:wfw="http://wellformedweb.org/CommentAPI/"
     >
  <channel>
    <title>byronc bits</title>
    <link>http://byron.theclarkfamily.name/blog</link>
    <description>breaking old technology, one bit at a time</description>
    <pubDate>Fri, 04 Jun 2010 03:12:24 GMT</pubDate>
    <generator>Blogofile</generator>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>_hg_ps1()</title>
      <link>http://byron.theclarkfamily.name/blog/2009/03/31/_hg_ps1()</link>
      <pubDate>Tue, 31 Mar 2009 21:23:53 MDT</pubDate>
      <category><![CDATA[mercurial]]></category>
      <category><![CDATA[bash]]></category>
      <guid isPermaLink="true">http://byron.theclarkfamily.name/blog/2009/03/31/_hg_ps1()</guid>
      <description>_hg_ps1()</description>
      <content:encoded><![CDATA[
<p>In honor of the <a href="http://mail.python.org/pipermail/python-dev/2009-March/087931.html">decision</a>
to move Python development to <a href="http://www.selenic.com/mercurial">Mercurial</a>, I
decided to write something helpful.  I've found <code>__git_ps1()</code> to be incredibly
useful, so, here's my take on <code>_hg_ps1()</code>:</p>

<div class="highlight"><pre>_hg_root<span class="o">()</span>
<span class="o">{</span>
    <span class="nb">local </span><span class="nv">basedir</span><span class="o">=</span><span class="k">$(</span><span class="nb">pwd</span><span class="k">)</span>

    <span class="k">while</span> <span class="o">[</span> <span class="s1">&#39;/&#39;</span> !<span class="o">=</span> <span class="s2">&quot;${basedir}&quot;</span> <span class="o">]</span>; <span class="k">do</span>
<span class="k">        if</span> <span class="o">[</span> -d <span class="s2">&quot;${basedir}/.hg&quot;</span> <span class="o">]</span>; <span class="k">then</span>
<span class="k">            </span><span class="nb">break</span>;
        <span class="k">fi</span>

<span class="k">        </span><span class="nv">basedir</span><span class="o">=</span><span class="s2">&quot;$(readlink -f &quot;</span><span class="k">${</span><span class="nv">basedir</span><span class="k">}</span>/..<span class="s2">&quot;)&quot;</span>
    <span class="k">done</span>

    <span class="o">[</span> <span class="s1">&#39;/&#39;</span> <span class="o">==</span> <span class="s2">&quot;${basedir}&quot;</span> <span class="o">]</span> <span class="o">||</span> <span class="nb">echo</span> -n <span class="s2">&quot;${basedir}&quot;</span>
<span class="o">}</span>

_hg_ps1<span class="o">()</span>
<span class="o">{</span>
    <span class="nb">local </span><span class="nv">g</span><span class="o">=</span><span class="k">$(</span>_hg_root<span class="k">)</span>
    <span class="k">if</span> <span class="o">[</span> -n <span class="s2">&quot;${g}&quot;</span> <span class="o">]</span>; <span class="k">then</span>
<span class="k">        </span><span class="nb">local </span>branch

        <span class="nv">branch</span><span class="o">=</span><span class="k">$(</span>hg branch<span class="k">)</span>
        <span class="k">if</span> <span class="o">[</span> -f <span class="s2">&quot;${g}/.hg/bookmarks.current&quot;</span> <span class="o">]</span>; <span class="k">then</span>
<span class="k">            </span><span class="nv">branch</span><span class="o">=</span><span class="s2">&quot;$(&lt; &quot;</span><span class="k">${</span><span class="nv">g</span><span class="k">}</span>/.hg/bookmarks.current<span class="s2">&quot;):${branch}&quot;</span>
        <span class="k">fi</span>

<span class="k">        if</span> <span class="o">[</span> -n <span class="s2">&quot;${1-}&quot;</span> <span class="o">]</span>; <span class="k">then</span>
<span class="k">            </span><span class="nb">printf</span> <span class="s2">&quot;$1&quot;</span> <span class="s2">&quot;${branch}&quot;</span>
        <span class="k">else</span>
<span class="k">            </span><span class="nb">printf</span> <span class="s2">&quot; (%s)&quot;</span> <span class="s2">&quot;${branch}&quot;</span>
        <span class="k">fi</span>
<span class="k">    fi</span>
<span class="o">}</span>
</pre></div>


<p>Yes, I know that the <code>hg root</code> command does the same thing as my <code>_hg_root()</code>,
but it felt slow running mercurial before printing each prompt.  The only
thing that's missing is showing when merges are in progress. I'll try to add
that the next time I need to do a manual merge.</p>

<p><em>Update:</em> It seems that some of my repositories don't have a <code>.hg/branch</code> file
so I'm calling <code>hg branch</code> for that info.  Also, the <code>readlink</code> line in
<code>_hg_root()</code> did not properly handle spaces.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
