anchor.diff:      ok = filelib:ensure_dir(AppDir),
       rebar_utils:sh(?FMT("svn checkout -r ~s ~s ~s",
                           [Rev, Url, filename:basename(AppDir)]),
  -                   [{cd, filename:dirname(AppDir)}]).
  +                   [{cd, filename:dirname(AppDir)}]);
  +download_source(AppDir, {rsync, Url}) ->
  +    ok = filelib:ensure_dir(AppDir),
  +    rebar_utils:sh(?FMT("rsync -az --delete ~s/ ~s", [Url, AppDir]), []).
   
   update_source(Dep) ->
       %% It's possible when updating a source, that a given dep does not have a
  
positive.code: has_vcs_dir(svn, Dir) ->
      filelib:is_dir(filename:join(Dir, ".svn"))
          orelse filelib:is_dir(filename:join(Dir, "_svn"));
  has_vcs_dir(_, _) ->
      true.
  
  
negative.code:                    "Bazaar \\(bzr\\) (\\d+).(\\d+)");
  vcs_client_vsn(svn) ->
      vcs_client_vsn(rebar_utils:find_executable("svn"), " --version",
                     "svn, version (\\d+).(\\d+)");
  vcs_client_vsn(rsync) ->
      vcs_client_vsn(rebar_utils:find_executable("rsync"), " --version",
                     "rsync  version (\\d+).(\\d+)").
  
  has_vcs_dir(git, Dir) ->
      filelib:is_dir(filename:join(Dir, ".git"));
  