<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/stylesheets/rss.css" type="text/css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Isshen, LLC</title>
    <link>http://blog.isshen.com</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Subversion 1.4.4 upgrade</title>
      <description>&lt;p&gt;Adam had recently got a MacBookPro. We no longer have to mess with InstantRails on Windows. It also means he can use native Subversion and SVK. However, &lt;a href="http://homepage.mac.com/hiirem/svkbuilds.html"&gt;the OSX-native package&lt;/a&gt; uses Subversion 1.4. Our servers uses Subversion 1.3.x. To be fully compatible, that would mean compiling a custom copy of Subversion 1.3.&lt;/p&gt;

&lt;p&gt;After reading about the &lt;a href="http://subversion.tigris.org/svn_1.4_releasenotes.html"&gt;feature additions for Subversion 1.4&lt;/a&gt;, I decided it would be much easier for me to upgrade the server and my dev laptop to 1.4. Gentoo masks 1.4.4, but most Subversion upgrades are fairly transparent. There are two main benefits from the upgrade I wanted. Subversion 1.4 claims to be better at storing and transmitting binary data. We version a lot of raw data, so this would work out well. Subversion 1.4 also has a &lt;tt&gt;svnsync&lt;/tt&gt; command that works like SVK's svn mirroring. It lets you move or clone a repository. Maybe Linus Torvald's &lt;a href="http://codicesoftware.blogspot.com/2007/05/linus-torvalds-on-git-and-scm.html"&gt;acerbic comments about Subversion&lt;/a&gt; has been getting noticed.&lt;/p&gt;



&lt;p&gt;Upgrading to Subversion 1.4 on Gentoo is a piece of cake. You add:&lt;/p&gt;

&lt;blockquote&gt; &lt;tt&gt;echo "=dev-util/subversion-1.4.4-r3" &gt;&gt; /etc/portage/package.keywords&lt;/tt&gt;
&lt;/blockquote&gt;

&lt;p&gt;and then &lt;/p&gt;

&lt;blockquote&gt; &lt;tt&gt;emerge =dev-util/subversion-1.4.4-r3&lt;/tt&gt;&lt;/blockquote&gt;

&lt;p&gt;You can run &lt;tt&gt;revdep-rebuild&lt;/tt&gt; to make sure all the library references are working, but I found that this was not necessary, even with the SVK installed. (With the &lt;tt&gt;perl&lt;/tt&gt; use-flag set on Subversion, all the Perl bindings gets automatically updated on the system.)&lt;/p&gt;

&lt;p&gt;To take advantage of the more-efficient binary storage, all the repositories needed to be upgraded. I shut down Apache to prevent anyone from making commits, backed up my repository, and moved the repository to a different directory while I setup the new repository directories. I then wrote two quick-and-dirty shell scripts to do this:&lt;/p&gt;

&lt;blockquote&gt;&lt;tt&gt;#!/bin/sh&lt;br/&gt;
&lt;br/&gt;
mkdir tmp_dumps&lt;br/&gt;
for repo in `ls repos-1.3.x`; do&lt;br/&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;svnadmin dump repos-1.3.x/${repo} &gt; tmp_dumps/${i}&lt;br/&gt;
done&lt;br/&gt;&lt;/tt&gt;&lt;/blockquote&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;blockquote&gt;&lt;tt&gt;
#!/bin/sh&lt;br/&gt; 
&lt;br/&gt;
for repo in `ls tmp_dumps`; do&lt;br/&gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;svnadmin create --fs-type fsfs repos/${repo}&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;svnadmin load repos/${repo} &lt; tmp_dumps/${repo}&lt;br/&gt;
done&lt;br/&gt;
&lt;/tt&gt;&lt;/blockquote&gt;

&lt;p&gt;Note the &lt;tt&gt;--fs-type fsfs&lt;/tt&gt; flag. You will have to change that if you are using the BerkeleyDB storage engine. These two scripts essentially creates a dump of all the repositories found in &lt;tt&gt;repos&lt;/tt&gt; directory, then reloads them. During the reload, Subversion 1.4's &lt;tt&gt;svnadmin create&lt;/tt&gt; command creates a new repository. The newly reloaded repository uses the more efficient binary storage scheme.&lt;/p&gt;

