Skip to content

Rake executes file task when prerequisites have older timestamp #246

Open

Description

@satosho

When a file task depends on some non-file task indirectly,
Rake executes the file task even if its immediate prerequisite files have older timestamp.

It looks like the behavior changed at 12.1.0.

Example

require "rake/clean"

CLEAN.include("config.yml", "component")

task "setup" do
  puts Rake::VERSION
  touch "config.yml" unless File.exist?("config.yml")
end

file "config.yml" => "setup"

file "component" => "config.yml" do |t|
  puts "[config.yml] #{File.mtime(t.prerequisites[0])}"
  puts "[component]  #{File.exist?(t.name) && File.mtime(t.name)}"
  sleep 1
  touch t.name
end

Based on the above Rakefile, clean up and create the "component" first.

$ rake clean && rake component

The next rake component results in different behavior as follows.
On 12.0.0:

$ rake component --trace
(in /path/to/Rakefile-directory)
** Invoke component (first_time, not_needed)
** Invoke config.yml (first_time)
** Invoke setup (first_time)
** Execute setup
12.0.0
** Execute config.yml

On 12.1.0:

$ rake component --trace
(in /path/to/Rakefile-directory)
** Invoke component (first_time)
** Invoke config.yml (first_time)
** Invoke setup (first_time)
** Execute setup
12.1.0
** Execute config.yml
** Execute component
[config.yml] 2018-01-01 15:13:19 +0900
[component]  2018-01-01 15:13:20 +0900
touch component

Activity

  1. grzuy commented on Feb 7, 2018

    @grzuy
    Contributor

    I can reproduce the same issue.

    Working on a fix for this.

  2. added a commit that references this issue on Feb 7, 2018
    efe3f02
  3. grzuy commented on Feb 21, 2018

    @grzuy
    Contributor

    There's an opened PR attempting to fix this #251

  4. added a commit that references this issue on Feb 22, 2018
    b27d86f
  5. grzuy commented on Feb 22, 2018

    @grzuy
    Contributor

    Second attempt at fixing this one here #257

  6. chrislo commented on Jul 13, 2020

    @chrislo

    Was a fix for this bug ever merged? I've run into it today and it would be great if it could be fixed.

  7. jgomo3 commented on Jun 22, 2022

    @jgomo3

    Maybe this is precisely the use case of Phony tasks: https://ruby.github.io/rake/doc/rakefile_rdoc.html#label-Phony+Task

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions