Detect Conflicts

If you make no mistakes, FlowTracer remains invisible. However, if in your design activity you accidentally violate dependency constraints, FlowTracer will alert you. FlowTracer will warn you if you try to execute a tool with invalid inputs.

  1. Execute the following:
    % touch aa
    % vw cp bb cc
    In this case, the modification to aa invalidated bb and therefore made the request to run the job of copying bb to cc a wasted step because bb was no longer valid. When you request that job to be done, FlowTracer will prompt you as follows:
    FlowTracer: ATTENTION! Input conflict detected! FlowTracer: ATTENTION!
    FlowTracer: ATTENTION! Input conflict detected! FlowTracer: ATTENTION!
    ---------- User Decision Required ---------------
    INPUT CONFLICT for tool
    vw cp bb cc
    (directory ${HOME}/tutorial)
    The tool needs
    FILE:${HOME}/tutorial/bb
    which is currently INVALID
    1 -- CONTINUE
    2 -- STOP ASKING
    3 -- (*) ABORT
    Please choose (1--3) >>>

    Here you have the chance to abort from an operation that has to be redone anyway later, or continue as you would have without FlowTracer. At least you are aware that the computation is likely to be incorrect.

  2. If you try to redefine the source of a file, FlowTracer will ask you if you really want to change how the file is generated. Try the following
    % vw cp aa bb
    % vw cp bb cc
    % vw cp aa cc
    Example of an output conflict :
    FlowTracer: ATTENTION! Output conflict detected! FlowTracer: ATTENTION!
    FlowTracer: ATTENTION! Output conflict detected! FlowTracer: ATTENTION!
    ---------- User Decision Required ---------------
    OUTPUT CONFLICT caused by data item
    FILE:${HOME}/tutorial/cc
    Command lines are different.
    Common part is 6 characters long.
    'bb cc' != 'aa cc'.
    ^____ ^____
    1 -- CONTINUE
    2 -- (*) ABORT
    3 -- MORE INFO
    Please choose (1--3) >>>

    You can see that cc is already dependent on bb.

  3. Answer 2 (Abort).
    FlowTracer will also prevent you from creating cyclic dependencies.
    % vw cp aa bb
    % vw cp bb cc
    % vw cp cc aa # whoops, a cycle (aa->bb->cc->aa)
    Example of an cycle conflict :
    FlowTracer: ATTENTION! Cycle detected! FlowTracer: ATTENTION!
    FlowTracer: ATTENTION! Cycle detected! FlowTracer: ATTENTION!
    vw Mar 30 12:36:03 Failed FlowTracer call libconnect.cc,146
    
    vw ERROR Mar 30 12:36:03 Cycle conflict for ${HOME}/tutorial/aa
    vw Mar 30 12:36:03 This tool invocation is now forgotten
    vw Mar 30 12:36:03 Serious dependency violation (status -3)