&lt;p&gt;Lastly, I upgraded all of my local working copies. Subversion does this transparently, but I have a number of large repositories I use often. A simple &lt;tt&gt;svn update&lt;/tt&gt; on each of the working copies upgrades the working copy to 1.4. Some of them take ten minutes to upgrade -- I do this now so I don't have to wait, later on.&lt;/p&gt;

&lt;p&gt;Ho-Sheng Hsiao&lt;br/&gt;
Isshen, LLC&lt;/p&gt;</description>
      <pubDate>Sat, 25 Aug 2007 20:23:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:6ea27de3-32c5-4587-9d3b-71f65c690f0c</guid>
      <author>Hosh</author>
      <link>http://blog.isshen.com/articles/2007/08/25/subversion-1-4-4-upgrade</link>
      <category>Subversion/SVK</category>
      <category>svn</category>
      <category>svk</category>
      <category>gentoo</category>
      <category>tools</category>
    </item>
    <item>
      <title>Gotcha: Defining a controller action called 'process'</title>
      <description>&lt;p&gt;Early in the morning on #rubyonrails, someone came into channel asking for help. He said that, inexplicably, on controller out of his several controllers stopped functioning. When asked for a log, he gave &lt;a href="http://pastie.caboo.se/90295"&gt;this pastie&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This is very puzzling. I even looked at the code around line 330 in ActionController:base&lt;/p&gt;

&lt;blockquote&gt;
327     class &lt;&lt; self&lt;br/&gt;
328       # Factory for the standard create, process loop where the controller is discarded after processing.&lt;br/&gt;
329       def process(request, response) #:nodoc:&lt;br/&gt;
330         new.process(request, response)&lt;br/&gt;
331       end&lt;br/&gt;
&lt;/blockquote&gt;

&lt;p&gt;When asked about what his controller looked like, he gave &lt;a href="http://pastie.caboo.se/90300"&gt;this pastie.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Can you spot the error?&lt;/p&gt;



&lt;h3&gt;The Gotcha&lt;/h3&gt;

&lt;p&gt;As commented in ActionController::base, a new instance of the controller is generated and the method process is called. Unfortunately, all actions are also method definitions. By attempting to define an action called 'process', it overwrote the original process. That explained the error with the "Wrong number of arguments."&lt;/p&gt;

&lt;h3&gt;The Judgment&lt;/h3&gt;

&lt;p&gt;Don't name your action 'process'. And more importantly, dig into the code when you get weird errors like this.&lt;/p&gt;

-Hosh</description>
      <pubDate>Thu, 23 Aug 2007 04:48:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:d96cad7f-ab25-46af-a370-93a4d99b6030</guid>
      <author>Hosh</author>
      <link>http://blog.isshen.com/articles/2007/08/23/gotcha-defining-a-controller-action-called-process</link>
      <category>Ruby on Rails</category>
      <category>ruby_on_rails</category>
      <category>gotcha</category>
    </item>
    <item>
      <title>Rails BugTracker</title>
      <description>&lt;p&gt;I just cracked open a &lt;a href="http://rubyforge.org/projects/rbugtracker/"&gt;Rails Bug Tracker&lt;/a&gt;. The screenshots look good, and the project looks mature. I've been shopping for a native Rails bug tracker for use with our company, Isshen, LLC. This project looks like something I can quickly install and start using, despite its status as "Beta" on Rubyforge.&lt;/p&gt;

&lt;p&gt;Suspicion first filled me when I saw that the project had a "Win32 source" download. That does not make any sense. A Rails app is fairly OS-agnostic. The download is distributed in a zip file. When opened, the source itself is packaged as a RAR. And there was a database.sql schema. &lt;/p&gt;

&lt;p&gt;The schema was bad. It looked like something I would have written before I encountered Rails. There were three migration scripts in the Rails source. There was one that says "create_object". Huh? &lt;/p&gt;

&lt;p&gt;Curious, I opened up app/model. No dice. There were three models ... and a file called mysqlconnection.rb. Why would a Rails app need that for? I got real suspicious.&lt;/p&gt;

&lt;p&gt;And this suspicion was confirmed when I looked at the controllers. Each controller action would create a new mysqlconnection, generate the SQL query on the fly, and then render the template.&lt;/p&gt;

