anchor.diff:  
   -compile([{parse_transform, lager_transform}]).
   
  +-include_lib("stdlib/include/ms_transform.hrl").
  +
   -behaviour(gen_server).
   
   %% API
  
positive.code: 
  priv_new_lease(User, Repo, Path, State) ->
      #state{max_lease_time = MaxLeaseTime} = State,
      T = fun() ->
                  CurrentTime = erlang:system_time(milli_seconds),
                  case mnesia:read(lease, {Repo, Path}) of
                      [#lease{time = Time} | _] when (MaxLeaseTime - (CurrentTime - Time)) > 0 ->
                          {busy, MaxLeaseTime - (CurrentTime - Time)};
                      _ ->
                          mnesia:write(#lease{s_path = {Repo, Path},
                                              u_id = User,
                                              time = erlang:system_time(milli_seconds)})
                  end
          end,
      {atomic, Result} = mnesia:transaction(T),
  
negative.code: priv_clear_leases() ->
      {atomic, Result} = mnesia:clear_table(lease),
      Result.
  
  priv_write_row(User, Repo, Path) ->
      mnesia:write(#lease{s_path = {Repo, Path},
                          u_id = User,
                          time = erlang:system_time(milli_seconds)}).
  