<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>The Changelog - Programming</title>
    <link>http://changelog.complete.org/</link>
    <description>Viewpoints on technology, society, and government</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.1.4 - http://www.s9y.org/</generator>
    <pubDate>Sat, 03 May 2008 17:44:48 GMT</pubDate>

    <image>
        <url>http://changelog.complete.org/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: The Changelog - Programming - Viewpoints on technology, society, and government</title>
        <link>http://changelog.complete.org/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Knuth and Reusable Code</title>
    <link>http://changelog.complete.org/posts/709-Knuth-and-Reusable-Code.html</link>
            <category>Programming</category>
    
    <comments>http://changelog.complete.org/posts/709-Knuth-and-Reusable-Code.html#comments</comments>
    <wfw:comment>http://changelog.complete.org/wfwcomment.php?cid=709</wfw:comment>

    <wfw:commentRss>http://changelog.complete.org/rss.php?version=2.0&amp;type=comments&amp;cid=709</wfw:commentRss>
    

    <author>nospam@example.com (John Goerzen)</author>
    <content:encoded>
    In the recent &lt;a href=&quot;http://www.informit.com/articles/article.aspx?p=1193856&quot;&gt;interview with InformIT&lt;/a&gt;, Donald Knuth said:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;I also must confess to a strong bias against the fashion for reusable code. To me, &quot;re-editable code&quot; is much, much better than an untouchable black box or toolkit. I could go on and on about this. If you’re totally convinced that reusable code is wonderful, I probably won’t be able to sway you anyway, but you’ll never convince me that reusable code isn’t mostly a menace.&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
I have tried in vain to locate any place where he talks about this topic at greater length.  Does anyone have a link? 
    </content:encoded>

    <pubDate>Wed, 30 Apr 2008 17:48:17 -0500</pubDate>
    <guid isPermaLink="false">http://changelog.complete.org/posts/709-guid.html</guid>
    
</item>
<item>
    <title>At long last, software.complete.org migrated to Redmine</title>
    <link>http://changelog.complete.org/posts/701-At-long-last,-software.complete.org-migrated-to-Redmine.html</link>
            <category>Programming</category>
    
    <comments>http://changelog.complete.org/posts/701-At-long-last,-software.complete.org-migrated-to-Redmine.html#comments</comments>
    <wfw:comment>http://changelog.complete.org/wfwcomment.php?cid=701</wfw:comment>

    <wfw:commentRss>http://changelog.complete.org/rss.php?version=2.0&amp;type=comments&amp;cid=701</wfw:commentRss>
    

    <author>nospam@example.com (John Goerzen)</author>
    <content:encoded>
    I&#039;ve been writing a bit about &lt;a href=&quot;http://changelog.complete.org/posts/696-Thoughts-on-Redmine.html&quot;&gt;Trac and Redmine&lt;/a&gt; lately.  For approximately the 1/3 of the publically-available software that I&#039;ve written, I maintain a Trac site for it at &lt;a href=&quot;http://software.complete.org/&quot;&gt;software.complete.org&lt;/a&gt;.  This 1/3 is generally the third that has the most interest from others, and there&#039;s a bug tracker, wiki, download area, etc.&lt;br /&gt;
&lt;br /&gt;
Trac is nice, and much nicer than one of the *Forge systems for a setup of this scale.  But it has long bugged me that Trac has no integration between projects.  To see what open bugs are out there on my software, I have to check -- yes -- &lt;b&gt;17&lt;/b&gt; individual bug trackers.&lt;br /&gt;
&lt;br /&gt;
To keep track on the wikis to make sure that nobody is adding spam, I have to subscribe to 17 different RSS feeds.&lt;br /&gt;
&lt;br /&gt;
It took me some time just to hack up a way so I didn&#039;t have to have 17 different accounts to log in to...&lt;br /&gt;
&lt;br /&gt;
So, mainly, my use case for Trac isn&#039;t what it was intended for.&lt;br /&gt;
&lt;br /&gt;
Enter &lt;a href=&quot;http://www.redmine.org/&quot;&gt;Redmine&lt;/a&gt;.  It&#039;s similar in concept to Trac -- a lightweight project management system.  But unlike Trac, Redmine allows you to have separate projects, but still manage them all as one if you please.&lt;br /&gt;
&lt;br /&gt;
Redmine didn&#039;t have Git support in its latest release, but there was a patch in Redmine&#039;s BTS for it.  I discussed why it wasn&#039;t being applied with Redmine&#039;s author, and then went in and fixed it up myself.  (I used Git to make a branch off the Redmine SVN repo -- very slick.)  Unlike Trac&#039;s Git support, Redmine&#039;s is *fast*.  I tested it against a clone of the Linux kernel repo on my local machine.&lt;br /&gt;
&lt;br /&gt;
There are a few things about Redmine I don&#039;t like, but I have learned that they mainly have to do with Ruby on Rails.  As someone pointed out on Planet Debian lately (sorry, can&#039;t find the link), the very nature of Rails makes it almost impossible for OS developers like Debian to include Rails apps in the distribution.&lt;br /&gt;
&lt;br /&gt;
Not only that, but it seems like Rails assumes that even if you are just going to *use* an app, you know how to *write* one.  For instance, this is pretty much the extent of documentation on how to set up a Rails app to be able to send out mail:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
  # See Rails::Configuration for more options&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
And of course, googling that turns up nothing useful.&lt;br /&gt;
&lt;br /&gt;
Redmine is a rails app, so it cannot escape some of this.  It seems to be a solid piece of work, but Rails seems to make things unnecessarily complex.  That, and I&#039;ve found some bugs in the underlying Rails infrastructure (like activerecord not quoting the schema name when talking to PostgreSQL) that make me nervous about the stack.&lt;br /&gt;
&lt;br /&gt;
But the site is up and running well now, so I&#039;m happy, and am planning to keep working with Redmine for quite some time. 
    </content:encoded>

    <pubDate>Sat, 15 Mar 2008 15:50:31 -0500</pubDate>
    <guid isPermaLink="false">http://changelog.complete.org/posts/701-guid.html</guid>
    <category>rails</category>
<category>redmine</category>
<category>trac</category>

</item>
<item>
    <title>If Version Control Systems were Airlines</title>
    <link>http://changelog.complete.org/posts/698-If-Version-Control-Systems-were-Airlines.html</link>
            <category>Humor</category>
            <category>Programming</category>
    
    <comments>http://changelog.complete.org/posts/698-If-Version-Control-Systems-were-Airlines.html#comments</comments>
    <wfw:comment>http://changelog.complete.org/wfwcomment.php?cid=698</wfw:comment>

    <wfw:commentRss>http://changelog.complete.org/rss.php?version=2.0&amp;type=comments&amp;cid=698</wfw:commentRss>
    

    <author>nospam@example.com (John Goerzen)</author>
    <content:encoded>
    Many of you have seen the net classic &lt;a href=&quot;http://groups.google.com/group/alt.folklore.computers/browse_thread/thread/631c19e2f934ef98/ef1798fdafd584b1?lnk=st&amp;q=%22operating+systems+were+airlines%22#ef1798fdafd584b1&quot;&gt;If Operating Systems Were Airlines&lt;/a&gt;.  Today, let&#039;s consider what the world might be like if version control systems were airlines...&lt;br /&gt;