&lt;p&gt;Essentially, the Rails Bug Tracker is a superficial port of a PHP program. And that PHP program wasn't even written using MVC architecture. &lt;/p&gt;

&lt;p&gt;Wow. &lt;/p&gt;</description>
      <pubDate>Wed, 15 Aug 2007 10:24:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:969b0254-301e-4df0-afa9-6798b9ffa311</guid>
      <author>Hosh</author>
      <link>http://blog.isshen.com/articles/2007/08/15/rails-bugtracker</link>
      <category>Ruby on Rails</category>
      <category>ruby_on_rails</category>
      <category>rubyforge</category>
    </item>
    <item>
      <title>Friends in business</title>
      <description>&lt;p&gt;My good friend James Hill, owner of Libre Systems, Ltd. in Manchester, UK sent me &lt;a href="http://www.manchestereveningnews.co.uk/news/s/1012/1012789_cabbie_class_is_the_easier_route.html"&gt;this article&lt;/a&gt; about his recently-established, growing &lt;a href="http://www.taxi-academy.co.uk/"&gt;Taxi Academy&lt;/a&gt;. He started this with Kashef Ahmed when they discovered the shortage of taxi drivers. At the time, James was working on a related startup idea -- that's another story to tell.&lt;/p&gt;

&lt;p&gt;Contrary to what the article says, James doesn't actually drive a cab. His day job involves working as a system admin for a Manchester ISP.  From across the Atlantic, we more or less egged each other on to form our startups. Like a number of other entrepreneurs, we didn't actually get to where we had set out to go. We meandered -- going through partners, products, and services. Seeing your friends grow keeps you on your toes -- you congratulate them and share in their success, while at the same time moving forward with your own plans so that you won't embarrass yourself in front of your peer. &lt;/p&gt;

&lt;p&gt;About a month ago, he has asked me to help him complete an &lt;a href="http://taxiacademy.isshen.net"&gt;internal CRM&lt;/a&gt; for his Taxi Academy. He wanted it done in Rails, and got stuck on a particularly hard has_and_belongs_to_many join. In retrospect, I could have used a has_many :through association. while it is not much to look at, I wrote it in about three days.&lt;/p&gt;

