<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,11 +1,21 @@
 #!/usr/bin/ruby
 class DoerException &lt; Exception; end
+class ProjectMissingError &lt; DoerException
+  def to_s
+    &quot;No such project&quot;
+  end
+end
+class CommandMissingError &lt; DoerException
+  def to_s
+    &quot;No such command&quot;
+  end
+end
 
 load 'dofile'
 
 class Doer
-  class &lt;&lt; self
-    def run(who, what, args)
+  class &lt;&lt; self  
+    def run(who, what, args, verbose = true)
       command = find_cmd(who, what)
       templates, replacements = normalize_cmd(who, command)
       commands = apply_replacements(templates, replacements, args)
@@ -17,9 +27,14 @@ class Doer
         end
         puts &quot;\n\n&quot;
       end
-    rescue DoerException =&gt; e
-      puts e.message
-      exit
+    rescue CommandMissingError =&gt; e
+      puts &quot;#{e.message} \&quot;#{what}\&quot;&quot; if verbose
+      false
+    rescue ProjectMissingError =&gt; e
+      puts &quot;#{e.message} \&quot;#{who}\&quot;&quot; if verbose
+      false
+    else
+      true
     end
     
     private
@@ -54,8 +69,8 @@ class Doer
     end
     
     def find_cmd(project, command)
-      raise(DoerException, &quot;No such project \&quot;#{project}\&quot;&quot;) unless PROJECTS.key?(project)
-      cmd = PROJECTS[project][command] || PROJECTS[:default][command] || raise(DoerException, &quot;No such command \&quot;#{command}\&quot;&quot;)
+      raise(ProjectMissingError) unless PROJECTS.key?(project)
+      cmd = PROJECTS[project][command] || PROJECTS[:default][command] || raise(CommandMissingError)
       cmd = [cmd] unless cmd.class == Array
       cmd
     end
@@ -84,7 +99,8 @@ args  = input
 
 what = what.downcase.to_sym
 if (!who || who == 'all')
-  (PROJECTS.keys - [:default]).each{|p| Doer::run(p, what, args)}
+  results = (PROJECTS.keys - [:default]).collect{|p| Doer::run(p, what, args, false)}
+  puts &quot;No such project or command&quot; if results.all?{|result| !result}
 else
   who = who.downcase.to_sym
   Doer::run(who, what, args)</diff>
      <filename>do</filename>
    </modified>
    <modified>
      <diff>@@ -44,8 +44,14 @@ PROJECTS = {
       :watch    =&gt; 'tail -f log/development.log'
     },
     :jaxer =&gt; {
-      :start    =&gt; &quot;thin -s1 -C thin/development_config.yml --rackup thin/config.ru start&quot;,
-      :stop     =&gt; &quot;thin -s1 -C thin/development_config.yml --rackup thin/config.ru stop&quot;,
+      :startj   =&gt; &quot;. /Applications/Aptana_Jaxer/scripts/start.sh&quot;,
+      :starts   =&gt; &quot;thin -s1 -C thin/development_config.yml --rackup thin/config.ru start&quot;,
+      :stopj    =&gt; &quot;. /Applications/Aptana_Jaxer/scripts/stop.sh&quot;,
+      :stops    =&gt; &quot;thin -s1 -C thin/development_config.yml --rackup thin/config.ru stop&quot;,
+      :start    =&gt; [:startj, :starts],
+      :stop     =&gt; [:stops, :stopj],
+      :restartj =&gt; [:stopj, :startj],
+      :restarts =&gt; [:stops, :starts],
       :cleanup  =&gt; :stop,
       :sc       =&gt; :skip,
       :routes   =&gt; :skip,</diff>
      <filename>dofile_sample</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>3d5d542db81b2a754b0b64ef508b1a9c10dc0c75</id>
    </parent>
  </parents>
  <author>
    <name>Maxim Chernyak</name>
    <email>max@bitsonnet.com</email>
  </author>
  <url>http://github.com/maxim/doer/commit/d4a7cf37909fd991c7f3dc5fc95f29a481dae9be</url>
  <id>d4a7cf37909fd991c7f3dc5fc95f29a481dae9be</id>
  <committed-date>2009-01-15T13:25:25-08:00</committed-date>
  <authored-date>2009-01-15T13:25:25-08:00</authored-date>
  <message>Fix bug with omitting project name where Doer would complain that command not found even though it exists for some projects. More samples.</message>
  <tree>27ef0056ed61142d893037832ae02f4f63b0f0b5</tree>
  <committer>
    <name>Maxim Chernyak</name>
    <email>max@bitsonnet.com</email>
  </committer>
</commit>