&lt;br /&gt;
Before anyone gets mad, this is all in fun, OK?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;RCS Airlines: &lt;/b&gt; One of the first airlines, from way back when this whole aviation thing was new and exciting.  Each RCS flight carries exactly one passenger, which RCS believes is a superior way to fly.  Although most RCS airplanes are rusty and battered today, RCS Airlines still retains its historic dedication to security.  Each airplane is kept locked as much as possible for safety.  Occasionally flights will be delayed for hours because the pilot can&#039;t open the locked plane.  When this happens, the pilot will frantically try to get the cell phone number of whoever it is that has locked the plane.  When the plane finally gets unlocked, you may be tempted to ask why it was locked for so long.  Veteran RCS users have learned that the answer is usually disgusting, and never ask anymore.  Main competitor: CP/M airlines.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;CVS Airlines: &lt;/b&gt; Founded on the belief that they could be more efficient than RCS by carrying multiple passengers per flight.  They still carry each passenger in a separate RCS-built airplane, but the airplanes fly in a goose-like &quot;,V&quot; formation.  Watch out for layovers, though.  It can take hours to merge new passengers into the formation properly, and it might take several attempts to take off afterwards.&lt;br /&gt;
&lt;br /&gt;
CVS flights often feature fights over who gets to fly.  CVS piloting fights are legendary; rumor has it that OpenBSD got started after CVS airlines refused to allow a passenger to board on the grounds that he had in the past refused to stow his tray table in the upright and locked position.&lt;br /&gt;
&lt;br /&gt;
CVS airlines mostly counts as customers the &quot;over-50&quot; crowd who grew up using CVS and don&#039;t like change.  Its in-flight magazine features advertisements for balding-reversal treatments and uuencode tools.&lt;br /&gt;
&lt;br /&gt;
Main competitor: AIX airlines.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Subversion Airlines: &lt;/b&gt; Started by some grey-haired CVS executives with long, wispy beards, Subversion airlines got started by trying to be &quot;CVS, but better&quot;.  Subversion airlines was the first major airline to use planes that seat more than one passenger.  Unlike CVS airlines, all passengers on a Subversion flight travel in the same plane.&lt;br /&gt;
&lt;br /&gt;
Subversion airlines is famous for its Soviet-like centralized control.  All operations must be approved by the Kremlin, and you are allowed, by the grace of the Party Leader, to gaze at the massive airplanes.  Those that have served the Party and Airline well for many years are allowed to enter the Great Shrine of the First-Class Comitter, and actually make changes to the airplanes themselves.  Plainclothes Subversion Airlines security agents lurk on every flight, and you should not be surprised to be thrown out an airplane window if you make a joke in bad taste about the pilot&#039;s flying skills.&lt;br /&gt;
&lt;br /&gt;
Subversion airlines thrives on the concept that &quot;photocopying is cheap&quot;.  You are encouraged to make photocopies of your ticket, or to photocopy your photo ID, and give copies of each to as many people as you can.  At checkin time at the gate, if more than one person arrives with a copy of the same ticket, they are ushered into the &quot;merging room&quot; and each person is given a brick.  The door is closed, something magical occurs, and the one person that emerges still able to walk is allowed to board the plane.&lt;br /&gt;
&lt;br /&gt;
Main competitor: Windows airlines with no Administrators allowed.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;tla airlines: &lt;/b&gt; Founded by one of those eccentric British noblemen, Lord Tom&#039;s airline is the utopian philosopher&#039;s airline. Chafed by the heavy-handed control of Subversion Airlines, tla airlines wants every passenger to be created equal.  As you approach the gate area in the terminal, you will find many philosophers occupying the gate area, extolling the virtues of tla airlines.  They compare tla airlines to reaching out and touching the heavens, leaving behind the bonds of a ground-based life, actually merging with the stars.  Oh, the gorgeous beauty of it all!  The things we will see!&lt;br /&gt;
&lt;br /&gt;
As you see people arriving from another flight, you observe that some of them have burn marks.  One of them comments that &quot;merging with the stars doesn&#039;t work.&quot;  Immediately, a dozen philosophers get in a fight with him, claiming that he simply doesn&#039;t understand what it means to merge with the stars, and that if he gets his inner being in the proper state first, he&#039;ll have a much better experience.&lt;br /&gt;
&lt;br /&gt;
As you board the tla airplane, you obvserve that the jetway is a mile long.  The airplane itself reminds you of something of a cross between a gothic cathedral and a level of Doom.  There are spectacular archways everywhere, sometimes where they don&#039;t really belong.  Each archway is supported by ornate curly braces which you don&#039;t normally see on airplanes, and frankly, you&#039;d rather not, because they look all pointy and confuse the kids.&lt;br /&gt;
&lt;br /&gt;
As you arrive as your destination terminal, you see it too is full of philosophers, most of them dining.&lt;br /&gt;
&lt;br /&gt;
Main competitor: VMS airlines.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Darcs Airlines: &lt;/b&gt; Unlike every other airline, this one uses physicists instead of engineers to design its airplanes.  One brilliant Darcs physicist has finally come up with The Theory of Everything, and as such, Darcs knows where you want to go before even you do.  Darcs airlines prides itself on customer service, and asks your preference for even the tiniest details about your trip.&lt;br /&gt;
&lt;br /&gt;
Each seat pocket features a copy of the Theory of Everything for your reading enjoyment, but nobody actually understands it.&lt;br /&gt;
&lt;br /&gt;
Occasionally, you will find that Darcs pilots get into angry conflicts with the control tower in mid-flight.  This results in the control tower revoking your permission to land.  Legend has it that one Darcs pilot of a plane with exceptionally large fuel tanks actually resolved his conflict with the tower and landed two weeks after taking off.  Experienced Darcs users board with several parachutes: one for themselves, and a few more for the newbies.&lt;br /&gt;
&lt;br /&gt;
The Darcs physicists claim that the Theory of Everything predicted the pilots would act this way, and that all pilots eventually act this way throughout the entire universe.  They toil day and night finding a way to adjust the gravitational constant of the universe, thereby reducing the anger factor of the pilots.&lt;br /&gt;
&lt;br /&gt;
Main competitor: OS/2 airlines.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;bzr airlines: &lt;/b&gt; Founded by a South African who had been injured by a curly brace on tla airlines, bzr airlines aims to be &quot;tla done right&quot;.  They have shortened the jetway, gotten rid of the curly braces, chased out the philosophers, and no longer have a vision of merging with the stars.  Many that were injured on tla airlines fly bzr airlines, and out of respect for tla airlines, bzr airlines will still honor tla tickets.&lt;br /&gt;
&lt;br /&gt;
bzr passengers consider themselves part of an exclusive club because each flight takes off from a launchpad.  They often can be seen standing in the terminal passing out bzr literature, trying to get passengers of other airlines to fly bzr, and can&#039;t understand how other airlines continue to exist while people keep walking past their airplanes.&lt;br /&gt;
&lt;br /&gt;
Main competitor: BeOS Airlines.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Bitkeeper Airlines: &lt;/b&gt; One of the world&#039;s faster airlines, Bitkeeper airlines occupied that obscure gate for rich people at the end of the terminal for many years.  Tickets on Bitkeeper Airlines were rumored to cost thousands of dollars, and were rare and jealously guarded.  Then for awhile, Bitkeeper Airlines started giving away tickets for free, though they also kept around the expensive tickets for those with discriminating tastes.  Free tickets were made widely available, but the 3-point type on the back of tickets said that you were never allowed to think about another airline before, after, or during your flight, and some people claimed they actually saw the small print morphing right before their eyes.&lt;br /&gt;
&lt;br /&gt;
Bitkeeper flights often featured arguments over whether people were harboring secret thoughts of other airlines.  If you were caught thinking about another airline, you were expected to scream vigorously while being thrown out the escape hatch without a parachute.  All of this commotion tarnished the rarified air that the rich people paid to experience, so one day it was decided that there would be a Great Purge, because obviously all free ticket holders had harbored lustful thoughts of other airlines, so they were all thrown off the airplanes simultaneously.  Today, people aren&#039;t exactly sure where the Bitkeeper gate is, but everyone suspects it still lurks somewhere.&lt;br /&gt;
&lt;br /&gt;
Main competitor: SCO Airlines.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Mercurial Airlines: &lt;/b&gt; The &quot;there&#039;s one right way to do it&quot; airline, Mercurial is a sterile, agile, and shiny airline.  Every Mercurial airplane looks identical to every other one, shiny and clean.  You could swear that all the passengers look alike too, and as you approach the gate, it seems like you too look like everyone else.  Mercurial passengers tend to be a happy bunch, who can&#039;t comprehend anybody that flies Git Airlines.  Specks of dirt and dust confuse the pilots, so it is best to make sure you have showered before boarding.  It is rumored that, through bolting on more engines, some Mercurial airlines can fly to as many places as Git airlines can, but most Mercurial passengers are content to not worry about that.&lt;br /&gt;
&lt;br /&gt;
Main competitor: Python Airlines.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Git Airlines: &lt;/b&gt; The &quot;there&#039;s more than one way to do it&quot; airline, Git flies the world&#039;s largest and fastest airplanes.  Git Airlines was founded by some priests who were flying for free on Bitkeeper Airlines and survived the fall after the Great Purge.  Git airplanes start as spartan, empty cabins, with no carpeting, chairs, or piloting controls.  At the departure gate, each passenger is handed a bag containing 173 standard airplane components, accompanied by a 4x5&quot; sheet of information on the theory of flight, written in 1950.  Once onboard, the passengers use these components to finish out the airplane for flight: installing chairs, rudder controls, etc.  Every flight results in a plane assembled in a different way, and passengers on each flight believe they are flying the world&#039;s best airplane.  Arguments in the terminal after a flight are common, as passengers from different flights debate the merits of their particular design.&lt;br /&gt;
&lt;br /&gt;
Despite all this, Git planes turn out to be safe, and Git passengers believe they get to their destinations in half the time it takes any other passengers, though sometimes they secretly wonder if the Mercurial flight got there faster.  Occasionally, passengers on Git airlines build an airplane that appears to go into a tailspin.  When that happens, they simply assemble a tool that lets them go back in time and change history so that it doesn&#039;t crash, although it is rumored that if you are a member of the public watching this happen from the ground, it will lead to seizures.&lt;br /&gt;
&lt;br /&gt;
Git airlines takes special pride in the one piece that passengers don&#039;t have to assemble: the plumbing.  Every Git lavatory is equipped with state-of-the-art never-fail plumbing, and the best porcelain washroom fixtures money can buy.  None of these cheap plastic toilets like you get on every other airline.  Here, we have fine porcelain fixtures.&lt;br /&gt;
&lt;br /&gt;
During a flight, after passengers use the lavatory, they frequently get into arguments with each other about which style of porcelain toilet is the best.  These arguments are only resolved by the Zen-like Git Priests, who insist that only inferior passengers need to use a toilet while in the air.&lt;br /&gt;
&lt;br /&gt;
Main competition: Perl Airlines. 
    </content:encoded>

    <pubDate>Thu, 06 Mar 2008 07:44:06 -0600</pubDate>
    <guid isPermaLink="false">http://changelog.complete.org/posts/698-guid.html</guid>
    