&lt;p&gt;I also got a ping from my local friends, UG Wilson and Travis Warlick of &lt;a href="http://www.operissystems.com"&gt;Operis Systems, LLC&lt;/a&gt; about &lt;a href="http://www.rubyrockstars.com"&gt;Ruby Rock Stars&lt;/a&gt;. And from there, a short hop to &lt;a href="http://www.rentacoder.com"&gt;RentACoder&lt;/a&gt; where I started picking up projects -- including the about-to-be completed modification to Typo called &lt;a href="http://flouzo.isshen.net"&gt;Flouzo&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;A year and a half ago, I discovered Paul Graham's &lt;a href="http://ycombinator.com"&gt;seed funder, YCombinator&lt;/a&gt;. I devoured his writings. I've since stumbled across people who severely disagree with his opinions, though I don't think they are people who have sold a company for $49 million. Paul Graham places a great deal of weight on who is founding the company with you, and where you are located. If the environment is saturated with startups, you're much more likely remember why you even tried at all, as you stare into the LCD screen full of code with grit-filled, hyper-caffeinated, severely-dehydrated eyes at 4 in the morning. It is for that, I'm grateful for my friends in business.&lt;/p&gt;</description>
      <pubDate>Sat, 04 Aug 2007 08:24:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:e94482ef-3e24-4f67-98d1-5f0ac7d4b66e</guid>
      <author>Hosh</author>
      <link>http://blog.isshen.com/articles/2007/08/04/friends-in-business</link>
      <category>Startups</category>
      <category>startups</category>
      <category>business</category>
      <category>ruby_on_rails</category>
    </item>
    <item>
      <title>Useful tricks with script/console</title>
      <description>&lt;p&gt;One of my favorite tools for Rails is script/console. It lets me test out snippets of code to make sure things work the way they are supposed to work. I found two useful things this morning:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tab completion&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Tab completion works in script/console. &lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;script/console&lt;br/&gt;
    user = User.find :first&lt;br/&gt;
    user.up[tab]&lt;br/&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You have no idea how happy that makes me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;reload!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After I found out about tab completion, I found myself making some heavy code changes, and testing them out in the console. I kept having to quit and restart the console. Out on a lark, I hit 'r' and hit tab ... and found 'reload!'. I always wanted that command, but I had thought it was 'reload' not 'reload!'. Go figure.&lt;/p&gt;</description>
      <pubDate>Wed, 01 Aug 2007 06:43:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:8a737b95-992b-4b86-9507-cb9d9b2def39</guid>
      <author>Hosh</author>
      <link>http://blog.isshen.com/articles/2007/08/01/useful-tricks-with-script-console</link>
      <category>Ruby on Rails</category>
      <category>ruby_on_rails</category>
      <category>debugging</category>
      <category>tools</category>
    </item>
    <item>
      <title>Rails Plugins</title>
      <description>&lt;p&gt;This was brought up at #rubyonrails -- someone's idea of the &lt;a href="http://www.juixe.com/techknow/index.php/2006/07/05/top-11-rails-plugins/"&gt; top 11 Rails plugins&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There are a few missing from there:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Technoweenie (Rick Olsen)'s &lt;a href="http://technoweenie.stikipad.com/plugins/show/Acts+as+Authenticated"&gt;acts_as_authenticated&lt;/a&gt; and restful_authentication. These plugins do not tell you how to authenticate anything. Rather, you install the plugin then generate authentication code. From there, you modify it as you see fit. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Technoweenie also wrote &lt;a href="http://clarkware.com/cgi/blosxom/2007/02/24#FileUploadFu"&gt;attachment_fu&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rather than &lt;a href="http://www.juixe.com/techknow/index.php/2006/07/05/acts-as-taggable-plugin/"&gt;acts_as_taggable&lt;/a&gt;, I use &lt;a href="http://agilewebdevelopment.com/plugins/acts_as_taggable_on_steroids"&gt;acts_as_taggable_on_steroids&lt;/a&gt;, which is based on acts_as_taggable. Neither supports multiple tags per model, and the acts_as_taggable_on_steroids author invited me to write a patch, should I write one.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The largest repository of Rails plugins I've found is located at &lt;a href="http://agilewebdevelopment.com/plugins"&gt;http://agilewebdevelopment.com/plugins&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Sat, 28 Jul 2007 14:51:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:716d5eb4-672b-4686-81d8-3a2e08f70f54</guid>
      <author>Hosh</author>
      <link>http://blog.isshen.com/articles/2007/07/28/rails-plugins</link>
      <category>Ruby on Rails</category>
      <category>ruby_on_rails</category>
      <category>plugins</category>
    </item>
    <item>
      <title>How to do http + ssh with Subversion on Windows</title>
      <description>Many public hotspots block svn traffic, even those accessed via http. This predicament can lead many (like me) that must develop in a Windows-based environment in an unfortunate place while on the road. &lt;br /&gt;

Accessing subversion shares, need not be a headache, there is a simple solution.&lt;br /&gt;
&lt;br /&gt;
First you should install &lt;a href="tortoisesvn.tigris.org/"&gt; TortoiseSVN &lt;/a&gt; and verify it is working.&lt;br /&gt;
&lt;br /&gt;
Then right click on the desktop (or an explorer window) highlight &#8220;TortoiseSVN&#8221; then click Settings. &lt;br /&gt;
&lt;br /&gt;
Click the &#8220;Network&#8221; tab&lt;br /&gt;
&lt;br /&gt;
Check the &#8220;Enable Proxy Server&#8221; box, and in the &#8220;Server Address:&#8221; field place &#8220;localhost&#8221; and in the &#8220;Port&#8221; field place an unused port greater than 1024 (remember this number!). Click &#8220;Apply&#8221; then &#8220;OK&#8221;&lt;br /&gt;
&lt;br /&gt;
I recommend &lt;a href="http://www.xs4all.nl/~whaa/putty/"&gt;Putty Tray&lt;/a&gt; and their suite, including their improved version of Pagaent, for reasons that will soon become obvious for the next section.&lt;br /&gt;
&lt;br /&gt;
Open Pageant, then open your keyfile in it.&lt;br /&gt;
&lt;br /&gt;
Continuing on, open up Putty, fill in your server address (make sure SSH is filled in). Then go to Connection -&gt; SSH -&gt; Tunnels. Under &#8220;Source Port&#8221; place the same number you filled in earlier, and in destination, place the address of your server and port 80, ie: my.server.net:80, Click Add. Go back too the session tab, save and name your connection (don&#8217;t want too do this every time).&lt;br /&gt;
&lt;br /&gt;
Click Open.&lt;br /&gt;
&lt;br /&gt;
You should then be able too use TortoiseSVN normally, though remember you will &lt;strong&gt;always&lt;/strong&gt; need the SSH connection running too use it, it will not work otherwise (unless you clear the proxy in the settings).
&lt;br /&gt;&lt;br /&gt;
This is why &lt;a href="http://www.xs4all.nl/~whaa/putty/"&gt;Putty Tray&lt;/a&gt; is so great, you can minimize it too the system tray, and have one less window cluttering your developing environment, until you absolutely need too do something on that command line.&lt;br /&gt;
&lt;br /&gt;
As a &#8216;best practice&#8217; rule, I have learned too set the background colour on my tunnel window to something other (and obviously not) black, and not use it for much of anything besides tunnels.&lt;br /&gt;
&lt;br /&gt;
Good Luck!

