anchor.diff:  %% exported functions
   -export([make/0,
            torrents/0,
  -         copy/1]).
  +         copy_file/1,
  +         info_path/1,
  +         info_hash/1]).
   
   %% private functions
   -export([exists/1]).
  
positive.code:     %% @todo Recursive file:delete.
      ok.
  
  
  dotfiles_test_() ->
      {setup,local,
  
negative.code: 
  %% @doc Make a private copy of a torrent file.
  %% @end
  -spec copy_file(Torrentfile::string()) -> ok.
  copy_file(Torrentfile) when is_list(Torrentfile) ->
      Dest = copy_path(Torrentfile),
      case file:copy(Torrentfile, Dest) of
          {ok, _} -> ok;
          {error, _}=Error -> Error
      end.
  
  -spec copy_path(Torrentfile::string()) -> Copyfile::string().
  copy_path(Torrentfile) ->
      File = filename:basename(Torrentfile),
      Dotdir = gproc:get_env(l, etorrent, dotdir),
      filename:join([Dotdir, File]).
  
  %% @doc Get the path of the info file for a torrent.
  %% @end
  -spec info_path(Torrentfile::string()) -> Infofile::string().
  info_path(Torrentfile) when is_list(Torrentfile) ->
      copy_path(Torrentfile) ++ ".info".
  
  %% @doc Get the info hash of a torrent file.
  %% @end
  -spec info_hash(Torrentfile::string()) -> binary().
  info_hash(Torrentfile) ->
      {ok, Torrent} = etorrent_bcoding:parse_file(Torrentfile),
      etorrent_metainfo:get_infohash(Torrent).
  
  %% @private Check if a file path exists.
  -spec exists(Path::string()) -> boolean().
  