</item>
<item>
    <title>Git Feature Branches</title>
    <link>http://changelog.complete.org/posts/697-Git-Feature-Branches.html</link>
            <category>Programming</category>
    
    <comments>http://changelog.complete.org/posts/697-Git-Feature-Branches.html#comments</comments>
    <wfw:comment>http://changelog.complete.org/wfwcomment.php?cid=697</wfw:comment>

    <wfw:commentRss>http://changelog.complete.org/rss.php?version=2.0&amp;type=comments&amp;cid=697</wfw:commentRss>
    

    <author>nospam@example.com (John Goerzen)</author>
    <content:encoded>
    I&#039;m really liking this.&lt;br /&gt;
&lt;br /&gt;
So I &lt;a href=&quot;http://rubyforge.org/forum/forum.php?thread_id=22975&amp;forum_id=7504&quot;&gt;set up&lt;/a&gt; some Git feature branches to help get &lt;a href=&quot;http://www.redmine.org/&quot;&gt;Redmine&lt;/a&gt; patches from their BTS into their SVN trunk faster.  (I don&#039;t know why, but it seems to take a *very* long time for that to happen.)&lt;br /&gt;
&lt;br /&gt;
Each BTS patch gets a Git feature branch.  My &lt;a href=&quot;http://git.complete.org/branches/redmine-integration/&quot;&gt;Git repo&lt;/a&gt; for this project has about 21 branches in it.&lt;br /&gt;
&lt;br /&gt;
So, I pull upstream into a branch called, well, upstream.&lt;br /&gt;
&lt;br /&gt;
Each feature branch is created off upstream.&lt;br /&gt;
&lt;br /&gt;
Then, the master branch merges all the feature branches in.  I wrote a simple git-merge-fb shell script that just runs git-merge for each feature branch.  Very simple.  I expect to have a git-pull-fb script of some sort that merges upstream into each feature branch when I update against upstream.  It could also run a diff at the end to see if there is any difference remaining, and if not, delete the branch.&lt;br /&gt;
&lt;br /&gt;
It&#039;s trivial to give an updated diff to upstream for any given patch: git diff feature-blah..upstream will do it.&lt;br /&gt;
&lt;br /&gt;
I only wish gitweb had a way to do that so I could just hand out a URL that always corresponds to the latest diff against upstream for a given feature.  Now that would rock. 
    </content:encoded>

    <pubDate>Tue, 04 Mar 2008 21:57:20 -0600</pubDate>
    <guid isPermaLink="false">http://changelog.complete.org/posts/697-guid.html</guid>
    <category>git</category>
<category>vcs</category>

</item>
<item>
    <title>Thoughts on Redmine</title>
    <link>http://changelog.complete.org/posts/696-Thoughts-on-Redmine.html</link>
            <category>Programming</category>
    
    <comments>http://changelog.complete.org/posts/696-Thoughts-on-Redmine.html#comments</comments>
    <wfw:comment>http://changelog.complete.org/wfwcomment.php?cid=696</wfw:comment>

    <wfw:commentRss>http://changelog.complete.org/rss.php?version=2.0&amp;type=comments&amp;cid=696</wfw:commentRss>
    

    <author>nospam@example.com (John Goerzen)</author>
    <content:encoded>
    A few days ago, I &lt;a href=&quot;http://changelog.complete.org/posts/694-Trac-Git.html&quot;&gt;discussed Trac and Redmine&lt;/a&gt;.  Redmine is a project management tool, similar to Trac, with built-in download tools, bug tracking, etc.&lt;br /&gt;