&lt;h2&gt;References:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://blog.isshen.com/articles/2006/12/16/how-to-do-http-ssh-with-subversion"&gt;How to do HTTP+SSH with Subversion on Linux&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
      <pubDate>Fri, 27 Jul 2007 20:31:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:84168559-3886-4227-8f75-8248c2446d11</guid>
      <author>Adam</author>
      <link>http://blog.isshen.com/articles/2007/07/27/svn-http-via-ssh-from-xp</link>
      <category>Subversion/SVK</category>
      <category>Windows</category>
      <category>tools</category>
      <category>svn</category>
      <category>TortoiseSVN</category>
      <category>putty</category>
    </item>
    <item>
      <title>Ruby beautifier</title>
      <description>&lt;p&gt;I use jEdit for Ruby on Rails development. I only need three things from it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Project Viewer / File tree panel (like on TextMate)&lt;/li&gt;
&lt;li&gt;Search in directory. The "find" command is OK, but the jEdit HyperSearch will take me directly to the line number in the file.&lt;/li&gt;
&lt;li&gt;Autoformatting and autoindenting.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I am not particular to syntax highlighting. I don't need to have integrated SQL, log windows, or Subversion/SVK integration -- I use Tilda, a drop-down Gnome terminal bound to function keys. &lt;/p&gt;

&lt;p&gt;jEdit 4.2final does (1) and (2) well. It does not do (3) well. I may get fed up enough to find a new editor soon to work with Ruby on Rails. Now, I can work with the broken autocompletions, but I have difficulty working with the broken autoindents. It looks fine when I see it in jEdit, but the resulting text does not output correctly. Probably because I did not set the indent options properly. &lt;strong&gt;Update&lt;/strong&gt;: Yep, need to set "soft indent" and emulate indents with spaces.&lt;/p&gt;

&lt;p&gt;Fortunately, there is a command-line script that will &lt;a href="http://www.arachnoid.com/ruby/rubyBeautifier.html"&gt;beautify Ruby scripts.&lt;/a&gt; It may not work in all the weird cases, but I can bind it to a rake task and apply it to the entire app/ directory.&lt;/p&gt;</description>
      <pubDate>Thu, 26 Jul 2007 02:11:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:97f9a0c6-9b09-4db6-a644-14ed60768a79</guid>
      <author>Hosh</author>
      <link>http://blog.isshen.com/articles/2007/07/26/ruby-beautifier</link>
      <category>Ruby on Rails</category>
      <category>tools</category>
      <category>ruby_on_rails</category>
      <category>ruby</category>
    </item>
    <item>
      <title>LightBox</title>
      <description>&lt;p&gt;Someone at #rubyonrails mentioned &lt;a href="http://stickmanlabs.com/lightwindow/"&gt;LightBox&lt;/a&gt;, a Javascript library for doing in-page popups. It looks nice and gaudy -- I may replace the less flashy in-page popup we have on our &lt;a href="http://www.christinesgourmet.com/calendar"&gt;Calendar app&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I'd definitely change the style a bit. I can't stand the Web Tweeny-bopper look.&lt;/p&gt;</description>
      <pubDate>Sun, 22 Jul 2007 21:34:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:96df4330-d651-4708-832a-a9b7af15c2b1</guid>
      <author>Hosh</author>
      <link>http://blog.isshen.com/articles/2007/07/22/lightbox</link>
      <category>Javascript</category>
      <category>javascript</category>
      <category>tools</category>
    </item>
    <item>
      <title>Branching and Merging with SVK</title>
      <description>&lt;p&gt;Originally posted on a private mailing list.&lt;/p&gt;

