anchor.diff:  %% @spec do_task(Task, Args) -> ok
   %% @end
   %%--------------------------------------------------------------------
  -do_task(Task, Args) when is_atom(Task) ->
  -    do_task(sinan, Task, Args).
  +do_task(Task, StartDir, Args) when is_atom(Task) ->
  +    do_task(sinan, StartDir, Task, Args).
   
   %%--------------------------------------------------------------------
   %% @doc
  
positive.code: %%--------------------------------------------------------------------
  %% @doc
  %%  Run the build task. {@link sin_erl_builder}
  %% @spec build() -> ok
  %% @end
  %%--------------------------------------------------------------------
  build() ->
      build([]).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  Run the build with the specified args. {@link sin_erl_builder}
  %% @spec build(Args) -> ok
  %% @end
  %%--------------------------------------------------------------------
  build(Args) ->
      do_task(build, Args).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  Run the analyze task. {@link sin_analyze}
  %% @spec analyze() -> ok
  %% @end
  %%--------------------------------------------------------------------
  analyze() ->
      analyze([]).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  Run the analyze task. {@link sin_analyze}
  %% @spec analyze(Args::list()) -> ok
  %% @end
  %%--------------------------------------------------------------------
  analyze(Args) ->
      do_task(analyze, Args).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  run the doc task. {@link sin_edoc}
  %% @spec doc() -> ok
  %% @end
  %%--------------------------------------------------------------------
  doc() ->
      doc([]).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  run the doc task. {@link sin_edoc}
  %% @spec doc() -> ok
  %% @end
  %%--------------------------------------------------------------------
  doc(Args) ->
      do_task(doc, Args).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  run the shell task. {@link sin_shell}
  %% @spec shell() -> ok
  %% @end
  %%--------------------------------------------------------------------
  shell() ->
      shell([]).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  run the shell task. {@link sin_shell}
  %% @spec shell(Args::list()) -> ok
  %% @end
  %%--------------------------------------------------------------------
  shell(Args) ->
     do_task(shell, Args).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  Run the gen task. {@link sin_gen}
  %% @spec gen() -> ok
  %% @end
  %%--------------------------------------------------------------------
  gen() ->
      gen([]).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  Run the gen task. {@link sin_gen}
  %% @spec gen(Args::list()) -> ok
  %% @end
  %%--------------------------------------------------------------------
  gen(Args) ->
      do_task(singen, gen, Args).
  
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  run the clean task. {@link sin_clean}
  %% @spec clean() -> ok
  %% @end
  %%--------------------------------------------------------------------
  clean() ->
      clean([]).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  run the clean task. {@link sin_clean}
  %% @spec clean(Args::list()) -> ok
  %% @end
  %%--------------------------------------------------------------------
  clean(Args) ->
      do_task(clean, Args).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  run the help task. {@link sin_help}
  %% @spec help() -> ok
  %% @end
  %%--------------------------------------------------------------------
  help() ->
      help([]).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  run the help task. {@link sin_help}
  %% @spec help(Args::list()) -> ok
  %% @end
  %%--------------------------------------------------------------------
  help(Args) ->
      do_task(sinhelp, help, Args).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  run the depends task. {@link sin_depends}
  %% @spec depends() -> ok
  %% @end
  %%--------------------------------------------------------------------
  depends() ->
      depends([]).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  run the depends task. {@link sin_depends}
  %% @spec depends(Args::list()) -> ok
  %% @end
  %%--------------------------------------------------------------------
  depends(Args) ->
      do_task(depends, Args).
  
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  run the test task. {@link sin_test}
  %% @spec test() -> ok
  %% @end
  %%--------------------------------------------------------------------
  test() ->
      test([]).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  run the test task. {@link sin_test}
  %% @spec test(Args::list()) -> ok
  %% @end
  %%--------------------------------------------------------------------
  test(Args) ->
      do_task(test, Args).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  run the release task. {@link sin_release_builder}
  %% @spec release() -> ok
  %% @end
  %%--------------------------------------------------------------------
  release() ->
      release([]).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  run the release task. {@link sin_release_builder}
  %% @spec release(Args::list()) -> ok
  %% @end
  %%--------------------------------------------------------------------
  release(Args) ->
      do_task(release, Args).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  run the dist task. {@link sin_dist_builder}
  %% @spec dist() -> ok
  %% @end
  %%--------------------------------------------------------------------
  dist() ->
      dist([]).
  
  %%--------------------------------------------------------------------
  %% @doc
  %%  run the dist task. {@link sin_dist_builder}
  %% @spec dist(Args::list()) -> ok
  %% @end
  %%--------------------------------------------------------------------
  dist(Args) ->
      do_task(dist, Args).
  
  
  %%--------------------------------------------------------------------
  
negative.code: %% @spec do_task(Chain, Task, Args) -> ok
  %% @end
  %%--------------------------------------------------------------------
  do_task(Chain, StartDir, Task, Args) when is_atom(Task) ->
      BuildRef = eta_engine:make_run_id(),
      fconf:start_config(BuildRef,
                         fun sin_parse_handle:parse_config_file/1),
      fconf:store(BuildRef, "build.args", Args),
      fconf:store(BuildRef, "build.start_dir", StartDir),
      eta_engine:run(Chain, Task, Args),
      fconf:stop_config(BuildRef).
  
  