&lt;br /&gt;
Redmine has a lot of nice features.  Chief among them is better integration between multiple projects, so I don&#039;t have to go to 17 separate pages to see the open bugs on my projects.&lt;br /&gt;
&lt;br /&gt;
But I&#039;m worried about the Redmine community.  It appears to live in an insular Ruby world, without much participation outside.  I &lt;a href=&quot;http://rubyforge.org/forum/forum.php?forum_id=7504&quot;&gt;wrote about some of those concerns&lt;/a&gt; in their forums.  I&#039;ve also submitted bugs to Redmine, some with patches.&lt;br /&gt;
&lt;br /&gt;
Also, it&#039;s concerning that, although Redmine includes a very nice forum module, the Redmine forums are still on RubyForge.  Also, there are many bugs in the Redmine BTS that have patches but little, if any, comments from the Redmine people that have commit access.&lt;br /&gt;
&lt;br /&gt;
It could just be that Redmine is a fairly new project and just needs some time to get on its feet more.  It&#039;s been around since July, 2006, which isn&#039;t all that long on the one hand... or quite awhile, depending on how you look at it.&lt;br /&gt;
&lt;br /&gt;
The &lt;a href=&quot;http://www.redmine.org/issues/show/259&quot;&gt;git support patch&lt;/a&gt; for Redmine looks very nice.  However, after a month, it still hasn&#039;t been replied and there&#039;s no indication why.  Which also is troubling.&lt;br /&gt;
&lt;br /&gt;
So I think I&#039;ll sit with Trac for a little while until I get a better feel of how Redmine is progressing. 
    </content:encoded>

    <pubDate>Mon, 03 Mar 2008 05:05:00 -0600</pubDate>
    <guid isPermaLink="false">http://changelog.complete.org/posts/696-guid.html</guid>
    <category>redmine</category>
<category>trac</category>

</item>
<item>
    <title>hg.complete.org is no more</title>
    <link>http://changelog.complete.org/posts/695-hg.complete.org-is-no-more.html</link>
            <category>Programming</category>
    
    <comments>http://changelog.complete.org/posts/695-hg.complete.org-is-no-more.html#comments</comments>
    <wfw:comment>http://changelog.complete.org/wfwcomment.php?cid=695</wfw:comment>

    <wfw:commentRss>http://changelog.complete.org/rss.php?version=2.0&amp;type=comments&amp;cid=695</wfw:commentRss>
    

    <author>nospam@example.com (John Goerzen)</author>
    <content:encoded>
    As of today, hg.complete.org is no more.  I have removed mercurial and hgwebdir from my server, removed hg from my DNS zone, and converted everything that was in Mercurial over to Git.  (Except for hg-buildpackage, which I have orphaned)  So there is now stuff at &lt;a href=&quot;http://git.complete.org/&quot;&gt;git.complete.org&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I still have a ton of &lt;a href=&quot;http://darcs.complete.org/&quot;&gt;Darcs repos&lt;/a&gt; to convert, which will take more time.&lt;br /&gt;
&lt;br /&gt;
Also I have heard a lot of people say that the GitPlugin for Trac is not very good.  I have two Trac instances running it: one for &lt;a href=&quot;http://software.complete.org/commithooks&quot;&gt;commithooks&lt;/a&gt; and another for &lt;a href=&quot;http://software.complete.org/ListLike&quot;&gt;ListLike&lt;/a&gt;.  Both seem OK so far, but I haven&#039;t pushed them very much yet. 
    </content:encoded>

    <pubDate>Fri, 29 Feb 2008 06:41:00 -0600</pubDate>
    <guid isPermaLink="false">http://changelog.complete.org/posts/695-guid.html</guid>
    <category>darcs</category>
<category>dvcs</category>
<category>git</category>
<category>mercurial</category>
<category>vcs</category>

</item>
<item>
    <title>Trac &amp; Git</title>
    <link>http://changelog.complete.org/posts/694-Trac-Git.html</link>
            <category>Programming</category>
    
    <comments>http://changelog.complete.org/posts/694-Trac-Git.html#comments</comments>
    <wfw:comment>http://changelog.complete.org/wfwcomment.php?cid=694</wfw:comment>

    <wfw:commentRss>http://changelog.complete.org/rss.php?version=2.0&amp;type=comments&amp;cid=694</wfw:commentRss>
    

    <author>nospam@example.com (John Goerzen)</author>
    <content:encoded>
    For quite some time now, I&#039;ve been running Trac over at &lt;a href=&quot;http://software.complete.org/&quot;&gt;software.complete.org&lt;/a&gt;.  Most of my free software projects -- well, the ones where I actually go to the effort to make formal releases -- have a Trac instance.  This Trac instance provides a wiki, bug tracker, downloads area, timeline (with RSS feeds), and VCS integration.&lt;br /&gt;
&lt;br /&gt;
Trac is a nice program, but one thing has bugged me about it all this time:&lt;br /&gt;
&lt;br /&gt;
Every trac instance is its own island.&lt;br /&gt;
&lt;br /&gt;
I have 17 trac instances out there for my projects.  To see what bugs are out there &lt;b&gt;on my own server&lt;/b&gt;, I have to check 17 websites (or 17 RSS feeds or whatnot).  Publishing a new program is not a lightweight process.&lt;br /&gt;
&lt;br /&gt;
So today I started poking around looking for something better.  I really like Trac&#039;s way of integrating the wiki with the BTS and the commits; wiki markup can refer to a bug or a changeset, and bugs can use wiki markup too.&lt;br /&gt;
&lt;br /&gt;
I looked at &lt;a href=&quot;http://www.redmine.org/&quot;&gt;Redmine&lt;/a&gt;, &lt;a href=&quot;http://www.mantisbt.org&quot;&gt;Mantis&lt;/a&gt;, and &lt;a href=&quot;http://roundup.sourceforge.net/&quot;&gt;Roundup&lt;/a&gt;, and I also have experience with RT.&lt;br /&gt;
&lt;br /&gt;
Of these, Redmine looks the most interesting.  Multiple projects support, per project wiki and forums, gantt charting even, and support for SVN, CVS, Mercurial, Bazaar, and Darcs -- with Git support out there as patches to their development tree already too.  Oh, and I saw references to a Trac importer as well.  One thing that makes me nervous, though, is that they have no links to sites that use Redmine (except one in the news section), and Google isn&#039;t turning up users either.  Does nobody use this thing?&lt;br /&gt;
&lt;br /&gt;
What else should I be looking at?&lt;br /&gt;
&lt;br /&gt;
Over on the Git side, I&#039;m still liking Git.  I have now migrated several Mercurial projects over to git (see &lt;a href=&quot;http://git.complete.org/&quot;&gt;git.complete.org&lt;/a&gt;).  I am also playing with Darcs to git migration using darcs2git, which also is going well.  Sometimes gitk shows a nicer representation of a Git repo converted from Darcs than I was able to get from Darcs.&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Thu, 28 Feb 2008 21:29:40 -0600</pubDate>
    <guid isPermaLink="false">http://changelog.complete.org/posts/694-guid.html</guid>
    <category>git</category>