&lt;p&gt;Talking with a guy on #ledgersmb, I asked him about how well SVK and SVN worked together. I had &lt;a href="http://blog.isshen.com/articles/2007/01/20/disconnected-versioning-with-svk"&gt;previously used SVK for disconnected commits&lt;/a&gt;, but had not had the nerve to set up an SVK server.&lt;/p&gt;

&lt;p&gt;It turns out, you don't need to set up a SVK server, &lt;em&gt;per se&lt;/em&gt;, to take advantage of SVK's branching and merging.&lt;/p&gt;

&lt;p&gt;To play with it, I set up a directory with a single file:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;test/test.txt&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And branched it with&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;svk cp test test-branch&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If I modified test-branch/test.txt I can use svk push inside
test-branch, and it will automerge back to test/test.txt&lt;/p&gt;

&lt;p&gt;If I modified test/test.txt I can use svk pull inside test-branch and it will automerge modifications from test/&lt;/p&gt;

&lt;p&gt;I had an svn client working with, and it was able to update the changes cleanly. I can use svn to do commits against each branches, and SVK handles that no problem. As far as the svn client is working, someone did branching/merging, no problem. This is made possible because SVK stores the merging information inside SVN's revision properties. That's why I don't need a special SVK server, just using SVK as a beefed up SVN client.&lt;/p&gt;

&lt;p&gt;Now the next tricky thing was using svn cp test-branch test-svn-branch and playing with that. SVK still enters in merge tickets, but getting changes was no longer a simple svk update. I had to use svk pull at the parent directory to get it to update. For what I want to use this for, I will just have to remember to create branches using svk cp rather than svn cp.&lt;/p&gt;

&lt;p&gt;Why bother with all of this stuff? The short time I worked for BankOne, I learned a neat method for releasing software. Changes flows from:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;development -&gt; testing -&gt; qa -&gt; production&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When I first setup Subversion, I had attempted to do something like that. Commit changes to trunk, and have changes pushed upstream for testing (I skipped Q/A as that was done during testing), then to production. The problem is that Subversion's merging sucked. It sucked because it does not track merging changes.&lt;/p&gt;

&lt;p&gt;Having played with this, I can now do something like:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;(developer-1, developer-2, developer-3) -&gt; trunk -&gt; testing -&gt; production&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Pushing to testing and production would be a simple svk pull&lt;/p&gt;

&lt;p&gt;Each developer has their own branches to isolate any potentially
destructive changes. The developers do not necessarily need SVK (unless they are doing disconnected commits, such as if they are roaming around with a laptop like I do). This is a good thing, since TortoiseSVN is a known factor, and Windows may or may not play with SVK (written in Perl) very well.&lt;/p&gt;

&lt;p&gt;The supervisor or PM would have commit priveledges to trunk, probably by using a different set of passwords, so he would do an svk push inside a developer branch once he makes sure it won't destroy anything. Lastly, all the changes, mistakes, whatever can get versioned, a habit I have similar to hitting "save" all the time. Nightly or continous builds would come off of trunk/testing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;: SVK transparently makes merging as trivial as SVN branching without having to change anything server-side.&lt;/p&gt;</description>
      <pubDate>Thu, 05 Jul 2007 04:15:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:8a4b1a2e-d3fe-4730-8ff3-fbbd4d1a85ea</guid>
      <author>Hosh</author>
      <link>http://blog.isshen.com/articles/2007/07/05/branching-and-merging-with-svk</link>
      <category>Subversion/SVK</category>
      <category>svk</category>
    </item>
  </channel>
</rss>
