Skip to content

Commit

Permalink
Merge pull request #287 from DavidEGrayson/pull_request_1
Browse files Browse the repository at this point in the history
FileTask: Return a late timestamp instead of an early timestamp if file doesn't exist
  • Loading branch information
drbrain committed Nov 24, 2014
2 parents f0a96a7 + 6f62942 commit f71fe95
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 11 deletions.
1 change: 1 addition & 0 deletions lib/rake.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ module Rake
require 'rake/file_list'
require 'rake/default_loader'
require 'rake/early_time'
require 'rake/late_time'
require 'rake/name_space'
require 'rake/task_manager'
require 'rake/application'
Expand Down
5 changes: 3 additions & 2 deletions lib/rake/ext/time.rb
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
#--
# Extensions to time to allow comparisons with an early time class.
# Extensions to time to allow comparisons with early and late time classes.

require 'rake/early_time'
require 'rake/late_time'

class Time # :nodoc: all
alias rake_original_time_compare :<=>
def <=>(other)
if Rake::EarlyTime === other
if Rake::EarlyTime === other || Rake::LateTime === other
- other.<=>(self)
else
rake_original_time_compare(other)
Expand Down
2 changes: 1 addition & 1 deletion lib/rake/file_task.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def timestamp
if File.exist?(name)
File.mtime(name.to_s)
else
Rake::EARLY
Rake::LATE
end
end

Expand Down
17 changes: 17 additions & 0 deletions lib/rake/late_time.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
module Rake
# LateTime is a fake timestamp that occurs _after_ any other time value.
class LateTime
include Comparable
include Singleton

def <=>(other)
1
end

def to_s
'<LATE TIME>'
end
end

LATE = LateTime.instance
end
12 changes: 4 additions & 8 deletions test/test_rake_file_task.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ def test_file_need
File.delete(ftask.name) rescue nil

assert ftask.needed?, "file should be needed"
assert_equal Rake::LATE, ftask.timestamp

open(ftask.name, "w") { |f| f.puts "HI" }

Expand Down Expand Up @@ -84,19 +85,14 @@ def test_file_depends_on_task_depend_on_file
end

def test_existing_file_depends_on_non_existing_file
@ran = false

create_file(OLDFILE)
delete_file(NEWFILE)
file NEWFILE do
@ran = true
end

file OLDFILE => NEWFILE
file NEWFILE do |t| @runs << t.name end
file OLDFILE => NEWFILE do |t| @runs << t.name end

Task[OLDFILE].invoke

assert @ran
assert_equal [NEWFILE, OLDFILE], @runs
end

def test_needed_eh_build_all
Expand Down
18 changes: 18 additions & 0 deletions test/test_rake_late_time.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
require File.expand_path('../helper', __FILE__)

class TestRakeLateTime < Rake::TestCase
def test_late_time_comparisons
late = Rake::LATE
assert_equal late, late
assert late >= Time.now
assert late > Time.now
assert late != Time.now
assert Time.now < late
assert Time.now <= late
assert Time.now != late
end

def test_to_s
assert_equal '<LATE TIME>', Rake::LATE.to_s
end
end

0 comments on commit f71fe95

Please sign in to comment.