<category>trac</category>
<category>vcs</category>

</item>
<item>
    <title>Experimenting with Git</title>
    <link>http://changelog.complete.org/posts/691-Experimenting-with-Git.html</link>
            <category>Programming</category>
    
    <comments>http://changelog.complete.org/posts/691-Experimenting-with-Git.html#comments</comments>
    <wfw:comment>http://changelog.complete.org/wfwcomment.php?cid=691</wfw:comment>

    <wfw:commentRss>http://changelog.complete.org/rss.php?version=2.0&amp;type=comments&amp;cid=691</wfw:commentRss>
    

    <author>nospam@example.com (John Goerzen)</author>
    <content:encoded>
    I&#039;ve been &lt;a href=&quot;http://changelog.complete.org/posts/690-Git-looks-really-nice,-until.....html&quot;&gt;writing&lt;/a&gt; about Git &lt;a href=&quot;http://changelog.complete.org/posts/689-Revisiting-Git-and-Mercurial.html&quot;&gt;a bit&lt;/a&gt; lately.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve decided to switch some of my Debian work over to it to start with, as well as some of my other projects.&lt;br /&gt;
&lt;br /&gt;
Although I was thoroughly frustrated with Git a year ago, now I am quite pleased with it.   What&#039;s different?  The documentation is a LOT better.  So far I have only found one manpage (git-show) that omits lots of its options.  The system is friendlier, keystroke-happier, and powerful.&lt;br /&gt;
&lt;br /&gt;
Compared to Mercurial, I&#039;ve found some nice things:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;In-directory branching.&lt;/b&gt;  I didn&#039;t expect to care about this, since both git and hg permit lightweight clones.  But it turns out to be so easy to use that it is great.  Especially since I don&#039;t have to setup multiple branch repos on the server.  I really like this.  Note that &quot;hg branch&quot; is not the same as a git branch, and see the discussion on the hg lists about renaming that before 1.0.0 for why.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Flexibility in getting things around.&lt;/b&gt;  Plain HTTP works fine (no static-http:// hack).  ssh.  git daemon.  rsync.  Very slick.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Performance.&lt;/b&gt;  Surprisingly, git actually feels faster than Mercurial, especially when pushing or pulling.  I didn&#039;t expect that.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Tags.&lt;/b&gt;  They seem smarter in git.  No more merging of .hgtags all the time.  Also I like that I can attach a message to a tag and sign it.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;All that power.&lt;/b&gt;  There is a *lot* that Git can do.  I should have been taking notes about it all.&lt;br /&gt;
&lt;br /&gt;
My main complaint is still that Git doesn&#039;t have something as nice as &quot;darcs send&quot;.  Mercurial doesn&#039;t either, but it&#039;s a bit closer.  Git has moved closer, but still has room to improve on that.&lt;br /&gt;
&lt;br /&gt;
So I have set up &lt;a href=&quot;http://git.complete.org/&quot;&gt;git.complete.org&lt;/a&gt; and am starting to publish my Debian stuff on Debian&#039;s alioth server as well.&lt;br /&gt;
&lt;br /&gt;
Also, hg-fast-export in the &lt;a href=&quot;http://repo.or.cz/w/fast-export.git&quot;&gt;fast-export&lt;/a&gt; project is *awesome*.  Branch-aware and everything.  It made a perfect Git version of my Mercurial work. 
    </content:encoded>

    <pubDate>Tue, 26 Feb 2008 17:24:00 -0600</pubDate>
    <guid isPermaLink="false">http://changelog.complete.org/posts/691-guid.html</guid>
    <category>git</category>
<category>vcs</category>

</item>
<item>
    <title>Git looks really nice, until....</title>
    <link>http://changelog.complete.org/posts/690-Git-looks-really-nice,-until.....html</link>
            <category>Programming</category>
    
    <comments>http://changelog.complete.org/posts/690-Git-looks-really-nice,-until.....html#comments</comments>
    <wfw:comment>http://changelog.complete.org/wfwcomment.php?cid=690</wfw:comment>

    <wfw:commentRss>http://changelog.complete.org/rss.php?version=2.0&amp;type=comments&amp;cid=690</wfw:commentRss>
    

    <author>nospam@example.com (John Goerzen)</author>
    <content:encoded>
    So I have been learning about Git this weekend.  It has some really nice-looking features for sure -- some things Mercurial doesn&#039;t have.&lt;br /&gt;
&lt;br /&gt;
I was getting interested in switching, until I found what I consider a big problem.&lt;br /&gt;
&lt;br /&gt;
Many projects that use git require you to submit things using git-format-patch instead of pushing/pulling from you.  They don&#039;t want your merge history.&lt;br /&gt;
&lt;br /&gt;
git-format-patch, though, doesn&#039;t preserve SHA1s, nor does it preserve merges.&lt;br /&gt;
&lt;br /&gt;
Now, say we started from a common base where line 10 of file X said &quot;hi&quot;, I locally changed it to &quot;foo&quot;, upstream changed it to &quot;bar&quot;, and at merge time I decide that we were both wrong and change it to &quot;baz&quot;.  I don&#039;t want to lose the fact that I once had it at &quot;foo&quot;, in case it turns out later that really was the right decision.&lt;br /&gt;
&lt;br /&gt;
When we track upstream changes, and submit with git format-patch, the canonical way to merge upstream appears to be:&lt;br /&gt;
&lt;br /&gt;
git fetch; get rebase origin/master&lt;br /&gt;
&lt;br /&gt;
Now, problem with that is it loses your original pre-conflict code on a case like this.&lt;br /&gt;
&lt;br /&gt;
There appears to be no clean way around that whatsoever.  I tried a separate &quot;submission&quot; branch, that rebases a local development-with-merge branch, but it requires a ton of git rebase --skip during the rebase process.&lt;br /&gt;
&lt;br /&gt;
Thoughts? 
    </content:encoded>

    <pubDate>Sun, 24 Feb 2008 18:57:08 -0600</pubDate>
    <guid isPermaLink="false">http://changelog.complete.org/posts/690-guid.html</guid>
    
</item>
<item>
    <title>Two new bashisms</title>
    <link>http://changelog.complete.org/posts/688-Two-new-bashisms.html</link>
            <category>Programming</category>
    
    <comments>http://changelog.complete.org/posts/688-Two-new-bashisms.html#comments</comments>
    <wfw:comment>http://changelog.complete.org/wfwcomment.php?cid=688</wfw:comment>

    <wfw:commentRss>http://changelog.complete.org/rss.php?version=2.0&amp;type=comments&amp;cid=688</wfw:commentRss>
    

    <author>nospam@example.com (John Goerzen)</author>
    <content:encoded>
    I learned about two bash features I hadn&#039;t known about today.&lt;br /&gt;
&lt;br /&gt;
From a colleague, GLOBIGNORE.  A colon-separated glob of files to ignore when expanding globs.  Helpful behavior when set to &quot;*~&quot; and used with grep.&lt;br /&gt;
&lt;br /&gt;
From the &lt;a href=&quot;http://git.or.cz/gitwiki/GitFaq#head-90fa13ebe170116f1586156e73b549cc2135b784&quot;&gt;Git FAQ&lt;/a&gt;, in a section explaining that it breaks the Git build process, CDPATH.  A colon-separated search path to use when you type cd.  Possibly useful to refer to subdirs of ~ or other common areas.  Seems like it&#039;s prone to break a ton of scripts if exported though.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Fri, 22 Feb 2008 18:22:04 -0600</pubDate>
    <guid isPermaLink="false">http://changelog.complete.org/posts/688-guid.html</guid>
    
