<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>app/models/triggers.rb</filename>
    </added>
    <added>
      <filename>test/unit/trigger_test.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -73,12 +73,6 @@ EOF
   def status
     build_status.to_s
   end
-  
-  def status=(value)
-    FileUtils.rm_f(Dir[&quot;#{artifacts_directory}/build_status.*&quot;])
-    FileUtils.touch(artifact(&quot;build_status.#{value}&quot;))
-    build_status = value
-  end
 
   def successful?
     build_status.succeeded?</diff>
      <filename>app/models/build.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,33 +1,37 @@
 class BuildStatus
+  SUCCESS = 'success'
+  FAILED = 'failed'
+  INCOMPLETE = 'incomplete'
+  NEVER_BUILT = 'never_built'
   
   def initialize(artifacts_directory)
     @artifacts_directory = artifacts_directory 
   end
   
   def never_built?
-    read_latest_status == 'never_built'
+    read_latest_status == NEVER_BUILT
   end
   
   def succeeded?
-    read_latest_status == 'success'
+    read_latest_status == SUCCESS
   end
   
   def incomplete?
-    read_latest_status == 'incomplete'
+    read_latest_status == INCOMPLETE
   end
   
   def failed?
-    read_latest_status == 'failed'
+    read_latest_status == FAILED
   end
   
   def succeed!(elapsed_time)
-    FileUtils.mv @artifacts_directory, &quot;#{@artifacts_directory}-success.in#{elapsed_time}s&quot;
+    FileUtils.mv @artifacts_directory, &quot;#{@artifacts_directory}-#{SUCCESS}.in#{elapsed_time}s&quot;
   end
   
   def fail!(elapsed_time, error_message=nil)
     error_message_file = File.join(@artifacts_directory, &quot;error.log&quot;)
     File.open(error_message_file, &quot;w+&quot;){|f| f.write error_message } if error_message
-    FileUtils.mv @artifacts_directory, &quot;#{@artifacts_directory}-failed.in#{elapsed_time}s&quot;
+    FileUtils.mv @artifacts_directory, &quot;#{@artifacts_directory}-#{FAILED}.in#{elapsed_time}s&quot;
   end
   
   def created_at
@@ -69,13 +73,13 @@ class BuildStatus
   private
   
   def read_latest_status
-    return 'never_built' unless File.exist? @artifacts_directory
+    return NEVER_BUILT unless File.exist? @artifacts_directory
     match_status(@artifacts_directory).downcase
   end
   
   def match_status(dir_name)
     a = dir_name.split(&quot;-&quot;)
     return a.last.split(&quot;.&quot;).first if  a.size &gt; 2
-    return &quot;incomplete&quot;
+    return INCOMPLETE
   end
 end
\ No newline at end of file</diff>
      <filename>app/models/build_status.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,5 @@
 require 'fileutils'
+require 'triggers'
 
 class Project
   @@plugin_names = []
@@ -38,6 +39,7 @@ class Project
     @settings = ''
     @config_file_content = ''
     @error_message = ''
+    @trigger = ChangeInSourceControlTrigger.new
     instantiate_plugins
   end
   
@@ -145,6 +147,12 @@ class Project
     builds.last
   end
   
+  def create_build(label)
+    build = Build.new(self, label)
+    build.artifacts_directory # create the build directory
+    build
+  end
+  
   def previous_build(current_build)  
     all_builds = builds
     index = get_build_index(all_builds, current_build.label)
@@ -193,9 +201,9 @@ class Project
   end
 
   def build_if_necessary
-    notify :polling_source_control
     begin
-      revisions = new_revisions
+      revisions = @trigger.get_revisions_to_build(self)
+      
       if revisions.empty?
         notify :no_new_revisions_detected
         return nil</diff>
      <filename>app/models/project.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,6 +9,10 @@ Revision #{number} committed by #{committed_by} on #{time.strftime('%Y-%m-%d %H:
     EOL
   end
 
+  def ==(other)
+    number == other.number
+  end
+  
   def to_i
     number
   end</diff>
      <filename>app/models/revision.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,4 +4,5 @@
 
 Project.configure do |project|
   project.email_notifier.emails = [&quot;cruisecontrol-developers@rubyforge.org&quot;]
+#  project.triggered_by successful_build_of(:cruise_control_fast)
 end</diff>
      <filename>cruise_config.rb</filename>
    </modified>
    <modified>
      <diff>@@ -3,8 +3,8 @@
 # in order to make cruise run as daemon, you need:
 # 1. cp $CCRB_HOME/daemon/cruise.sample $CCRB_HOME/daemon/cruise
 # 2. specify your cruise_path to $CCRB_HOME in $CCRB_HOME/daemon/cruise file
-# 3. ln -s $CCRB_HOME/daemon/cruise /etc/init.d/cruise (you may need sudo this)
-# 4. update-rc.d cruise (you may want to choose options by yourself, and you may need sudo this)
+# 3. ln -s $CCRB_HOME/daemon/cruise /etc/init.d/cruise (you may need to 'sudo' this)
+# 4. update-rc.d cruise (you may want to choose options by yourself, and you may need to 'sudo' this)
 # 5. it's done :&gt;
 
 require &quot;fileutils&quot;</diff>
      <filename>daemon/cruise.sample</filename>
    </modified>
    <modified>
      <diff>@@ -77,7 +77,7 @@ begin
     write_to_log_and_console &quot;Builder for project '#{project.name}' started&quot;
     puts &quot;Logging to: #{File.expand_path(CRUISE_OPTIONS[:log_file_name])}&quot;
 
-	while (true) do
+	  while (true) do
       catch(:reload_project) do
         project.scheduler.run
       end</diff>
      <filename>script/builder</filename>
    </modified>
    <modified>
      <diff>@@ -5,7 +5,6 @@ class BuildTest &lt; Test::Unit::TestCase
 
   def test_initialize_should_load_status_file_and_build_log
     with_sandbox_project do |sandbox, project|
-      sandbox.new :file =&gt; &quot;build-2-success.in9.235s/build_status.success.in9.235s&quot;
       sandbox.new :file =&gt; &quot;build-2-success.in9.235s/build.log&quot;, :with_content =&gt; &quot;some content&quot;
       build = Build.new(project, 2)
   
@@ -17,7 +16,7 @@ class BuildTest &lt; Test::Unit::TestCase
 
   def test_initialize_should_load_failed_status_file
     with_sandbox_project do |sandbox, project|
-      sandbox.new :file =&gt; &quot;build-2-failed.in2s/build_status.failed.in2s&quot;
+      sandbox.new :directory =&gt; &quot;build-2-failed.in2s&quot;
       build = Build.new(project, 2)
   
       assert_equal 2, build.label
@@ -54,12 +53,12 @@ class BuildTest &lt; Test::Unit::TestCase
   
   def test_successful?
     with_sandbox_project do |sandbox, project|
-      sandbox.new :file =&gt; &quot;build-1-success/build_status.success&quot;
-      sandbox.new :file =&gt; &quot;build-2-Success/build_status.Success&quot;
-      sandbox.new :file =&gt; &quot;build-3-failure/build_status.failure&quot;
-      sandbox.new :file =&gt; &quot;build-4-crap/build_status.crap&quot;
-      sandbox.new :file =&gt; &quot;build-5/foo&quot;
-  
+      sandbox.new :directory =&gt; &quot;build-1-success&quot;
+      sandbox.new :directory =&gt; &quot;build-2-Success&quot;
+      sandbox.new :directory =&gt; &quot;build-3-failure&quot;
+      sandbox.new :directory =&gt; &quot;build-4-crap&quot;
+      sandbox.new :directory =&gt; &quot;build-5&quot;
+
       assert Build.new(project, 1).successful?
       assert Build.new(project, 2).successful?
       assert !Build.new(project, 3).successful?
@@ -70,8 +69,8 @@ class BuildTest &lt; Test::Unit::TestCase
 
   def test_incomplete?
     with_sandbox_project do |sandbox, project|
-      sandbox.new :file =&gt; &quot;build-1-incomplete/build_status.incomplete&quot;
-      sandbox.new :file =&gt; &quot;build-2-something_else/build_status.something_else&quot;
+      sandbox.new :directory =&gt; &quot;build-1-incomplete&quot;
+      sandbox.new :directory =&gt; &quot;build-2-something_else&quot;
   
       assert Build.new(project, 1).incomplete?
       assert !Build.new(project, 2).incomplete?</diff>
      <filename>test/unit/build_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -476,7 +476,7 @@ class ProjectTest &lt; Test::Unit::TestCase
       assert_equal 3, @project.last_builds(5).length
     end
   end
-   
+  
   private
   
   def stub_build(label)</diff>
      <filename>test/unit/project_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -105,7 +105,7 @@ class ProjectsTest &lt; Test::Unit::TestCase
 
   def test_load_project_with_no_config
     in_sandbox do |sandbox|
-      sandbox.new :file =&gt; &quot;myproject/builds-1/__success__&quot;
+      sandbox.new :directory =&gt; &quot;myproject/builds-1&quot;
 
       new_project = Projects.load_project(sandbox.root + '/myproject')
 </diff>
      <filename>test/unit/projects_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>c553d8d2c67464d6b69832d1dda823f512a0f499</id>
    </parent>
  </parents>
  <author>
    <name>stellsmi</name>
    <email>stellsmi@c04ce798-636b-4ca8-9149-0f9336831111</email>
  </author>
  <url>http://github.com/benburkert/cruisecontrolrb/commit/a63e4d9578d0798a3e86db6e7c90aa280b72a0d6</url>
  <id>a63e4d9578d0798a3e86db6e7c90aa280b72a0d6</id>
  <committed-date>2007-04-09T09:35:48-07:00</committed-date>
  <authored-date>2007-04-09T09:35:48-07:00</authored-date>
  <message>first cut of build chaining

git-svn-id: http://cruisecontrolrb.rubyforge.org/svn/trunk@452 c04ce798-636b-4ca8-9149-0f9336831111</message>
  <tree>a8fbb301e3a7ffca77c5f715dabf2adc4fefc13e</tree>
  <committer>
    <name>stellsmi</name>
    <email>stellsmi@c04ce798-636b-4ca8-9149-0f9336831111</email>
  </committer>
</commit>
