Hi everyone,
Version 2.6.3 seems to ignore the output of @check_if_uptodate decorator and runs the task regardless.
Here is an example:
import os
from ruffus import *
def sentinel_file_exists(output_file):
    if not os.path.exists(output_file):
        return True, "Missing file %s" % output_file
    else:
        return False, "File %s exists" % output_file
        
@posttask(touch_file("task1_completed.flag"))
@parallel([["task1_completed.flag"]])
@check_if_uptodate(sentinel_file_exists)
def task1(x):
    print 'in task 1'
@follows(task1)    
@posttask(touch_file("task2_completed.flag"))
@parallel([["task2_completed.flag"]])
@check_if_uptodate(sentinel_file_exists)
def task2(x):
    print 'in task2'
    
pipeline_run(task2)
"
________________________________________
Tasks which will be run:
Task enters queue = 'task1'
in task 1
Completed Task = 'task1'
Task enters queue = 'task2'
in task2
Completed Task = 'task2'
"
It is supposed NOT to run 'task1' and 'task2' when re-running due to the presence of flag files, i.e. 'task1_completed.flag' and 'task2_completed.flag'. But, the same output is produced again.
Version 2.4.1, on the other hand, works well.
Cheers,
Jafar