</item>
<item>
    <title>Haskell Fun</title>
    <link>http://changelog.complete.org/posts/640-Haskell-Fun.html</link>
            <category>Programming</category>
    
    <comments>http://changelog.complete.org/posts/640-Haskell-Fun.html#comments</comments>
    <wfw:comment>http://changelog.complete.org/wfwcomment.php?cid=640</wfw:comment>

    <wfw:commentRss>http://changelog.complete.org/rss.php?version=2.0&amp;type=comments&amp;cid=640</wfw:commentRss>
    

    <author>nospam@example.com (John Goerzen)</author>
    <content:encoded>
    Bryan O&#039;Sullivan &lt;a href=&quot;http://www.realworldhaskell.org/blog/2007/08/03/a-brief-haskell-at-oscon-trip-report/&quot;&gt;noted over at the Real World Haskell blog&lt;/a&gt; that Haskell made quite the impact at OSCon.  And I can attest to Simon Peyton-Jones having trouble leaving the building because of all the people that wanted to talk to him about Haskell.  It was interesting to think about &quot;why now&quot; for Haskell&#039;s popularity.  Bryan&#039;s post has links to the video of Simon&#039;s talks, which are great.  (Sample quote: &quot;Oh look, a whiteboard has appeared as if by magic!  What joy!&quot;)&lt;br /&gt;
&lt;br /&gt;
I followed Bryan&#039;s link to the Haskell/OSCon-related blog posts at Technorati.  Here&#039;s an &lt;a href=&quot;http://www.oreillynet.com/onlamp/blog/2007/07/a_taste_of_haskell_a_taste_of.html&quot;&gt;interesting one&lt;/a&gt; by chromatic, who gave some Perl talks at OSCon.  Favorite quote:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;I sat next to Nat Torkington at the tutorial. He kept rubbing his temples. At one point I leaned over and said, “The interesting thing about Haskell is that its functions only take one argument.” He turned green.&lt;br /&gt;
&lt;br /&gt;
In all seriousness, well-factored Haskell code resembles well-factored Smalltalk code: if you have functions (or methods) longer than a handful of lines, you’re probably doing too much. Lower level languages such as C rarely give the opportunity for composition and abstraction that you can get out of functional languages. The presence of pure functions–functions which never change global state and which return the same output for the same input–is also immensely important.&lt;br /&gt;
&lt;br /&gt;
It’s actually the combination of the two features which give these languages such power. When Haskell forces you to mark impure functions explicitly, it gives you tools to isolate behavior which can change global state in the smallest possible scopes, and prevents you from composing impure and pure code together accidentally. When Haskell lets you compose functions into larger functions, not only does it help you write code more concisely, but it provides well-defined units of behavior which work along well-defined and isolated boundaries.&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
So what is this business about Haskell functions taking only one argument?  Let&#039;s look at a quick example.  Say I wanted to write a function to multiply two numbers.  I&#039;d write:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;mul a b = a * b&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
I could give the type of this function like this:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;mul :: Int -&gt; Int -&gt; Int&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
You could read that as &quot;mul takes two Ints and returns an Int&quot;.  And you can think of it this way.  But you could also write the type this way:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;mul :: Int -&gt; (Int -&gt; Int)&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
It means the exact same thing and is valid to Haskell.  To read it, you&#039;d say &quot;mul takes an Int and returns a function that takes an Int and returns an Int.&quot;  And truly this is what Haskell functions that take multiple parameters are doing.  Now, I can say:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;fifteen = mul 3 5&lt;br /&gt;
mulByThree = mul 3&lt;br /&gt;
fifteen&#039; = mulByThree 5&lt;br /&gt;
fifteen&#039;&#039; = (mul 3) 5&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
mulByThree has type &lt;code&gt;Int -&gt; Int&lt;/code&gt;; it&#039;s a function that we got by simply not applying &quot;mul&quot; to all its arguments.  fifteen&#039;&#039; illustrates what is going on internally when you write &quot;mul 3 5&quot;.  It turns out that being able to call a function with multiple arguments is just some syntactic sugar to Haskell.&lt;br /&gt;
&lt;br /&gt;
This is a tremendously useful feature.  For instance:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;filter (&gt;= 10) [1..20]&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
I&#039;ve applied &gt;= to only one argument here.  That&#039;s fine; it returns a function that&#039;s exactly what filter wants.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been watching the video of Simon&#039;s Taste of Haskell talk.  I could *hear* when the audience grasped the utility of this because there was a collective &quot;Oooooo!&quot; from them.&lt;br /&gt;
&lt;br /&gt;
By the way, Haskell has type inference, so I didn&#039;t have to give types at all.  Oh, and you can also refer to the function itself by not giving any arguments.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;mul = (*)&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
This is one small reason I like to say &quot;Haskell manipulates functions with the same ease that Perl manipulates strings.&quot;  Mind-bending, isn&#039;t it? 
    </content:encoded>

    <pubDate>Fri, 03 Aug 2007 03:52:04 -0500</pubDate>
    <guid isPermaLink="false">http://changelog.complete.org/posts/640-guid.html</guid>
    <category>oscon haskell oscon2007 oscon07</category>

</item>
<item>
    <title>Mozilla switching to Mercurial</title>
    <link>http://changelog.complete.org/posts/600-Mozilla-switching-to-Mercurial.html</link>
            <category>Programming</category>
    
    <comments>http://changelog.complete.org/posts/600-Mozilla-switching-to-Mercurial.html#comments</comments>
    <wfw:comment>http://changelog.complete.org/wfwcomment.php?cid=600</wfw:comment>

    <wfw:commentRss>http://changelog.complete.org/rss.php?version=2.0&amp;type=comments&amp;cid=600</wfw:commentRss>
    

    <author>nospam@example.com (John Goerzen)</author>
    <content:encoded>
    There was some news yesterday: &lt;a href=&quot;http://weblogs.mozillazine.org/preed/2007/04/version_control_system_shootou_1.html&quot;&gt;Mozilla is adopting Mercurial&lt;/a&gt;.  The article has some insight into their reasons for picking Mercurial as well.  (The comments they make about the CVS conversion process perhaps reference tailor, convert-repo, or cvs2hg; Mercurial proper doesn&#039;t have a built-in CVS importer) 
    </content:encoded>

    <pubDate>Fri, 13 Apr 2007 18:36:00 -0500</pubDate>
    <guid isPermaLink="false">http://changelog.complete.org/posts/600-guid.html</guid>
    
