<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>stefan / botzenhart / com</title>
	<atom:link href="http://blog.stefanbotzenhart.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.stefanbotzenhart.com</link>
	<description>thoughts on ruby, rails and life between humans and technology</description>
	<pubDate>Thu, 24 Sep 2009 06:58:23 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ZenTest, autotest and growl - Update</title>
		<link>http://blog.stefanbotzenhart.com/2009/09/24/zentest-autotest-and-growl-update/</link>
		<comments>http://blog.stefanbotzenhart.com/2009/09/24/zentest-autotest-and-growl-update/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 06:58:23 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
		
		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[autotest]]></category>

		<category><![CDATA[growl]]></category>

		<category><![CDATA[ruby on rails]]></category>

		<category><![CDATA[test]]></category>

		<category><![CDATA[zentest]]></category>

		<guid isPermaLink="false">http://blog.stefanbotzenhart.com/?p=143</guid>

		<description><![CDATA[<p>Long time no serious news in my blog. I apologize for that and hopefully I have for time in the future to write about new and cool ruby and rails stuff. Until then here is some news on <a href="http://www.zenspider.com/ZSS/Products/ZenTest/">ZenTest</a>, <a href="http://github.com/seattlerb/autotest-rails">autotest</a> and <a href="http://growl.info/">growl</a> integration for ruby on rails projects.</p>
<p>I wrote about this setup and the things you have to do to get all this up and running in my older blogposts (<a href="http://blog.stefanbotzenhart.com/2009/05/05/playing-with-unittest-shoulda-factory-girl-autotest-growl-and-redgreen/">here</a> and <a href="http://blog.stefanbotzenhart.com/2009/05/19/cucumber-autotest-and-growl/">here</a>). ZenTest has changed in its newer versions (currently v4.1.4). To get all up and running do the following:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> gem uninstall ZenTest</pre></div></div>

<p>Select <strong>all</strong> version if more than <strong>one</strong> is installed!</p>
<p>Then re-install the required gems. ZenTest doesn&#8217;t provide all the plugins any more. They have to be installed seperately as you can see above.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> gem <span style="color: #c20cb9; font-weight: bold;">install</span> ZenTest autotest-rails autotest-growl</pre></div></div>

<p>Maybe you&#8217;ll get the error &#8220;no such file to load &#8212; autotest/fsevent (LoadError)&#8221;. Then install the <strong>autotest-fsevent</strong> gem. I had this error on my macbook but I can&#8217;t tell you why &#8230; Just wanted to mention that.</p>
<p>To use growl just require it in your .autotest file in your home directory. My .autotest file:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'autotest/growl'</span></pre></div></div>

<p>If you don&#8217;t install autotest-rails an error will occur:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">macpro:mysedcard sb$ autotest
loading autotest<span style="color: #000000; font-weight: bold;">/</span>cucumber_rails
Autotest style autotest<span style="color: #000000; font-weight: bold;">/</span>cucumber_rails doesn<span style="color: #ff0000;">'t seem to exist. Aborting.</span></pre></div></div>

]]></description>
		
		<wfw:commentRss>http://blog.stefanbotzenhart.com/2009/09/24/zentest-autotest-and-growl-update/feed/</wfw:commentRss>
		</item>
		<item>
		<title>RubyFoo London 2009</title>
		<link>http://blog.stefanbotzenhart.com/2009/08/24/rubyfoo-london-2009/</link>
		<comments>http://blog.stefanbotzenhart.com/2009/08/24/rubyfoo-london-2009/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 20:07:04 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[2009]]></category>

		<category><![CDATA[conference]]></category>

		<category><![CDATA[london]]></category>

		<category><![CDATA[rubyfoo]]></category>

		<guid isPermaLink="false">http://blog.stefanbotzenhart.com/?p=140</guid>

		<description><![CDATA[<p>On October 2nd and 3rd <a href="https://secure.trifork.com/ruby-london-2009">RubyFoo London 2009</a> is happening. According to the <a href="http://rubyfoolondon.com/ruby-london-2009/speakers/">speakers table</a> I think this is going to be a good conference.</p>
<p>As I am one of the leaders of the ruby user group Karlsruhe I am proud to announce a 10%-off promotion code for anyone interested going to RubyFoo.</p>
<p>The promotion code: <strong>RUGKarlsruhe_RubyFoo</strong></p>
<p>The registration site: https://secure.trifork.com/ruby-london-2009/registration/processConference.m</p>
<p>Have fun attending the conference and if you&#8217;re in the mood just drop me a line in case  you&#8217;re finally attending RubyFoo.</p>
]]></description>
		
		<wfw:commentRss>http://blog.stefanbotzenhart.com/2009/08/24/rubyfoo-london-2009/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rails Konferenz 2009</title>
		<link>http://blog.stefanbotzenhart.com/2009/08/09/rails-konferenz-2009/</link>
		<comments>http://blog.stefanbotzenhart.com/2009/08/09/rails-konferenz-2009/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 08:15:57 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[2009]]></category>

		<category><![CDATA[conference]]></category>

		<category><![CDATA[konferenz]]></category>

		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://blog.stefanbotzenhart.com/?p=136</guid>

		<description><![CDATA[<p>On September 2nd Rails Konferenz 2009 is happening in Frankfurt / Main (Germany). This year I made a request for a talk and I got it. </p>
<p>My topic is &#8220;Testing with cucumber&#8221;. As it is every year I believe the conference is going to be well attended and the talks will be great.</p>
<p>Find more information on <a href="http://www.rails-konferenz.de">the conference page</a>.</p>
<p><a href="http://www.rails-konferenz.de/programm/56/stefan-botzenhart-testen-mit-cucumber"><img src="http://blog.stefanbotzenhart.com/wp-content/uploads/2009/08/rails-konferenz09-banner-referent.png" alt="Rails Konferenz 2009" title="Rails Konferenz 2009" width="234" height="129" class="aligncenter size-full wp-image-137" /></a></p>
]]></description>
		
		<wfw:commentRss>http://blog.stefanbotzenhart.com/2009/08/09/rails-konferenz-2009/feed/</wfw:commentRss>
		</item>
		<item>
		<title>iX Special - Web on rails - and meinkabinett.de</title>
		<link>http://blog.stefanbotzenhart.com/2009/06/17/ix-special-web-on-rails-and-meinkabinettde/</link>
		<comments>http://blog.stefanbotzenhart.com/2009/06/17/ix-special-web-on-rails-and-meinkabinettde/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 01:17:05 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
		
		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[extjs]]></category>

		<category><![CDATA[heise]]></category>

		<category><![CDATA[iX]]></category>

		<category><![CDATA[meinkabinett]]></category>

		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://blog.stefanbotzenhart.com/?p=124</guid>

		<description><![CDATA[<p>On Monday, June 8th a new <a href="http://www.heise.de/kiosk/special/ix/09/01/">iX magazine special</a> was published. I wrote an article together with <a href="http://www.marcusschiesser.de/">Marcus Schiesser</a> on rich clients. The goal was to show how easy it is to combine ruby on rails and <a href="http://extjs.com/">ExtJS</a>.</p>
<p>This is my first publication and I&#8217;m little bit proud of it <img src='http://blog.stefanbotzenhart.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> The magazine covers a lot of good topics. Just check it out!</p>
<p><a href="http://blog.stefanbotzenhart.com/wp-content/uploads/2009/06/special0109.jpg" rel="lightbox[124]"><img src="http://blog.stefanbotzenhart.com/wp-content/uploads/2009/06/special0109-212x300.jpg" alt="iX Spezial" title="iX Spezial" width="212" height="300" class="aligncenter size-medium wp-image-125" /></a></p>
<p>A votingmachine served as an example application for this article. We completed it and named it <a href="http://www.meinkabinett.de/">meinkabinett.de</a>.</p>
<p><a href="http://blog.stefanbotzenhart.com/wp-content/uploads/2009/06/picture-4.png" rel="lightbox[124]"><img src="http://blog.stefanbotzenhart.com/wp-content/uploads/2009/06/picture-4-300x220.png" alt="meinkabinett" title="meinkabinett" width="300" height="220" class="aligncenter size-medium wp-image-128" /></a></p>
]]></description>
		
		<wfw:commentRss>http://blog.stefanbotzenhart.com/2009/06/17/ix-special-web-on-rails-and-meinkabinettde/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Give your tests some love - cruisecontrol.rb, rails, git, rcov, unit tests and cucumber</title>
		<link>http://blog.stefanbotzenhart.com/2009/06/16/give-your-tests-some-love-cruisecontrolrb-rails-git-rcov-unit-tests-and-cucumber/</link>
		<comments>http://blog.stefanbotzenhart.com/2009/06/16/give-your-tests-some-love-cruisecontrolrb-rails-git-rcov-unit-tests-and-cucumber/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 21:11:13 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[cruisecontrol]]></category>

		<category><![CDATA[cucumber]]></category>

		<category><![CDATA[git]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[rcov]]></category>

		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://blog.stefanbotzenhart.com/?p=110</guid>

		<description><![CDATA[<p>Long time passed since I wrote my last blog post. Things happened and I was very busy. But now I have some news to write about.</p>
<p>Refactoring my current project <a href="http://www.mysedcard.tv/">mysedcard.tv</a> produced a bunch of <a href="http://cukes.info/">cucumber features</a>. Those are great and I love to see them running in my console. But that can&#8217;t be enough so I remembered <a href="http://eigenclass.org/hiki/rcov">RCov</a> and said to myself. Let&#8217;s go get it and doing this I decided to finally set up a <a href="http://cruisecontrolrb.thoughtworks.com/">continuous integration server - cruisecontrol.rb</a>.</p>
<h3>Setting up cruisecontrol.rb</h3>
<p>As usual I have some unnormal settings I need to cover. I want to combine rails, git, cucumber, unit tests, rcov and cruisecontrol.rb</p>
<p><a href="http://codeintensity.blogspot.com/2008/04/setting-up-cruisecontrolrb-withfor-git.html">Take this</a> as a good starting point and install cruisecontrol. I took the official <a href="http://cruisecontrolrb.thoughtworks.com/">cruisecontrol.rb</a> from <a href="http://www.thoughtworks.com/">thoughtworks</a></p>
<p>Change the cruisecontrol.rb settings to your needs. Mine look like those:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># config/site_config.rb.example</span>
<span style="color:#008000; font-style:italic;"># site_config.rb contains examples of various configuration options for the local installation</span>
<span style="color:#008000; font-style:italic;"># of CruiseControl.rb.</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># YOU MUST RESTART YOUR CRUISE CONTROL SERVER FOR ANY CHANGES MADE HERE TO TAKE EFFECT!!!</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># EMAIL NOTIFICATION</span>
<span style="color:#008000; font-style:italic;"># ------------------</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># CruiseControl.rb can notify you about build status via email. It uses ActionMailer component of Ruby on Rails </span>
<span style="color:#008000; font-style:italic;"># framework. Obviously, ActionMailer needs to know how to send out email messages. </span>
<span style="color:#008000; font-style:italic;"># If you have an SMTP server on your network, and it needs no authentication, write this in your site_config.rb:</span>
&nbsp;
<span style="color:#6666ff; font-weight:bold;">ActionMailer::Base</span>.<span style="color:#9900CC;">smtp_settings</span> = <span style="color:#006600; font-weight:bold;">&#123;</span>
  <span style="color:#ff3333; font-weight:bold;">:address</span> <span style="color:#006600; font-weight:bold;">=&gt;</span>        <span style="color:#996600;">&quot;mxgate.mydomain.com&quot;</span>,
  <span style="color:#ff3333; font-weight:bold;">:domain</span> <span style="color:#006600; font-weight:bold;">=&gt;</span>         <span style="color:#996600;">&quot;myemaildomain.com&quot;</span>,
  <span style="color:#ff3333; font-weight:bold;">:port</span> <span style="color:#006600; font-weight:bold;">=&gt;</span>           <span style="color:#006666;">25</span>
<span style="color:#006600; font-weight:bold;">&#125;</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#</span>
<span style="color:#008000; font-style:italic;"># If you have no SMTP server at hand, you can configure email notification to use GMail SMTP server, as follows</span>
<span style="color:#008000; font-style:italic;"># (of course, you'll need to create a GMail account):</span>
<span style="color:#008000; font-style:italic;">#</span>
<span style="color:#008000; font-style:italic;"># ActionMailer::Base.smtp_settings = {</span>
<span style="color:#008000; font-style:italic;">#   :address =&gt;        &quot;smtp.gmail.com&quot;,</span>
<span style="color:#008000; font-style:italic;">#   :port =&gt;           587,</span>
<span style="color:#008000; font-style:italic;">#   :domain =&gt;         &quot;yourdomain.com&quot;,</span>
<span style="color:#008000; font-style:italic;">#   :authentication =&gt; :plain,</span>
<span style="color:#008000; font-style:italic;">#   :user_name =&gt;      &quot;yourgmailaccount&quot;,</span>
<span style="color:#008000; font-style:italic;">#   :password =&gt;       &quot;yourgmailpassword&quot;</span>
<span style="color:#008000; font-style:italic;"># }</span>
<span style="color:#008000; font-style:italic;"># </span>
<span style="color:#008000; font-style:italic;"># The same approach works for other SMTP servers thet require authentication. Note that GMail's SMTP server runs on a </span>
<span style="color:#008000; font-style:italic;"># non-standard port 587 (standard port for SMTP is 25).</span>
<span style="color:#008000; font-style:italic;">#</span>
<span style="color:#008000; font-style:italic;"># For further details about configuration of outgoing email, see Ruby On Rails documentation for ActionMailer::Base.</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Other site-wide options are available through Configuration class:</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Change how often CC.rb pings Subversion for new requests. Default is 10.seconds, which should be OK for a local</span>
<span style="color:#008000; font-style:italic;"># SVN repository, but probably isn't very polite for a public repository, such as RubyForge. This can also be set for</span>
<span style="color:#008000; font-style:italic;"># each project individually, through project.scheduler.polling_interval option:</span>
Configuration.<span style="color:#9900CC;">default_polling_interval</span> = 1.<span style="color:#9900CC;">minute</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># How often the dashboard page refreshes itself. If you have more than 10-20 dashboards open,</span>
<span style="color:#008000; font-style:italic;"># it is advisable to set it to something higher than the default 5 seconds:</span>
Configuration.<span style="color:#9900CC;">dashboard_refresh_interval</span> = 20.<span style="color:#9900CC;">seconds</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Site-wide setting for the email &quot;from&quot; field. This can also be set on per-project basis,</span>
<span style="color:#008000; font-style:italic;"># through project.email.notifier.from attribute</span>
Configuration.<span style="color:#9900CC;">email_from</span> = <span style="color:#996600;">'cruisecontrolrb@mydomain.com'</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Root URL of the dashboard application. Setting this attribute allows various notifiers to include a link to the</span>
<span style="color:#008000; font-style:italic;"># build page in the notification message.</span>
Configuration.<span style="color:#9900CC;">dashboard_url</span> = <span style="color:#996600;">'http://cc.local/'</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># If you don't want to allow triggering builds through dashboard Build Now button. Useful when you host CC.rb as a</span>
<span style="color:#008000; font-style:italic;"># public web site (such as http://cruisecontrolrb.thoughtworks.com/projects - try clicking on Build Now button there</span>
<span style="color:#008000; font-style:italic;"># and see what happens):</span>
<span style="color:#008000; font-style:italic;"># Configuration.disable_build_now = true</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># If you want to only allow one project to build at a time, uncomment this line</span>
<span style="color:#008000; font-style:italic;"># by default, cruise allows multiple projects to build at a time</span>
<span style="color:#008000; font-style:italic;"># Configuration.serialize_builds = true</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Amount of time a project will wait to build before failing when build serialization is on</span>
<span style="color:#008000; font-style:italic;"># Configuration.serialized_build_timeout = 3.hours</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Amount of time a project will wait for git to load new changesets before failing</span>
Configuration.<span style="color:#9900CC;">git_load_new_changesets_timeout</span> = 5.<span style="color:#9900CC;">minutes</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># To delete build when there are more than a certain number present, uncomment this line - it will make the dashboard </span>
<span style="color:#008000; font-style:italic;"># perform better</span>
BuildReaper.<span style="color:#9900CC;">number_of_builds_to_keep</span> = <span style="color:#006666;">20</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># any files that you'd like to override in cruise, keep in ~/.cruise, and copy over when this file is loaded like this</span>
site_css = CRUISE_DATA_ROOT <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">&quot;/site.css&quot;</span>
<span style="color:#CC00FF; font-weight:bold;">FileUtils</span>.<span style="color:#9900CC;">cp</span> site_css, RAILS_ROOT <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">&quot;/public/stylesheets/site.css&quot;</span> <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">exists</span>? site_css</pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># config/cruise_config.rb.example</span>
<span style="color:#008000; font-style:italic;"># Project-specific configuration for CruiseControl.rb</span>
&nbsp;
Project.<span style="color:#9900CC;">configure</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>project<span style="color:#006600; font-weight:bold;">|</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Send email notifications about broken and fixed builds to email1@your.site, email2@your.site (default: send to nobody)</span>
  project.<span style="color:#9900CC;">email_notifier</span>.<span style="color:#9900CC;">emails</span> = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'my@email.com'</span><span style="color:#006600; font-weight:bold;">&#93;</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Set email 'from' field to john@doe.com:</span>
  project.<span style="color:#9900CC;">email_notifier</span>.<span style="color:#9900CC;">from</span> = <span style="color:#996600;">'cruisecontrol@mydomain.com'</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Build the project by invoking rake task 'custom'</span>
  <span style="color:#008000; font-style:italic;"># project.rake_task = 'custom'</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Build the project by invoking shell script &quot;build_my_app.sh&quot;. Keep in mind that when the script is invoked,</span>
  <span style="color:#008000; font-style:italic;"># current working directory is &lt;em&gt;[cruise&amp;nbsp;data]&lt;/em&gt;/projects/your_project/work, so if you do not keep build_my_app.sh</span>
  <span style="color:#008000; font-style:italic;"># in version control, it should be '../build_my_app.sh' instead</span>
  <span style="color:#008000; font-style:italic;"># project.build_command = '../build_my_app.sh'</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Ping Subversion for new revisions every 5 minutes (default: 30 seconds)</span>
  <span style="color:#008000; font-style:italic;"># project.scheduler.polling_interval = 5.minutes</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<h3>check out if cruisecontrol.rb is set up correctly</h3>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">CRUISE_DATA_ROOT</span>=<span style="color: #000000; font-weight: bold;">/</span>Absolute<span style="color: #000000; font-weight: bold;">/</span>path<span style="color: #000000; font-weight: bold;">/</span>cruisecontrol.rb<span style="color: #000000; font-weight: bold;">/</span>.cruise .<span style="color: #000000; font-weight: bold;">/</span>cruise start</pre></td></tr></table></div>

<p>I provide <em>CRUISE_DATA_ROOT</em> because cruisecontrol searches projects in <em>~/.cruise</em> by default. I changed this to store all projects within my cruisecontrol installation. </p>
<p>Go to <strong>cruisecontrol.local:3333</strong> (cruisecontrol.local in /etc/hosts and 3333 is the default port for cruisecontrol). You should see something like this:</p>
<p><a href="http://blog.stefanbotzenhart.com/wp-content/uploads/2009/06/empty_cruisecontrol.png" rel="lightbox[110]"><img src="http://blog.stefanbotzenhart.com/wp-content/uploads/2009/06/empty_cruisecontrol-300x109.png" alt="empty_cruisecontrol" title="empty_cruisecontrol" width="300" height="109" class="aligncenter size-medium wp-image-117" /></a></p>
<h3>Your first project</h3>
<p>After changing settings and testing cruisecontrol&#8217;s basic functionality to your needs initialize your first project:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">CRUISE_DATA_ROOT</span>=.<span style="color: #000000; font-weight: bold;">/</span>.cruise .<span style="color: #000000; font-weight: bold;">/</span>cruise add <span style="color: #000000; font-weight: bold;">&lt;</span>myproject<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #660033;">--url</span> git<span style="color: #000000; font-weight: bold;">@</span>mygitserver:mygitproject.git <span style="color: #660033;">-s</span> git</pre></td></tr></table></div>

<p>or with a specific branch:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">CRUISE_DATA_ROOT</span>=.<span style="color: #000000; font-weight: bold;">/</span>.cruise .<span style="color: #000000; font-weight: bold;">/</span>cruise add <span style="color: #000000; font-weight: bold;">&lt;</span>myproject<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #660033;">--url</span> git<span style="color: #000000; font-weight: bold;">@</span>mygitserver:mygitproject.git <span style="color: #660033;">-s</span> git <span style="color: #660033;">-b</span> coverage</pre></td></tr></table></div>

<p>When you now go to <em>cruisecontrol.local:3333</em> now shows you a (failed) first build. It fails because you have to set up your project.</p>
<p>You can achieve this in two way. The first is to initialize the test database for your project manually with:<br />
(change or create config/database.yml)</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">RAILS_ENV</span>=<span style="color: #7a0874; font-weight: bold;">test</span> rake db:create
rake db:<span style="color: #7a0874; font-weight: bold;">test</span>:prepare</pre></td></tr></table></div>

<p>I show you the second way later together with a new rake task.</p>
<p>Now your continous integration server is up and running, polls frequently for changes in your git repo and hopefully your tests aren&#8217;t broken <img src='http://blog.stefanbotzenhart.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
( Unfortunately only your tests are included but not your features <img src='http://blog.stefanbotzenhart.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> )</p>
<p>By default cruisecontrol polls your git repo frequently for updates and - if found any - gets the changed code and executes<br />
rake db:migrate and rake db:test:prepare</p>
<h3>Add RCov</h3>
<p>You noticed that this blog&#8217;s title is &#8220;<strong>Give your tests some love</strong>&#8220;. So let&#8217;s visualize the impact of your testing efforts with rcov.</p>
<p>First you have to install <a href="http://eigenclass.org/hiki.rb?rcov">rcov</a> and the <a href="http://agilewebdevelopment.com/plugins/rails_rcov">rails_rcov plugin</a>. because I&#8217;m using cucumber I follow <a href="http://wiki.github.com/aslakhellesoy/cucumber/using-rcov-with-cucumber-and-rails">cucumber&#8217;s recommendation</a> and take <a href="http://github.com/relevance/rcov">relevance-rcov</a>.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> gem <span style="color: #c20cb9; font-weight: bold;">install</span> relevance-rcov</pre></td></tr></table></div>

<p>The rails_rcov plugin brings in some new rake tasks</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">rake <span style="color: #7a0874; font-weight: bold;">test</span>:benchmark:clobber_rcov                <span style="color: #666666; font-style: italic;"># Remove Rcov reports for benchmark tests</span>
rake <span style="color: #7a0874; font-weight: bold;">test</span>:benchmark:rcov                        <span style="color: #666666; font-style: italic;"># Run all benchmark tests with Rcov to measure coverage</span>
rake <span style="color: #7a0874; font-weight: bold;">test</span>:functionals:clobber_rcov              <span style="color: #666666; font-style: italic;"># Remove Rcov reports for functional tests</span>
rake <span style="color: #7a0874; font-weight: bold;">test</span>:functionals:rcov                      <span style="color: #666666; font-style: italic;"># Run all functional tests with Rcov to measure coverage</span>
rake <span style="color: #7a0874; font-weight: bold;">test</span>:integration:clobber_rcov              <span style="color: #666666; font-style: italic;"># Remove Rcov reports for integration tests</span>
rake <span style="color: #7a0874; font-weight: bold;">test</span>:integration:rcov                      <span style="color: #666666; font-style: italic;"># Run all integration tests with Rcov to measure coverage</span>
rake <span style="color: #7a0874; font-weight: bold;">test</span>:plugins:clobber_rcov                  <span style="color: #666666; font-style: italic;"># Remove Rcov reports for plugin tests</span>
rake <span style="color: #7a0874; font-weight: bold;">test</span>:plugins:rcov                          <span style="color: #666666; font-style: italic;"># Run all plugin tests with Rcov to measure coverage</span>
rake <span style="color: #7a0874; font-weight: bold;">test</span>:profile:clobber_rcov                  <span style="color: #666666; font-style: italic;"># Remove Rcov reports for profile tests</span>
rake <span style="color: #7a0874; font-weight: bold;">test</span>:profile:rcov                          <span style="color: #666666; font-style: italic;"># Run all profile tests with Rcov to measure coverage</span>
rake <span style="color: #7a0874; font-weight: bold;">test</span>:recent:clobber_rcov                   <span style="color: #666666; font-style: italic;"># Remove Rcov reports for recent tests</span>
rake <span style="color: #7a0874; font-weight: bold;">test</span>:recent:rcov                           <span style="color: #666666; font-style: italic;"># Run all recent tests with Rcov to measure coverage</span>
rake <span style="color: #7a0874; font-weight: bold;">test</span>:<span style="color: #7a0874; font-weight: bold;">test</span>:clobber_rcov                     <span style="color: #666666; font-style: italic;"># Remove Rcov reports for test tests</span>
rake <span style="color: #7a0874; font-weight: bold;">test</span>:<span style="color: #7a0874; font-weight: bold;">test</span>:rcov                             <span style="color: #666666; font-style: italic;"># Run all test tests with Rcov to measure coverage</span></pre></td></tr></table></div>

<p>To run all your test with rcov hit rake test:test:rcov This rake commands looks a bit strange in the beginning but when you inspect the code you notice that every test task is appended with its own name and &#8220;:rcov&#8221;. For example &#8220;rake test&#8221; gets a new brother &#8220;rake test:test:rcov&#8221;</p>
<p>Running it creates a coverage/ directory which contain all the different coverages. See coverage/index.html for the report.</p>
<h3>Cucumber and RCov</h3>
<p>follow http://wiki.github.com/aslakhellesoy/cucumber/using-rcov-with-cucumber-and-rails and change the cucumber rake task.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="rake" style="font-family:monospace;">t.rcov = true</pre></td></tr></table></div>

<p>I added some rcov options to beautify the output:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">t.<span style="color:#9900CC;">rcov_opts</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#996600;">'--exclude gems --sort coverage --aggregate coverage.data'</span></pre></td></tr></table></div>

<p>After getting rcov running we need to integrate it to cruisecontrol.rb.</p>
<p>In order to get this done we add a new rake file for which does the work in cruisecontrol.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="rake" style="font-family:monospace;"># lib/tasks/cruise.rake
desc 'Continuous build target'
task :cruise =&gt; [&quot;notes&quot;, &quot;stats&quot;, &quot;db:migrate&quot;, &quot;db:test:prepare&quot;] do
  out = ENV['CC_BUILD_ARTIFACTS']
  mkdir_p out unless File.directory? out if out
&nbsp;
  ENV['SHOW_ONLY'] = 'models,lib,helpers'
  Rake::Task[&quot;test:units:rcov&quot;].invoke
  mv 'coverage/units', &quot;#{out}/unit test coverage&quot; if out
&nbsp;
  ENV['SHOW_ONLY'] = 'controllers'
  Rake::Task[&quot;test:functionals:rcov&quot;].invoke
  mv 'coverage/functionals',&quot;#{out}/functional test coverage&quot; if out
&nbsp;
  #Rake::Task[&quot;test:integration&quot;].invoke
  Rake::Task[&quot;test:features&quot;].invoke
end</pre></td></tr></table></div>

<p>This task creates all the different coverages and stores them in subfolders. Not enough it prints the coverage output to the commandline so cruisecontrol is able to display everything in the build log.</p>
<p>Notice the last 2 lines:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="rake" style="font-family:monospace;">#Rake::Task[&quot;test:integration&quot;].invoke
Rake::Task[&quot;test:features&quot;].invoke</pre></td></tr></table></div>

<p>Chose to invoke test:integration or test:features (or both). I namespace the shipped cucumber rake task to :test to have them all in one namespace.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="rake" style="font-family:monospace;"># lib/tasks/cucumber.rake
$LOAD_PATH.unshift(RAILS_ROOT + '/vendor/plugins/cucumber/lib') if File.directory?(RAILS_ROOT + '/vendor/plugins/cucumber/lib')
&nbsp;
namespace :test do
  begin
    require 'cucumber/rake/task'
&nbsp;
    Cucumber::Rake::Task.new(:features) do |t|
      t.fork = true
      t.cucumber_opts = %w{--format pretty}
      t.rcov = true
      t.rcov_opts &lt;&lt; '--exclude gems --sort coverage --aggregate coverage.data'
    end
    task :features =&gt; 'db:test:prepare'
  rescue LoadError
    desc 'Cucumber rake task not available'
    task :features do
      abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin'
    end
  end
end</pre></td></tr></table></div>

<p>The last thing we have to do is to tell cruisecontrol to use this rake task to build our project. Remember the config/cruise_config.rb.example file? We have to change one line:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># project.rake_task = 'custom'</span></pre></td></tr></table></div>

<p>gets</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">project.<span style="color:#9900CC;">rake_task</span> = <span style="color:#996600;">'cruise'</span></pre></td></tr></table></div>

<p>Change the example file in <strong>/path/to/cruisecontrol.rb/config/cruise_config.rb.example</strong> and <strong>/path/to/cruisecontrol.rb/.cruise/projects/
<project>/config/cruise_config.rb</strong> for all existing projects.</p>
<p>Now hit the Build button of your project and see the coverage. Hopefully this leads some light in the continuous integration space.</p>
<p>You like what I&#8217;m doing? <a href="http://workingwithrails.com/recommendation/new/person/16426-stefan-botzenhart">Recommend me on Working With Rails</a></p>
<p><strong>More links:</strong><br />
<a href="http://codeintensity.blogspot.com/2008/04/setting-up-cruisecontrolrb-withfor-git.html">http://codeintensity.blogspot.com/2008/04/setting-up-cruisecontrolrb-withfor-git.html</a><br />
<a href="http://github.com/thoughtworks/cruisecontrol.rb">http://github.com/thoughtworks/cruisecontrol.rb</a><br />
<a href="http://morshed-alam.blogspot.com/2008/09/implementation-of-cruisecontrolrb-and.html">http://morshed-alam.blogspot.com/2008/09/implementation-of-cruisecontrolrb-and.html</a><br />
<a href="http://deadprogrammersociety.blogspot.com/2007/06/cruisecontrolrb-and-rcov-are-so-good.html">http://deadprogrammersociety.blogspot.com/2007/06/cruisecontrolrb-and-rcov-are-so-good.html</a><br />
<a href="http://wiki.github.com/aslakhellesoy/cucumber/using-rcov-with-cucumber-and-rails">http://wiki.github.com/aslakhellesoy/cucumber/using-rcov-with-cucumber-and-rails</a><br />
<a href="http://github.com/relevance/rcov">http://github.com/relevance/rcov</a><br />
<a href="http://agilewebdevelopment.com/plugins/rails_rcov">http://agilewebdevelopment.com/plugins/rails_rcov</a></p>
]]></description>
		
		<wfw:commentRss>http://blog.stefanbotzenhart.com/2009/06/16/give-your-tests-some-love-cruisecontrolrb-rails-git-rcov-unit-tests-and-cucumber/feed/</wfw:commentRss>
		</item>
		<item>
		<title>RailsWayCon here I come</title>
		<link>http://blog.stefanbotzenhart.com/2009/05/24/railswaycon-here-i-come/</link>
		<comments>http://blog.stefanbotzenhart.com/2009/05/24/railswaycon-here-i-come/#comments</comments>
		<pubDate>Sun, 24 May 2009 10:11:17 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[conference]]></category>

		<category><![CDATA[ontheroad]]></category>

		<category><![CDATA[railswaycon]]></category>

		<guid isPermaLink="false">http://blog.stefanbotzenhart.com/?p=102</guid>

		<description><![CDATA[<p>In a couple of hours I&#8217;m leaving good old Karlsruhe by train to hit Berlin and <a href="http://it-republik.de/conferences/railswaycon/">RailsWayCon</a>. This will take about 6 hours but as my buddy Marco is coming with me I think it won&#8217;t last that long. Besides that I&#8217;m going to have enough time to finally check out my personal <a href="http://it-republik.de/konferenzen/planer/railswaycon_timetable.html">timetable</a>. </p>
<p>What can I expect of RailsWayCon?</p>
<p>On Monday, day one, there are two <a href="http://it-republik.de/konferenzen/railswaycon/workshops/">workshops</a>. One is about deploying ruby on rails applications with all its different faces by <a href="http://it-republik.de/konferenzen/railswaycon/workshops/railswaycon/speaker/#3356">Jonathan Weiss</a> and <a href="http://it-republik.de/konferenzen/railswaycon/workshops/railswaycon/speaker/#3888">Mathias Meyer</a>. The other one is about behaviour driven design in practice by <a href="http://it-republik.de/konferenzen/railswaycon/workshops/railswaycon/speaker/#3819">Jens Christian Fischer</a>. As I already visited a workshop about BDD with RSpec held by J.C. Fischer - which was really good - and I&#8217;m not that familiar with RSpec and <a href="http://blog.stefanbotzenhart.com/2009/05/05/playing-with-unittest-shoulda-factory-girl-autotest-growl-and-redgreen/">don&#8217;t want to</a>, I decided to visit the workshop about deploying ruby on rails applications. So I&#8217;m looking forward to learn something new and cool about deploying rails apps <img src='http://blog.stefanbotzenhart.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>On day two and three a couple of <a href="http://it-republik.de/konferenzen/planer/railswaycon_timetable.html">good looking talks</a> are taking place. We&#8217;ll see how all the talks are going to be.</p>
<p>See ya at RailsWayCon!</p>
<p>p.s: anyone else in <a href="http://www.putinn.eu/">putinn hotel</a>? Let me know!</p>
<p>EDIT:<br />
As I missed an after report for RailsWayCon, here are some links which tell you everything you need to know about the conf.<br />
<a href="http://railsmagazin.de/railswaycon-in-6-minuten-1411">http://railsmagazin.de/railswaycon-in-6-minuten-1411</a><br />
<a href="http://railslove.com/weblog/2009/05/30/railswaycon-09-in-berlin-ruckblick/">http://railslove.com/weblog/2009/05/30/railswaycon-09-in-berlin-ruckblick/</a><br />
<a href="http://www.jrubyonrails.de/2009/05/aktuelles-von-der-railswaycon.html">http://www.jrubyonrails.de/2009/05/aktuelles-von-der-railswaycon.html</a></p>
]]></description>
		
		<wfw:commentRss>http://blog.stefanbotzenhart.com/2009/05/24/railswaycon-here-i-come/feed/</wfw:commentRss>
		</item>
		<item>
		<title>web2.nullify your name</title>
		<link>http://blog.stefanbotzenhart.com/2009/05/22/web2nullify-your-name/</link>
		<comments>http://blog.stefanbotzenhart.com/2009/05/22/web2nullify-your-name/#comments</comments>
		<pubDate>Fri, 22 May 2009 19:22:16 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[characters]]></category>

		<category><![CDATA[service]]></category>

		<category><![CDATA[web20]]></category>

		<guid isPermaLink="false">http://blog.stefanbotzenhart.com/?p=96</guid>

		<description><![CDATA[<p>Ever wanted to see your name in famous web2.0-services&#8217; characters? No, problem. <a href="http://web2.0write.com/">0write</a> does this for you. Here&#8217;s how my company&#8217;s name and mine look like:</p>
<p><a href="http://blog.stefanbotzenhart.com/wp-content/uploads/2009/05/basiszwo-web20.png" rel="lightbox[96]"><img src="http://blog.stefanbotzenhart.com/wp-content/uploads/2009/05/basiszwo-web20.png" alt="basiszwo-web20" title="basiszwo-web20" width="128" height="30" class="alignleft size-full wp-image-97" /></a><br />
<br/><br />
<a href="http://blog.stefanbotzenhart.com/wp-content/uploads/2009/05/stefanbotzenhart-web20.png" rel="lightbox[96]"><img src="http://blog.stefanbotzenhart.com/wp-content/uploads/2009/05/stefanbotzenhart-web20.png" alt="stefanbotzenhart-web20" title="stefanbotzenhart-web20" width="272" height="30" class="alignleft size-full wp-image-98" /></a></p>
]]></description>
		
		<wfw:commentRss>http://blog.stefanbotzenhart.com/2009/05/22/web2nullify-your-name/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cucumber, autotest and growl</title>
		<link>http://blog.stefanbotzenhart.com/2009/05/19/cucumber-autotest-and-growl/</link>
		<comments>http://blog.stefanbotzenhart.com/2009/05/19/cucumber-autotest-and-growl/#comments</comments>
		<pubDate>Tue, 19 May 2009 10:24:24 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
		
		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[autotest]]></category>

		<category><![CDATA[bash]]></category>

		<category><![CDATA[cucumber]]></category>

		<category><![CDATA[features]]></category>

		<category><![CDATA[growl]]></category>

		<category><![CDATA[manual]]></category>

		<category><![CDATA[notify]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.stefanbotzenhart.com/?p=88</guid>

		<description><![CDATA[<p>Using <a href="http://cukes.info">cucumber</a> and bdd is just fun. <a href="http://www.thoughtbot.com/projects/shoulda/">Shoulda</a> have used it earlier &#8230; Sorry, I need to write that <img src='http://blog.stefanbotzenhart.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>When you use <a href="http://cukes.info/">cucumber</a> (at the beginning) you always have to run</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">cucumber features</pre></div></div>

<p>in your console to run all your features. Or you specify one by running</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">cucumber features<span style="color: #000000; font-weight: bold;">/</span>session.feature</pre></div></div>

<p>There are some more ways but have a look at the <a href="http://wiki.github.com/aslakhellesoy/cucumber">documentation</a> for that.</p>
<p>Ok, back to topic. I want to include my cucumber features in <a href="http://blog.stefanbotzenhart.com/2009/05/05/playing-with-unittest-shoulda-factory-girl-autotest-growl-and-redgreen/">autotest</a>. No big deal about that. As usual, just read the f****** manual -> <a href="http://wiki.github.com/aslakhellesoy/cucumber/autotest-integration">http://wiki.github.com/aslakhellesoy/cucumber/autotest-integration</a>.</p>
<p>Just paste </p>
<pre>
export AUTOFEATURE=true
</pre>
<p>in your .bashprofile, .bashrc or whatever you use.</p>
<p>As you can read in <a href="http://blog.stefanbotzenhart.com/2009/05/05/playing-with-unittest-shoulda-factory-girl-autotest-growl-and-redgreen/">another blog post</a> of mine I use growl to notify about failing and passing tests. How to get this for cucumber features? And again &#8230; <a href="http://wiki.github.com/aslakhellesoy/cucumber/related-tools">rtfm</a> <img src='http://blog.stefanbotzenhart.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Here we go! Just install the <a href="http://github.com/basiszwo/cucumber_growler/tree/master">cucumber_growl plugin</a> in your application and it just works. (I linked my fork because I want to use my autotest images). As with every external repository I use <a href="http://blog.stefanbotzenhart.com/2009/05/17/braid-keep-track-of-external-git-and-svn-repositories-within-a-git-repository/">braid</a> to keep track of it.</p>
<p>That&#8217;s all. Now autotest includes your cucumber features and growl notifies you about the results. Have fun with bdd!</p>
]]></description>
		
		<wfw:commentRss>http://blog.stefanbotzenhart.com/2009/05/19/cucumber-autotest-and-growl/feed/</wfw:commentRss>
		</item>
		<item>
		<title>braid - keep track of external git and svn repositories within a git repository</title>
		<link>http://blog.stefanbotzenhart.com/2009/05/17/braid-keep-track-of-external-git-and-svn-repositories-within-a-git-repository/</link>
		<comments>http://blog.stefanbotzenhart.com/2009/05/17/braid-keep-track-of-external-git-and-svn-repositories-within-a-git-repository/#comments</comments>
		<pubDate>Sun, 17 May 2009 16:17:37 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
		
		<category><![CDATA[Technology]]></category>

		<category><![CDATA[braid]]></category>

		<category><![CDATA[git]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[ruby on rails]]></category>

		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://blog.stefanbotzenhart.com/?p=85</guid>

		<description><![CDATA[<p>Attending <a href="http://www.euruko2009.org/">Euruko 2009</a> was great! I recommend this conference to every ruby enthusiast. The authors auf <a href="http://github.com/evilchelu/braid/tree/master">braid</a> held a flash talk and tried to demonstrate the power of <a href="http://github.com/evilchelu/braid/tree/master">braid</a>. Unfortunately the didn&#8217;t manage to although they typed their commands incredibly fast <img src='http://blog.stefanbotzenhart.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Back home I gave <a href="http://github.com/evilchelu/braid/tree/master">braid</a> a try and this tool is great. Before I used git submodules but it&#8217;s not the same &#8230;</p>
<p>To make use of <a href="http://github.com/evilchelu/braid/tree/master">braid</a> you have to install the gem. Just hit</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> gem <span style="color: #c20cb9; font-weight: bold;">install</span> braid</pre></div></div>

<p>Now you can start using braid in your git repository. For example I want to use my <a href="https://github.com/basiszwo/aasm">forked acts_as_state_machine gem</a></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">braid add git:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>basiszwo<span style="color: #000000; font-weight: bold;">/</span>aasm.git vendor<span style="color: #000000; font-weight: bold;">/</span>gems<span style="color: #000000; font-weight: bold;">/</span>basiszwo-aasm-2.0.5</pre></div></div>

<p>Notice the &#8216;basiszwo-aasm-2.0.5&#8242;. It&#8217;s important to add gems to your vendor/gems directory with name and a version number. If you don&#8217;t you&#8217;ll receive an error while loading your rails application.</p>
<p>You&#8217;ll get a .braids file where all your external repositories are listed.</p>
<p>To keep track of these repositories just type</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">braid update</pre></div></div>

<p>That&#8217;s all! Pretty easy &#8230;</p>
<p>Have a look a the <a href="http://github.com/evilchelu/braid/tree/master">project&#8217;s github page</a> for more infos!</p>
]]></description>
		
		<wfw:commentRss>http://blog.stefanbotzenhart.com/2009/05/17/braid-keep-track-of-external-git-and-svn-repositories-within-a-git-repository/feed/</wfw:commentRss>
		</item>
		<item>
		<title>git-sh - a customized bash shell suitable for git work</title>
		<link>http://blog.stefanbotzenhart.com/2009/05/15/git-sh-a-customized-bash-shell-suitable-for-git-work/</link>
		<comments>http://blog.stefanbotzenhart.com/2009/05/15/git-sh-a-customized-bash-shell-suitable-for-git-work/#comments</comments>
		<pubDate>Fri, 15 May 2009 09:09:49 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
		
		<category><![CDATA[Technology]]></category>

		<category><![CDATA[bash]]></category>

		<category><![CDATA[git]]></category>

		<category><![CDATA[github]]></category>

		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://blog.stefanbotzenhart.com/?p=80</guid>

		<description><![CDATA[<p>Due to a buddy&#8217;s tip I installed <a href="http://github.com/rtomayko/git-sh/tree/master">git-sh</a> from <a href="http://www.github.com">github</a>. Git-sh is a customized bash shell for your daily work with git. It ships along with some handy shortcuts within your new git shell and it&#8217;s fully customizable:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">Aliases from ~<span style="color: #000000; font-weight: bold;">/</span>.gitshrc
commit                  <span style="color: #ff0000;">'git commit --verbose'</span>
amend                   <span style="color: #ff0000;">'git commit --verbose --amend'</span>
ci                      <span style="color: #ff0000;">'git commit --verbose'</span>
ca                      <span style="color: #ff0000;">'git commit --verbose --all'</span>
n                       <span style="color: #ff0000;">'git commit --verbose --amend'</span>
a                       <span style="color: #ff0000;">'git add'</span>
aa                      <span style="color: #ff0000;">'git add --update'</span>
ap                      <span style="color: #ff0000;">'git add --patch'</span>
c                       <span style="color: #ff0000;">'git checkout'</span>
f                       <span style="color: #ff0000;">'git fetch'</span>
r                       <span style="color: #ff0000;">'git rebase --interactive HEAD~10'</span>
d                       <span style="color: #ff0000;">'git diff'</span>
p                       <span style="color: #ff0000;">'git diff --cached'</span>   <span style="color: #666666; font-style: italic;"># mnemonic: &quot;patch&quot;</span>
s                       <span style="color: #ff0000;">'git status'</span>
L                       <span style="color: #ff0000;">'git log'</span>
l                       <span style="color: #ff0000;">'git log --pretty=oneline --abbrev-commit'</span>
ll                      <span style="color: #ff0000;">'git log --pretty=oneline --abbrev-commit --max-count=15'</span>
mirror                  <span style="color: #ff0000;">'git reset --hard'</span>
stage                   <span style="color: #ff0000;">'git add'</span>
unstage                 <span style="color: #ff0000;">'git reset HEAD'</span>
pop                     <span style="color: #ff0000;">'git reset --soft HEAD^'</span>
review                  <span style="color: #ff0000;">'git log -p --max-count=1'</span></pre></div></div>

<p>Just check it out! Great tool, easy usage!</p>
]]></description>
		
		<wfw:commentRss>http://blog.stefanbotzenhart.com/2009/05/15/git-sh-a-customized-bash-shell-suitable-for-git-work/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->