</item>
<item>
    <title>Some more git, mercurial, and darcs</title>
    <link>http://changelog.complete.org/posts/596-Some-more-git,-mercurial,-and-darcs.html</link>
            <category>Programming</category>
    
    <comments>http://changelog.complete.org/posts/596-Some-more-git,-mercurial,-and-darcs.html#comments</comments>
    <wfw:comment>http://changelog.complete.org/wfwcomment.php?cid=596</wfw:comment>

    <wfw:commentRss>http://changelog.complete.org/rss.php?version=2.0&amp;type=comments&amp;cid=596</wfw:commentRss>
    

    <author>nospam@example.com (John Goerzen)</author>
    <content:encoded>
    Ted Ts&#039;o had an &lt;a href=&quot;http://tytso.livejournal.com/29467.html&quot;&gt;interesting post&lt;/a&gt; about git recently.  He has a lot of good thoughts on the subject.  He comments that he wound up using git because it&#039;s so Unixy (with its small commands to do things), that he sees the git community developing innovations faster than Mercurial, and that they are working to improve the documentation and user interface problems.&lt;br /&gt;
&lt;br /&gt;
The being so Unixy is a double-edged sword.  On the one hand, it can make it easy to write shell scripts to extend Git.  That itself can be a double-edged sword (think filename quoting and the like).  But one doesn&#039;t have to use the shell.  The other downside is that being Unixy makes it hard to run on platforms that aren&#039;t, such as Windows.  So if one is working on Unix-only software (X, the kernel, e2fsprogs, etc.), there&#039;s no need to care about it.  But if you&#039;re a person like me, who has Windows users using my software, or a large organization like Mozilla, it&#039;s maybe a showstopper.  Of course, workarounds exist (cygwin, git-cvsserver), but none of them are particularly nice.&lt;br /&gt;
&lt;br /&gt;
I think that both Git and Mercurial are working to address their shortcomings.  I&#039;ve chosen hg for now because it does what I need now.  And because there are very nice tools to convert hg to git, and vice-versa.  So if Ted&#039;s right, and a year from now git is easier to use, better documented, more featureful, and runs well on Windows, it won&#039;t be that hard to switch over and preserve history.  Ted&#039;s the sort of person that usually is right, so maybe I should starting looking at hg2git right now &lt;grin&gt;&lt;br /&gt;
&lt;br /&gt;
So following up on my bzr post, here are the things that Mercurial is great at right now:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Performance.  Approximately even with git, occasionally faster.  Nobody else can compete with these two right now.&lt;/li&gt;&lt;li&gt;Simplicity.  It&#039;s almost as easy to get started as with darcs, and with recent patches, will be even closer in the future.&lt;/li&gt;&lt;li&gt;Lots of ways to interact.  You can send hg bundles, which preserve all metadata (parents, hash, authors, etc), or you can send git-format email patches, or you can push and pull between repos.  The email tools will shortly be able to automatically detect what patches to send. Your choice.  git doesn&#039;t seem to support lossless emailing of bundles like this, and bzr doesn&#039;t make emailing of anything easy by default.&lt;/li&gt;&lt;li&gt;Merging.  hg seems to be able to automatically resolve more merge conflicts than anything else, and when it can&#039;t automatically resolve them, has a nicely configurable system to let you use your choice of tool to manually resolve them.&lt;/li&gt;&lt;li&gt;Community.  The Mercurial community is open and inviting, and open to new/different ideas.  It seems similar to Darcs in that respect, and somewhat dissimilar to git.&lt;/li&gt;&lt;li&gt;Rebase does not trash history like it does (barring undocumented manual intervention) in git.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
I&#039;ve &lt;a href=&quot; http://changelog.complete.org/posts/528-Whose-Distributed-VCS-Is-The-Most-Distributed.html&quot;&gt;written before&lt;/a&gt; about Darcs, so I won&#039;t duplicate that here. 
    </content:encoded>

    <pubDate>Mon, 26 Mar 2007 06:14:00 -0500</pubDate>
    <guid isPermaLink="false">http://changelog.complete.org/posts/596-guid.html</guid>
    
</item>
<item>
    <title>bzr, again</title>
    <link>http://changelog.complete.org/posts/595-bzr,-again.html</link>
            <category>Programming</category>
    
    <comments>http://changelog.complete.org/posts/595-bzr,-again.html#comments</comments>
    <wfw:comment>http://changelog.complete.org/wfwcomment.php?cid=595</wfw:comment>

    <wfw:commentRss>http://changelog.complete.org/rss.php?version=2.0&amp;type=comments&amp;cid=595</wfw:commentRss>
    

    <author>nospam@example.com (John Goerzen)</author>
    <content:encoded>
    I&#039;ve talked a lot lately about different VCSs.&lt;br /&gt;
&lt;br /&gt;
I got some interesting comments in reply to &lt;a href=&quot;http://changelog.complete.org/posts/594-More-on-Git,-Mercurial,-and-Bzr.html&quot;&gt;my most recent post&lt;/a&gt;.  One person took issue with my complaint that nobody really understood how to specify a revision to git format-patch, and proceeded to issue an incorrect suggestion.  And a couple of people complained about my comments about bzr, which generally came down to the released version of bzr didn&#039;t have anything compelling and also didn&#039;t support tags.&lt;br /&gt;
&lt;br /&gt;
So I went into #bzr, asked them what bzr has that git, Mercurial, and darcs don&#039;t.  And gave bzr the benefit of the doubt that 0.15 will be out soon and will be stable.  What I got back were these general items:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Renaming of directories (not in  hg, git)&lt;/li&gt;&lt;li&gt;2-way sync with Subversion (not in hg, darcs)&lt;/li&gt;&lt;li&gt;Checkouts (not in any others by default)&lt;/li&gt;&lt;li&gt;No server-side push requirement&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
Let&#039;s look at these in more detail.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Renaming of directories&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
All of them can rename files and (excepting git) completely accurately track back the file&#039;s history.  But consider this: if person A commits a change to branch A that adds a file, and person B then renames the directory that the file is in on his branch, will a merge cause person A&#039;s file to appear in the new directory name?  In darcs and bzr, yes.  In Mercurial and git, no.&lt;br /&gt;
&lt;br /&gt;
So yes, this is a nice thing.  But I have never actually had this situation crop up in practice, and even if it did, could be trivially remedied.  I would say that for me, I don&#039;t really care.&lt;br /&gt;
&lt;br /&gt;
[&lt;b&gt;Update&lt;/b&gt;: Current stable releases of Mercurial can do this too.  I&#039;m not quite sure how, but it does work.  So git is the only one that can&#039;t do that.]&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2. 2-way sync with Subversion&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This is a really nice feature and is present in both git and bzr.  I haven&#039;t tested it either place, but if it works as advertised -- and properly supports tracking multiple related svn branches and merges -- would be slick.  That was enough to make me consider using git, but in retrospect, I so rarely interact with people using svn that it is not that big a deal to me.&lt;br /&gt;
&lt;br /&gt;
Still, for those that have to work with svn users, this feature in bzr and git could be a big one.&lt;br /&gt;
&lt;br /&gt;
Better yet would be to get all those svn holdouts over to DVCS.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3. Checkouts&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
A bzr checkout is basically a way to make local commits be pushed to the remote repo immediately, as with svn.  This is of no utility to me, though I can see some may have a use for it.  But it can be done with hg hooks and probably approximated with scripting in others.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4. No server-side process necessary for pushing repos&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
bzr has built-in support to push to a server that has sftp only, and doesn&#039;t require a copy of itself on the server.  While I believe that none of the other three have that, it is possible to rsync (and probably ftp) darcs and Mercurial repos to a server in a safe fashion by moving repo files in a defined order.  Probably also possible with git.  All four can pull repos using nothing but regular HTTP.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What bzr still doesn&#039;t have&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Integrated patch emailing.&lt;/b&gt; The big thing is that it has no built-in emailing of patches support.  darcs is extremely strong in this area, followed by hg, and git is probably third.  &quot;darcs send&quot; is all it takes to have darcs look at the remote repo, figure out what you have that they don&#039;t, and e-mail a bundle of changesets to them.  I posted an &lt;a href=&quot;http://hg.complete.org/hgsend&quot;&gt;extension&lt;/a&gt; and later a &lt;a href=&quot;http://thread.gmane.org/gmane.comp.version-control.mercurial.devel/11447&quot;&gt;patchset&lt;/a&gt; that does all this for Mercurial except for automatically figuring out what default email address to do (that&#039;ll come in a few days, I think).  One feature Mercurial has had for awhile that Darcs hasn&#039;t is sending multiple textual diffs as a thread, with one message per changeset.  bzr doesn&#039;t have any support for emailing patches yet, which is disappointing.  Because of the strong support for this in darcs and Mercurial, people running those systems feel less of a need to publish their repos.&lt;br /&gt;
&lt;br /&gt;
[&lt;b&gt;Update&lt;/b&gt;: There is a &lt;a href=&quot;http://bazaar-vcs.org/UsingSubmitByMail&quot;&gt;plugin&lt;/a&gt; for bzr that seems to address some of this.  I haven&#039;t tested it, and it&#039;s not in bzr core (so doesn&#039;t quite meet my very friendly for a newbie requirement), but this does exist, though apparently not as advanced as Mercurial]&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Performance.&lt;/b&gt;  Supposedly 0.15 is supposed to be better on this, but even if bzr achieves the claimed doubling of performance, most benchmarks I have seen would rate it as still being significantly behind git and Mercurial, though it may overtake darcs in some tests.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Extensive documentation.&lt;/b&gt;  I would say that bzr&#039;s docs are better in some ways than git&#039;s (its tutorials especially), but lack depth.  If you want to know some detail about how the repository works on-disk, it&#039;s not really documented.  Darcs still has David&#039;s excellent manual, and Mercurial has the hg book which is still great as well.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Merging not as advanced.&lt;/b&gt;  darcs is pretty obviously way on top here, but of the others, Mercurial does a pretty good job with its automatic handling of renames and automatic resolving of different branches that commit the same change (even if that same change is a rename, or an add of the same content).  bzr can&#039;t resolve as much automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Summary&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Well, I&#039;ll say that bzr still doesn&#039;t look compelling enough for my use cases to use, and the lack of an easy-for-a-newbie-to-use automated email submission feature is a pretty big disappointment.  Though I did appreciate the time those on #bzr spent with me, and if I needed to sync with svn users frequently, I&#039;d probably choose bzr over git.&lt;br /&gt;
&lt;br /&gt;
For now, I&#039;m happy with sticking with darcs for my code and hg for my Debian work.&lt;br /&gt;
&lt;br /&gt;
But all four communities are aggressively working on their weaknesses, and this landscape may look very different in a year. 
    </content:encoded>

    <pubDate>Fri, 23 Mar 2007 04:38:00 -0500</pubDate>
    <guid isPermaLink="false">http://changelog.complete.org/posts/595-guid.html</guid>
    <category>bzr</category>
<category>darcs</category>
<category>git</category>
<category>version control</category>

</item>
<item>
    <title>More on Git, Mercurial, and Bzr</title>
    <link>http://changelog.complete.org/posts/594-More-on-Git,-Mercurial,-and-Bzr.html</link>
            <category>Programming</category>
    
    <comments>http://changelog.complete.org/posts/594-More-on-Git,-Mercurial,-and-Bzr.html#comments</comments>
    <wfw:comment>http://changelog.complete.org/wfwcomment.php?cid=594</wfw:comment>

    <wfw:commentRss>http://changelog.complete.org/rss.php?version=2.0&amp;type=comments&amp;cid=594</wfw:commentRss>
    

    <author>nospam@example.com (John Goerzen)</author>
    <content:encoded>
    I&#039;ve been writing a lot about this lately, I know, but it&#039;s an interesting landscape.&lt;br /&gt;
&lt;br /&gt;
I had previously discarded git, but in light of git-cvsserver (which provides a plausible way for Windows people to participate), I gave it a try.&lt;br /&gt;
&lt;br /&gt;
The first thing I noticed is that git documentation, in general, is really poor.  Some tutorials that claim to cover git actually cover cogito.  Still others use commands that are much more complex than those in the current git -- and these just the ones linked to from the git homepage.&lt;br /&gt;
&lt;br /&gt;
git&#039;s manpages aren&#039;t much better.  There are quite a few git commands (such as log) that take arguments that &lt;i&gt;other&lt;/i&gt; git commands accept.  Sometimes this fact is documented with a pointer to these other commands, but often not; a person is left guessing what the full range of accepted arguments are.&lt;br /&gt;
&lt;br /&gt;
My complaint that git is overly complex still exists.  They&#039;ve made progress, but still have a serious issue here.  Part is because of the docuemtnation, and part is because of the interface.  I wanted to export to diffs all patches on the current branch in a repo.  I asked on #git, and someone suggested using the revision specifier ..HEAD.  Nope, didn&#039;t work.  A few other git experts chimed in, and none could come up with the correct recipe.  I finally used -500, which worked but is hackish.&lt;br /&gt;
&lt;br /&gt;
git&#039;s lack of even offering support for a human to indicate renames also bothers me, though trustworthy people have assured me that it doesn&#039;t generally cause a problem in practice.&lt;br /&gt;
&lt;br /&gt;
git does have nicer intra-repo branching than Mercurial does, for the moment.  But the Mercurial folks are working on that anyway, and branching to new directories still works fine for me.&lt;br /&gt;
&lt;br /&gt;
But in general, git&#039;s philosophy is to make things easy for the upstream maintainer, and doesn&#039;t spend much effort making things easy for contributors (except to make it mildly easier to contribute to a large project like Linux).  Most of my software doesn&#039;t have a large developer community, and I want to make it as easy as possible for new developers to join in and participate.  git still utterly fails on that.&lt;br /&gt;
&lt;br /&gt;
I tried bzr again.  It seems that every time I try it, after just a few minutes, I am repulsed.  This time, I stopped when I realized that bzr doesn&#039;t support tags and has no support for emailing changesets whatsoever.  As someone that has really liked darcs send (and even used tags way back with CVS!), this is alarming.  The tutorial on the bzr website referenced a command &quot;bzr help topics&quot;, which does not work.&lt;br /&gt;
&lt;br /&gt;
So I&#039;ll stick with my mercurial and darcs combination for now.&lt;br /&gt;
&lt;br /&gt;
I &lt;a href=&quot;http://article.gmane.org/gmane.comp.version-control.mercurial.general/890&quot;&gt;announced&lt;/a&gt; the first version of a hg send extension yesterday as well.  I think Mercurial is very close to having a working equivalent to darcs send. 
    </content:encoded>

    <pubDate>Thu, 22 Mar 2007 05:25:00 -0500</pubDate>
    <guid isPermaLink="false">http://changelog.complete.org/posts/594-guid.html</guid>
    <category>bzr</category>
<category>darcs</category>
<category>git</category>
<category>version control</category>

</item>

</channel>
</rss>